diff --git a/JSON/json-20141113.jar b/JSON/json-20141113.jar deleted file mode 100644 index 015c308..0000000 Binary files a/JSON/json-20141113.jar and /dev/null differ diff --git a/src/com/ixab/ConfigHandling/StreamConfig.java b/src/com/ixab/ConfigHandling/StreamConfig.java new file mode 100644 index 0000000..a2c5379 --- /dev/null +++ b/src/com/ixab/ConfigHandling/StreamConfig.java @@ -0,0 +1,33 @@ +package com.ixab.ConfigHandling; + +import com.ixab.StreamHandling.StreamInfo; + +public class StreamConfig { + private String name; + + public StreamConfig(String name) { + this.name = name; + } + + public String toString() { + return name; + } + + public String getInfo() { + StreamInfo.initStreamData(name); + StringBuilder sb = new StringBuilder(); + sb.append(name); + sb.append(" - "); + String status = StreamInfo.getStatus(); + sb.append(status); + if (!status.equals("offline")) { + sb.append(" playing "); + sb.append(StreamInfo.getGame()); + sb.append(" with "); + sb.append(StreamInfo.getViewers()); + sb.append(" Viewers"); + } + + return sb.toString(); + } +} diff --git a/src/com/ixab/GUI/AddStreamDialog.form b/src/com/ixab/GUI/AddStreamDialog.form new file mode 100644 index 0000000..6bbaea1 --- /dev/null +++ b/src/com/ixab/GUI/AddStreamDialog.form @@ -0,0 +1,80 @@ + +
diff --git a/src/com/ixab/GUI/AddStreamDialog.java b/src/com/ixab/GUI/AddStreamDialog.java new file mode 100644 index 0000000..b648307 --- /dev/null +++ b/src/com/ixab/GUI/AddStreamDialog.java @@ -0,0 +1,69 @@ +package com.ixab.GUI; + +import com.ixab.ConfigHandling.ConfigFileIOHandler; +import com.ixab.ConfigHandling.ConfigFileInstanceHandler; + +import javax.swing.*; +import java.awt.event.*; + +public class AddStreamDialog extends JDialog { + private JPanel contentPane; + private JButton buttonOK; + private JButton buttonCancel; + private JTextField textField1; + + public AddStreamDialog() { + setContentPane(contentPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onOK(); + } + }); + + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }); + +// call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + +// call onCancel() on ESCAPE + contentPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + } + + private void onOK() { + ConfigFileInstanceHandler.getConfig().addStream(textField1.getText()); + ConfigFileIOHandler.save(ConfigFileInstanceHandler.getConfig()); + MainWindowGate.getMainWindow().lockStreamInfoGetter = true; + MainWindowGate.getMainWindow().initStreamsComboBox(); + MainWindowGate.getMainWindow().lockStreamInfoGetter = false; + textField1.setText(""); + dispose(); + } + + private void onCancel() { +// add your code here if necessary + dispose(); + } + + public static void create() { + AddStreamDialog dialog = new AddStreamDialog(); + dialog.setLocationByPlatform(true); + dialog.pack(); + dialog.setVisible(true); + } +} diff --git a/src/com/ixab/GUI/ErrorMessageGate.java b/src/com/ixab/GUI/ErrorMessageGate.java new file mode 100644 index 0000000..90c86e7 --- /dev/null +++ b/src/com/ixab/GUI/ErrorMessageGate.java @@ -0,0 +1,7 @@ +package com.ixab.GUI; + +public class ErrorMessageGate { + public static void setErrorText(String s) { + // TODO: na was wohl? + } +} diff --git a/src/com/ixab/GUI/Main.form b/src/com/ixab/GUI/Main.form deleted file mode 100644 index 528c4d2..0000000 --- a/src/com/ixab/GUI/Main.form +++ /dev/null @@ -1,12 +0,0 @@ - - diff --git a/src/com/ixab/GUI/Main.java b/src/com/ixab/GUI/Main.java deleted file mode 100644 index 4cde6e1..0000000 --- a/src/com/ixab/GUI/Main.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ixab.GUI; - -import javax.swing.*; - -public class Main { - - private JPanel panel; - public static void main(String[] args) { - JFrame frame = new JFrame("Main"); - frame.setContentPane(new Main().panel); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.pack(); - frame.setVisible(true); - } -} diff --git a/src/com/ixab/GUI/MainWindow.form b/src/com/ixab/GUI/MainWindow.form new file mode 100644 index 0000000..fec3f7e --- /dev/null +++ b/src/com/ixab/GUI/MainWindow.form @@ -0,0 +1,241 @@ + + diff --git a/src/com/ixab/GUI/StreamChooserMenu.java b/src/com/ixab/GUI/MainWindow.java similarity index 79% rename from src/com/ixab/GUI/StreamChooserMenu.java rename to src/com/ixab/GUI/MainWindow.java index ef8b13d..7353b8e 100644 --- a/src/com/ixab/GUI/StreamChooserMenu.java +++ b/src/com/ixab/GUI/MainWindow.java @@ -8,7 +8,7 @@ import com.ixab.StreamHandling.StreamOpener; import javax.swing.*; import java.awt.event.*; -public class StreamChooserMenu { +public class MainWindow { private JPanel panel; private JComboBox comboBoxStreams; private JComboBox comboBoxQuality; @@ -21,9 +21,18 @@ public class StreamChooserMenu { private JLabel labelStreamTitle; private JLabel labelStreamGame; private JButton neuLadenButton; - private boolean lockStreamInfoGetter = false; + private JPanel previewImagePanel; + private JButton einstellungenButton; - public StreamChooserMenu() { + protected JLabel getErrorLabel() { + return errorLabel; + } + + private JLabel errorLabel; + protected boolean lockStreamInfoGetter = false; + + public MainWindow() { + MainWindowGate.setMainWindow(this); this.initComboBoxes(); streamAbspielenButton.addActionListener(new ActionListener() { @Override @@ -56,42 +65,36 @@ public class StreamChooserMenu { } } }); - textField1.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { - super.keyPressed(e); - if (textField1.isFocusOwner() && e.getKeyCode() == 10) { - addNewStream(); - } - } - }); neuLadenButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateStreamDetails(); } }); + einstellungenButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + SettingsWindow sw = new SettingsWindow(); + sw.create(); + } + }); } private void updateStreamDetails() { - StreamInfo.getStreamInfo(comboBoxStreams.getSelectedItem().toString()); + StreamInfo.initStreamData(comboBoxStreams.getSelectedItem().toString()); labelStreamStatus.setText(StreamInfo.getStatus()); labelStreamGame.setText(StreamInfo.getGame()); labelStreamViewers.setText(StreamInfo.getViewers()); labelStreamTitle.setText(StreamInfo.getTitle()); } private void addNewStream() { - ConfigFileInstanceHandler.getConfig().addStream(textField1.getText()); - ConfigFileIOHandler.save(ConfigFileInstanceHandler.getConfig()); - lockStreamInfoGetter = true; - initStreamsComboBox(); - lockStreamInfoGetter = false; - textField1.setText(""); + AddStreamDialog as = new AddStreamDialog(); + as.create(); } private void initComboBoxes() { initQualityComboBox(); initStreamsComboBox(); } - private void initStreamsComboBox() { + protected void initStreamsComboBox() { comboBoxStreams.removeAllItems(); for (String streamName : ConfigFileInstanceHandler.getConfig().getStreams()) { @@ -103,11 +106,12 @@ public class StreamChooserMenu { comboBoxQuality.addItem("best"); comboBoxQuality.addItem("high"); comboBoxQuality.addItem("medium"); comboBoxQuality.addItem("low"); comboBoxQuality.addItem("mobile"); } public static void main(String[] args) { - JFrame frame = new JFrame("jLSLauncher v"+ com.ixab.Main.getVersion()); - frame.setContentPane(new StreamChooserMenu().panel); + JFrame frame = new JFrame("jLSLauncher "+ com.ixab.Main.getVersion()); + frame.setContentPane(new MainWindow().panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); + frame.setResizable(false); } } diff --git a/src/com/ixab/GUI/MainWindowGate.java b/src/com/ixab/GUI/MainWindowGate.java new file mode 100644 index 0000000..2cd87ed --- /dev/null +++ b/src/com/ixab/GUI/MainWindowGate.java @@ -0,0 +1,11 @@ +package com.ixab.GUI; + +public class MainWindowGate { + private static MainWindow mw; + public static void setMainWindow(MainWindow mainWindow) { + mw = mainWindow; + } + public static MainWindow getMainWindow() { + return mw; + } +} diff --git a/src/com/ixab/GUI/SettingsWindow.form b/src/com/ixab/GUI/SettingsWindow.form new file mode 100644 index 0000000..f01ea28 --- /dev/null +++ b/src/com/ixab/GUI/SettingsWindow.form @@ -0,0 +1,109 @@ + + diff --git a/src/com/ixab/GUI/SettingsWindow.java b/src/com/ixab/GUI/SettingsWindow.java new file mode 100644 index 0000000..f1d912b --- /dev/null +++ b/src/com/ixab/GUI/SettingsWindow.java @@ -0,0 +1,76 @@ +package com.ixab.GUI; + +import com.ixab.ConfigHandling.ConfigFileInstanceHandler; + +import javax.swing.*; +import java.awt.event.*; + +public class SettingsWindow extends JDialog { + private JPanel contentPane; + private JButton buttonOK; + private JButton buttonCancel; + private JCheckBox debugmodusCheckBox; + private JTextField textField1; + private JButton suchenButton; + + public SettingsWindow() { + textField1.setText(ConfigFileInstanceHandler.getConfig().getLSPath()); + setContentPane(contentPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onOK(); + } + }); + + buttonCancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }); + +// call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + +// call onCancel() on ESCAPE + contentPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + suchenButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser jfc = new JFileChooser(); + jfc.setDialogTitle("Livestreamer Programmdatei auswählen"); + jfc.showOpenDialog(contentPane); + if (jfc.getSelectedFile() != null) textField1.setText(jfc.getSelectedFile().getAbsolutePath()); + } + }); + } + + private void onOK() { +// add your code here + dispose(); + } + + private void onCancel() { +// add your code here if necessary + dispose(); + } + + public static void create() { + SettingsWindow dialog = new SettingsWindow(); + dialog.setTitle("Einstellungen"); + dialog.setLocationByPlatform(true); + dialog.pack(); + dialog.setVisible(true); + } +} diff --git a/src/com/ixab/GUI/StreamChooserMenu.form b/src/com/ixab/GUI/StreamChooserMenu.form deleted file mode 100644 index a8e106c..0000000 --- a/src/com/ixab/GUI/StreamChooserMenu.form +++ /dev/null @@ -1,163 +0,0 @@ - - diff --git a/src/com/ixab/Main.java b/src/com/ixab/Main.java index 18b1ce3..e678258 100644 --- a/src/com/ixab/Main.java +++ b/src/com/ixab/Main.java @@ -3,12 +3,12 @@ package com.ixab; import com.ixab.ConfigHandling.Config; import com.ixab.ConfigHandling.ConfigFileIOHandler; import com.ixab.ConfigHandling.ConfigFileInstanceHandler; -import com.ixab.GUI.StreamChooserMenu; +import com.ixab.GUI.MainWindow; import javax.swing.*; public class Main { - private final static double version = 0.2; + private final static String version = "0.3 Alpha"; private static Config c = null; public static void main(String[] args) { try { @@ -29,14 +29,14 @@ public class Main { // handle exception } - //ConfigLoadMenu.main(null); + //ConfigLoadMenu.create(null); c = ConfigFileIOHandler.load(); if (c == null) { initNewConfig(); c = ConfigFileIOHandler.load(); } ConfigFileInstanceHandler.setConfig(c); - StreamChooserMenu.main(null); + MainWindow.main(null); } public static void initNewConfig() { c = new Config(); @@ -50,7 +50,7 @@ public class Main { ConfigFileIOHandler.save(c); } - public static double getVersion() { + public static String getVersion() { return version; } } diff --git a/src/com/ixab/StreamHandling/StreamInfo.java b/src/com/ixab/StreamHandling/StreamInfo.java index 156295a..88568aa 100644 --- a/src/com/ixab/StreamHandling/StreamInfo.java +++ b/src/com/ixab/StreamHandling/StreamInfo.java @@ -42,7 +42,7 @@ public class StreamInfo { return "online"; } } - public static void getStreamInfo(String streamName) { + public static void initStreamData(String streamName) { if (streamName != null) { InputStream is = null; URL url = null; diff --git a/src/com/ixab/StreamHandling/StreamOpener.java b/src/com/ixab/StreamHandling/StreamOpener.java index aa7dd46..53dd625 100644 --- a/src/com/ixab/StreamHandling/StreamOpener.java +++ b/src/com/ixab/StreamHandling/StreamOpener.java @@ -1,32 +1,32 @@ package com.ixab.StreamHandling; import com.ixab.ConfigHandling.Config; +import com.ixab.GUI.MainWindow; import java.io.BufferedReader; import java.io.InputStreamReader; public class StreamOpener extends Thread { private Config c; - private int streamIndex; + private String streamName; private String quality; public StreamOpener(Config c, int streamIndex, String quality) { this.c = c; - this.streamIndex = streamIndex; + this.streamName = c.getStreamName(streamIndex); this.quality = quality; } public void run() { try { Runtime rt = Runtime.getRuntime(); - Process pr = rt.exec(c.getLSPath()+" twitch.tv/"+c.getStreamName(streamIndex)+" "+quality); + Process pr = rt.exec(this.c.getLSPath()+" twitch.tv/"+this.streamName+" "+this.quality); BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line=null; - // comment - while((line=input.readLine()) != null) { System.out.println(line); + // TODO: analyze livestreamer output and inform gui on errors } int exitVal = pr.waitFor();