My fork of airsonic with experimental fixes and improvements. See branch "custom"
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

157 lines
5.2 KiB

/*
This file is part of Airsonic.
Airsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Airsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 (C) Airsonic Authors
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
*/
package org.airsonic.player.service;
import org.airsonic.player.domain.Player;
import org.airsonic.player.domain.PlayerTechnology;
import org.springframework.stereotype.Service;
/**
* @author Rémi Cocula
*/
@Service
public class JukeboxService {
private JukeboxLegacySubsonicService jukeboxLegacySubsonicService;
private JukeboxJavaService jukeboxJavaService;
public JukeboxService(JukeboxLegacySubsonicService jukeboxLegacySubsonicService,
JukeboxJavaService jukeboxJavaService) {
this.jukeboxLegacySubsonicService = jukeboxLegacySubsonicService;
this.jukeboxJavaService = jukeboxJavaService;
}
public void setGain(Player airsonicPlayer, float gain) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
jukeboxLegacySubsonicService.setGain(gain);
break;
case JAVA_JUKEBOX:
jukeboxJavaService.setGain(airsonicPlayer,gain);
break;
}
}
public void setPosition(Player airsonicPlayer, int positionInSeconds) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
throw new UnsupportedOperationException();
case JAVA_JUKEBOX:
jukeboxJavaService.setPosition(airsonicPlayer,positionInSeconds);
break;
}
}
public float getGain(Player airsonicPlayer) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
return jukeboxLegacySubsonicService.getGain();
case JAVA_JUKEBOX:
return jukeboxJavaService.getGain(airsonicPlayer);
}
return 0;
}
/**
* This method should be removed when the jukebox is controlled only through rest api.
*/
@Deprecated
public void updateJukebox(Player airsonicPlayer, int offset) {
if (airsonicPlayer.getTechnology().equals(PlayerTechnology.JUKEBOX)) {
jukeboxLegacySubsonicService.updateJukebox(airsonicPlayer,offset);
}
}
public int getPosition(Player airsonicPlayer) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
return jukeboxLegacySubsonicService.getPosition();
case JAVA_JUKEBOX:
return jukeboxJavaService.getPosition(airsonicPlayer);
}
return 0;
}
/**
* Plays the playQueue of a jukebox player starting at the first item of the queue.
*/
public void play(Player airsonicPlayer) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
jukeboxLegacySubsonicService.updateJukebox(airsonicPlayer,0);
break;
case JAVA_JUKEBOX:
jukeboxJavaService.play(airsonicPlayer);
break;
}
}
public void start(Player airsonicPlayer) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
jukeboxLegacySubsonicService.updateJukebox(airsonicPlayer,0);
break;
case JAVA_JUKEBOX:
jukeboxJavaService.start(airsonicPlayer);
break;
}
}
public void stop(Player airsonicPlayer) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
jukeboxLegacySubsonicService.updateJukebox(airsonicPlayer,0);
break;
case JAVA_JUKEBOX:
jukeboxJavaService.stop(airsonicPlayer);
break;
}
}
public void skip(Player airsonicPlayer,int index,int offset) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
jukeboxLegacySubsonicService.updateJukebox(airsonicPlayer,offset);
break;
case JAVA_JUKEBOX:
jukeboxJavaService.skip(airsonicPlayer,index,offset);
break;
}
}
/**
* This method is only here due to legacy considerations and should be removed
* if the jukeboxLegacySubsonicService is removed.
*/
@Deprecated
public boolean canControl(Player airsonicPlayer) {
switch (airsonicPlayer.getTechnology()) {
case JUKEBOX:
if (jukeboxLegacySubsonicService.getPlayer() == null) {
return false;
} else {
return jukeboxLegacySubsonicService.getPlayer().getId().equals(airsonicPlayer.getId());
}
case JAVA_JUKEBOX:
return true;
}
return false;
}
}