|
@@ -36,18 +36,24 @@ import org.apache.logging.log4j.Logger;
|
|
|
*
|
|
|
* @author tgoerner
|
|
|
*/
|
|
|
-public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListener,FeaturePlugin,PlaybackStatusUpdater
|
|
|
+public class JukeBox extends javax.swing.JFrame implements MouseListener,PlaybackStatusUpdater
|
|
|
{
|
|
|
public static final int JUKEBOX_PORT=0x6767;
|
|
|
- private Backend jukeboxBackend;
|
|
|
private static final Logger l = LogManager.getLogger();
|
|
|
+ private Backend backend;
|
|
|
/**
|
|
|
* Creates new form JukeBoxGUI
|
|
|
*/
|
|
|
- public JukeBox(JukeBoxPlugin p)
|
|
|
+ public JukeBox()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
+ public void setBackend(Backend b)
|
|
|
+ {
|
|
|
+ backend = b;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* This method is called from within the constructor to initialize the form.
|
|
|
* WARNING: Do NOT modify this code. The content of this method is always
|
|
@@ -212,9 +218,10 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
}
|
|
|
if((modified&evt.ALT_MASK)!=0)
|
|
|
{
|
|
|
- jukeboxBackend.quitWithSave();
|
|
|
+ APIWrapper.quickQuit();
|
|
|
}
|
|
|
- jukeboxBackend.skip();
|
|
|
+ backend.skip();
|
|
|
+
|
|
|
}//GEN-LAST:event_btnSkipActionPerformed
|
|
|
|
|
|
private void btnPlayPauseActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnPlayPauseActionPerformed
|
|
@@ -229,50 +236,23 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
int index = (Integer)((DefaultTableModel)tblPLE.getModel()).getValueAt(viewRow,0);
|
|
|
if(index>=0)
|
|
|
{
|
|
|
- jukeboxBackend.enqueue(index);
|
|
|
+ backend.enqueue(index);
|
|
|
}
|
|
|
}//GEN-LAST:event_btnEnqueueActionPerformed
|
|
|
|
|
|
private void btnReloadActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnReloadActionPerformed
|
|
|
{//GEN-HEADEREND:event_btnReloadActionPerformed
|
|
|
- jukeboxBackend.reload();
|
|
|
+ backend.reload();
|
|
|
rebuildTable(false);
|
|
|
}//GEN-LAST:event_btnReloadActionPerformed
|
|
|
-
|
|
|
- @Override
|
|
|
- public String getPluginName()
|
|
|
- {
|
|
|
- return "JukeBox";
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void initializePlugin()
|
|
|
- {
|
|
|
- if(APIWrapper.getUiPlugin()==this)
|
|
|
- {
|
|
|
- l.info("Init UI(JukeBox)");
|
|
|
- jukeboxBackend= new LocalBackend(this);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- l.info("Loaded as featurePlugin or standalone, delaying the init");
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void prepareUpgrade()
|
|
|
- {
|
|
|
- /*nothing to do for this plugin*/
|
|
|
- }
|
|
|
-
|
|
|
private void rebuildTable(boolean recovery)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
//mdl.setAllColumnsVisible();
|
|
|
|
|
|
- String[] titles = jukeboxBackend.getTitles();
|
|
|
+ String[] titles = backend.getTitles(); //TODO
|
|
|
for(int i=tblPLE.getRowCount()-1;i>0;i--)
|
|
|
{
|
|
|
((DefaultTableModel)tblPLE.getModel()).removeRow(i-1);
|
|
@@ -302,7 +282,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
APIWrapper.quickQuit();//this should not happen at all on remote
|
|
|
}
|
|
|
//reloading data from disk and flushing internal references when the resume state got corrupted from a encoding change
|
|
|
- jukeboxBackend.reload();
|
|
|
+ backend.reload();
|
|
|
rebuildTable(recovery);
|
|
|
}
|
|
|
//mdl.setColumnVisible(0, false);
|
|
@@ -328,40 +308,25 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
if(e.getSource()==seekBar)
|
|
|
{
|
|
|
|
|
|
- jukeboxBackend.seek(seekBar.getValue());
|
|
|
+ backend.seek(seekBar.getValue());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void mousePressed(MouseEvent e)
|
|
|
{
|
|
|
- if(e.getSource()==seekBar)
|
|
|
- {
|
|
|
- jukeboxBackend.pause();
|
|
|
- }
|
|
|
}
|
|
|
@Override
|
|
|
public void mouseReleased(MouseEvent e)
|
|
|
{
|
|
|
if(e.getSource()==seekBar)
|
|
|
{
|
|
|
- jukeboxBackend.seek(seekBar.getValue());
|
|
|
- if(playing)
|
|
|
- {
|
|
|
- jukeboxBackend.play();
|
|
|
- }
|
|
|
+ backend.seek(seekBar.getValue());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
- @Override
|
|
|
- public void setAlbumArt(Image i)
|
|
|
- {
|
|
|
- //not used for the JukeBox so far
|
|
|
- }
|
|
|
-
|
|
|
private String trackTime = "--:--";
|
|
|
- @Override
|
|
|
public void setTrackLength(int seconds)
|
|
|
{
|
|
|
int mins=seconds/60;
|
|
@@ -371,7 +336,6 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
EventQueue.invokeLater(()->seekBar.setMaximum(seconds));
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
public void setPlaybackPositionInSeconds(int seconds)
|
|
|
{
|
|
|
EventQueue.invokeLater(() ->
|
|
@@ -379,30 +343,24 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
int mins=seconds/60;
|
|
|
int textSeconds=seconds%60;
|
|
|
String textSeconds2=textSeconds>9?textSeconds+"":"0"+textSeconds;
|
|
|
- lblStatus.setText(mins+":"+textSeconds2+"/"+trackTime);
|
|
|
- seekBar.setValue(seconds);
|
|
|
+ if(lblStatus!=null)
|
|
|
+ {
|
|
|
+ lblStatus.setText(mins+":"+textSeconds2+"/"+trackTime);
|
|
|
+ seekBar.setValue(seconds);
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
public void setTrackName(String trackName)
|
|
|
{
|
|
|
EventQueue.invokeLater(()->lblTrackName.setText(trackName));
|
|
|
- EventQueue.invokeLater(()->rebuildTable(false));
|
|
|
+ // EventQueue.invokeLater(()->rebuildTable(false)); normal nötig, aber da die JukeBox die Spalte für die Playcounts nicht braucht genullroutet
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- @Override
|
|
|
- public void loadPlayListEditScreen()
|
|
|
- {
|
|
|
- /*NO-OP*/
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
private HidableTableColumnModel mdl = null;
|
|
|
|
|
|
|
|
|
- @Override
|
|
|
public void initializeUI()
|
|
|
{
|
|
|
boolean onARM = Detectors.getSystemClassification()[1].equals("arm");
|
|
@@ -430,7 +388,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
@Override
|
|
|
public void windowClosing(WindowEvent e)
|
|
|
{
|
|
|
- jukeboxBackend.quitWithSave();
|
|
|
+ //TODO
|
|
|
}
|
|
|
});
|
|
|
seekBar.addMouseListener(this);
|
|
@@ -456,30 +414,34 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
// selectedPlaybackPlugin.registerVideoSurface(videoPanel);
|
|
|
//TODO: HAX für RPi mit ProjectM-SDL/PulseAudio fullscreen.
|
|
|
// HW-Incompat, Requires different HW
|
|
|
- jukeboxBackend.reload();
|
|
|
+ //TODO jukeboxBackend.reload();
|
|
|
+ backend.sync();
|
|
|
rebuildTable(false);
|
|
|
+
|
|
|
+ }
|
|
|
+ public void refreshScheduledItemList()
|
|
|
+ {
|
|
|
+ EventQueue.invokeLater(()->{
|
|
|
+ DefaultListModel<String> model = (DefaultListModel<String>) lstScheduled.getModel();
|
|
|
+ model.clear();
|
|
|
+ List<String> items = backend.getScheduledTracks();
|
|
|
+ items.forEach((e)->{model.addElement(e);});
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- private boolean connected=false;
|
|
|
private boolean playing=false;
|
|
|
|
|
|
private void play()
|
|
|
{
|
|
|
- if(!connected)
|
|
|
- {
|
|
|
- jukeboxBackend.initBackend();
|
|
|
- connected=true;
|
|
|
- }
|
|
|
if(playing)
|
|
|
{
|
|
|
- jukeboxBackend.pause();
|
|
|
+ backend.pause();
|
|
|
btnPlayPause.setText("Play");
|
|
|
playing=false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- jukeboxBackend.play();
|
|
|
+ backend.play();
|
|
|
btnPlayPause.setText("Pause");
|
|
|
playing=true;
|
|
|
}
|
|
@@ -495,53 +457,6 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
{
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void refreshScheduledItemList()
|
|
|
- {
|
|
|
- EventQueue.invokeLater(()->{
|
|
|
- DefaultListModel<String> model = (DefaultListModel<String>) lstScheduled.getModel();
|
|
|
- model.clear();
|
|
|
- List<String> items = jukeboxBackend.getScheduledTracks();
|
|
|
- items.forEach((e)->{model.addElement(e);});
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void reloadPlayList()
|
|
|
- {
|
|
|
- EventQueue.invokeLater(()->this.rebuildTable(false));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void parseParameter(String param)
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean hasUserInterface()
|
|
|
- {
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void openUserInterface()
|
|
|
- {
|
|
|
- initializeUI();
|
|
|
- EventQueue.invokeLater(()->this.setVisible(true));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean requiresLoadedPlayList()
|
|
|
- {
|
|
|
- return false; //not needed since it connects via Network to the Real jukebox
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //compat stub for the backend
|
|
|
@Override
|
|
|
public void updateTrackLength(int length)
|
|
|
{
|
|
@@ -563,7 +478,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
@Override
|
|
|
public void triggerTableRefresh()
|
|
|
{
|
|
|
- EventQueue.invokeLater(()->rebuildTable(false));
|
|
|
+ rebuildTable(false);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -575,9 +490,7 @@ public class JukeBox extends javax.swing.JFrame implements UIPlugin,MouseListene
|
|
|
@Override
|
|
|
public void setPlayStatus(boolean playing)
|
|
|
{
|
|
|
- this.playing = playing;
|
|
|
- btnPlayPause.setText(playing?"Pause":"play");
|
|
|
+ this.playing=playing;
|
|
|
+ btnPlayPause.setText(playing?"Pause":"Play");
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|