diff --git a/src/main/java/com/rarchives/ripme/App.java b/src/main/java/com/rarchives/ripme/App.java index 766ea235..e37ba27e 100644 --- a/src/main/java/com/rarchives/ripme/App.java +++ b/src/main/java/com/rarchives/ripme/App.java @@ -1,11 +1,15 @@ package com.rarchives.ripme; +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.List; import javax.swing.SwingUtilities; +import javax.swing.DefaultListModel; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; @@ -16,8 +20,11 @@ import org.apache.log4j.Logger; import com.rarchives.ripme.ripper.AbstractRipper; import com.rarchives.ripme.ui.MainWindow; +import com.rarchives.ripme.ui.History; +import com.rarchives.ripme.ui.HistoryEntry; import com.rarchives.ripme.ui.UpdateUtils; import com.rarchives.ripme.utils.Utils; +import com.rarchives.ripme.utils.RipUtils; /** * @@ -25,6 +32,8 @@ import com.rarchives.ripme.utils.Utils; public class App { public static Logger logger; + private static final History HISTORY = new History(); + private static DefaultListModel queueListModel; public static void main(String[] args) throws MalformedURLException { Utils.configureLogger(); @@ -84,6 +93,38 @@ public class App { // Exit System.exit(0); } + if (cl.hasOption('R')) { + loadHistory(); + + if (HISTORY.toList().size() == 0) { + System.err.println("There are no history entries to re-rip. Rip some albums first"); + System.exit(-1); + } + int added = 0; + for (HistoryEntry entry : HISTORY.toList()) { + if (entry.selected) { + added++; + try { + URL url = new URL(entry.url); + rip(url); + } catch (Exception e) { + logger.error("[!] Failed to rip URL " + entry.url, e); + continue; + } + try { + Thread.sleep(500); + } catch (InterruptedException e) { + logger.warn("[!] Interrupted while re-ripping history"); + System.exit(-1); + } + } + } + if (added == 0) { + System.err.println("No history entries have been 'Checked'\n" + + "Check an entry by clicking the checkbox to the right of the URL or Right-click a URL to check/uncheck all items"); + System.exit(-1); + } + } if (cl.hasOption('d')) { Utils.setConfigBoolean("download.save_order", true); } @@ -117,11 +158,6 @@ public class App { System.exit(-1); } } - if (!cl.hasOption('u')) { - System.err.println("\nRequired URL ('-u' or '--url') not provided"); - System.err.println("\n\tExample: java -jar ripme.jar -u http://imgur.com/a/abcde"); - System.exit(-1); - } } public static Options getOptions() { @@ -131,6 +167,7 @@ public class App { opts.addOption("t", "threads", true, "Number of download threads per rip"); opts.addOption("w", "overwrite", false, "Overwrite existing files"); opts.addOption("r", "rerip", false, "Re-rip all ripped albums"); + opts.addOption("R", "rerip-selected", false, "Re-rip all selected albums"); opts.addOption("d", "saveorder", false, "Save the order of images in album"); opts.addOption("D", "nosaveorder", false, "Don't save order of images"); opts.addOption("4", "skip404", false, "Don't retry after a 404 (not found) error"); @@ -149,4 +186,44 @@ public class App { return null; } } + + private static void loadHistory() { + File historyFile = new File("history.json"); + HISTORY.clear(); + if (historyFile.exists()) { + try { + logger.info("Loading history from history.json"); + HISTORY.fromFile("history.json"); + } catch (IOException e) { + logger.error("Failed to load history from file " + historyFile, e); + System.out.println( + "RipMe failed to load the history file at " + historyFile.getAbsolutePath() + "\n\n" + + "Error: " + e.getMessage() + "\n\n" + + "Closing RipMe will automatically overwrite the contents of this file,\n" + + "so you may want to back the file up before closing RipMe!"); + } + } else { + logger.info("Loading history from configuration"); + HISTORY.fromList(Utils.getConfigList("download.history")); + if (HISTORY.toList().size() == 0) { + // Loaded from config, still no entries. + // Guess rip history based on rip folder + String[] dirs = Utils.getWorkingDirectory().list(new FilenameFilter() { + @Override + public boolean accept(File dir, String file) { + return new File(dir.getAbsolutePath() + File.separator + file).isDirectory(); + } + }); + for (String dir : dirs) { + String url = RipUtils.urlFromDirectoryName(dir); + if (url != null) { + // We found one, add it to history + HistoryEntry entry = new HistoryEntry(); + entry.url = url; + HISTORY.add(entry); + } + } + } + } + } } diff --git a/src/main/java/com/rarchives/ripme/ui/HistoryEntry.java b/src/main/java/com/rarchives/ripme/ui/HistoryEntry.java index f2b653eb..72d01ff9 100644 --- a/src/main/java/com/rarchives/ripme/ui/HistoryEntry.java +++ b/src/main/java/com/rarchives/ripme/ui/HistoryEntry.java @@ -6,13 +6,13 @@ import org.json.JSONObject; public class HistoryEntry { - public String url = "", - title = "", - dir = ""; - public int count = 0; - public Date startDate = new Date(), - modifiedDate = new Date(); - boolean selected = false; + public String url = "", + title = "", + dir = ""; + public int count = 0; + public Date startDate = new Date(), + modifiedDate = new Date(); + public boolean selected = false; public HistoryEntry() { }