diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 00000000..93719005 --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,21 @@ +name: Java CI + +on: [push, pull_request] + +jobs: + build: + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + java: [1.8, 1.9] + + steps: + - uses: actions/checkout@v1 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.java }} + - name: Build with Maven + run: mvn package --file pom.xml diff --git a/src/main/java/com/rarchives/ripme/ui/MainWindow.java b/src/main/java/com/rarchives/ripme/ui/MainWindow.java index 7151f6b1..13227d97 100644 --- a/src/main/java/com/rarchives/ripme/ui/MainWindow.java +++ b/src/main/java/com/rarchives/ripme/ui/MainWindow.java @@ -143,10 +143,13 @@ public final class MainWindow implements Runnable, RipStatusHandler { if (model == null) model = queueListModel; - Utils.setConfigList("Queue", (Enumeration) model.elements()); + if (model.size() > 0) { + Utils.setConfigList("queue", (Enumeration) model.elements()); + Utils.saveConfig(); - MainWindow.optionQueue.setText(String.format("%s%s", Utils.getLocalizedString("queue"), - model.size() == 0 ? "" : "(" + model.size() + ")")); + MainWindow.optionQueue.setText(String.format("%s%s", Utils.getLocalizedString("queue"), + model.size() == 0 ? "" : "(" + model.size() + ")")); + } } private void updateQueue() { @@ -259,6 +262,7 @@ public final class MainWindow implements Runnable, RipStatusHandler { private boolean isCollapsed() { return (!logPanel.isVisible() && !historyPanel.isVisible() && !queuePanel.isVisible() + && !configurationPanel.isVisible()); } @@ -479,8 +483,10 @@ public final class MainWindow implements Runnable, RipStatusHandler { queueListModel = new DefaultListModel(); JList queueList = new JList(queueListModel); queueList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - queueList.addMouseListener(queueMenuMouseListener = new QueueMenuMouseListener()); + queueList.addMouseListener( + queueMenuMouseListener = new QueueMenuMouseListener(d -> updateQueue(queueListModel))); JScrollPane queueListScroll = new JScrollPane(queueList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); for (String item : Utils.getConfigList("queue")) { queueListModel.addElement(item); @@ -856,6 +862,7 @@ public final class MainWindow implements Runnable, RipStatusHandler { } if (added == 0) { JOptionPane.showMessageDialog(null, Utils.getLocalizedString("history.load.none.checked"), + "RipMe Error", JOptionPane.ERROR_MESSAGE); } }); @@ -1026,6 +1033,7 @@ public final class MainWindow implements Runnable, RipStatusHandler { MenuItem trayMenuAbout = new MenuItem("About " + mainFrame.getTitle()); trayMenuAbout.addActionListener(arg0 -> { StringBuilder about = new StringBuilder(); + about.append("

").append(mainFrame.getTitle()).append("

"); about.append("Download albums from various websites:"); try { @@ -1164,6 +1172,7 @@ public final class MainWindow implements Runnable, RipStatusHandler { LOGGER.error("Failed to load history from file " + historyFile, e); JOptionPane.showMessageDialog(null, String.format(Utils.getLocalizedString("history.load.failed.warning"), e.getMessage()), + "RipMe - history load failure", JOptionPane.ERROR_MESSAGE); } } else { @@ -1202,7 +1211,6 @@ public final class MainWindow implements Runnable, RipStatusHandler { } } - @SuppressWarnings("unchecked") private void ripNextAlbum() { isRipping = true; // Save current state of queue to configuration. @@ -1445,6 +1453,8 @@ public final class MainWindow implements Runnable, RipStatusHandler { } /* * content key %path% the path to the album folder %url% is the album url + * + * */ if (Utils.getConfigBoolean("enable.finish.command", false)) { try { diff --git a/src/main/java/com/rarchives/ripme/ui/QueueMenuMouseListener.java b/src/main/java/com/rarchives/ripme/ui/QueueMenuMouseListener.java index 74e064f8..19911ee2 100644 --- a/src/main/java/com/rarchives/ripme/ui/QueueMenuMouseListener.java +++ b/src/main/java/com/rarchives/ripme/ui/QueueMenuMouseListener.java @@ -4,25 +4,33 @@ import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.util.Enumeration; +import java.util.function.Consumer; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.DefaultListModel; import javax.swing.JList; +import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import com.rarchives.ripme.utils.Utils; class QueueMenuMouseListener extends MouseAdapter { private JPopupMenu popup = new JPopupMenu(); - private JList queueList; - private DefaultListModel queueListModel; + private JList queueList; + private DefaultListModel queueListModel; + private Consumer> updateQueue; - @SuppressWarnings("serial") - public QueueMenuMouseListener() { + public QueueMenuMouseListener(Consumer> updateQueue) { + this.updateQueue = updateQueue; + updateUI(); + } - Action removeSelected = new AbstractAction("Remove Selected") { + @SuppressWarnings("serial") + public void updateUI() { + popup.removeAll(); + + Action removeSelected = new AbstractAction(Utils.getLocalizedString("queue.remove.selected")) { @Override public void actionPerformed(ActionEvent ae) { Object o = queueList.getSelectedValue(); @@ -35,27 +43,22 @@ class QueueMenuMouseListener extends MouseAdapter { }; popup.add(removeSelected); - Action clearQueue = new AbstractAction("Remove All") { + Action clearQueue = new AbstractAction(Utils.getLocalizedString("queue.remove.all")) { @Override public void actionPerformed(ActionEvent ae) { - queueListModel.removeAllElements(); - updateUI(); + if (JOptionPane.showConfirmDialog(null, Utils.getLocalizedString("queue.validation"), "RipMe", + JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { + queueListModel.removeAllElements(); + updateUI(); + } } }; popup.add(clearQueue); + updateQueue.accept(queueListModel); } - private void updateUI() { - Utils.setConfigList("queue", (Enumeration) queueListModel.elements()); - - if (queueListModel.size() == 0) { - MainWindow.optionQueue.setText("Queue"); - } - else { - MainWindow.optionQueue.setText("Queue (" + queueListModel.size() + ")"); - } - } + @SuppressWarnings("unchecked") @Override public void mouseClicked(MouseEvent e) { if (e.getModifiers() == InputEvent.BUTTON3_MASK) { @@ -63,8 +66,8 @@ class QueueMenuMouseListener extends MouseAdapter { return; } - queueList = (JList) e.getSource(); - queueListModel = (DefaultListModel) queueList.getModel(); + queueList = (JList) e.getSource(); + queueListModel = (DefaultListModel) queueList.getModel(); queueList.requestFocus(); int nx = e.getX();