diff --git a/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java b/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java index 626ef454..031523e9 100644 --- a/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/AbstractRipper.java @@ -288,8 +288,6 @@ public abstract class AbstractRipper AbstractRipper ripper = (AbstractRipper) constructor.newInstance(url); return ripper; } catch (Exception e) { - System.err.println(constructor.getName()); - e.printStackTrace(); // Incompatible rippers *will* throw exceptions during instantiation. } } diff --git a/src/main/java/com/rarchives/ripme/ui/MainWindow.java b/src/main/java/com/rarchives/ripme/ui/MainWindow.java index 841fd53d..3b4cda6a 100644 --- a/src/main/java/com/rarchives/ripme/ui/MainWindow.java +++ b/src/main/java/com/rarchives/ripme/ui/MainWindow.java @@ -8,14 +8,10 @@ import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.io.BufferedReader; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.util.Arrays; import javax.swing.DefaultListModel; import javax.swing.JButton; @@ -49,9 +45,6 @@ public class MainWindow implements Runnable, RipStatusHandler { private static final Logger logger = Logger.getLogger(MainWindow.class); - private static final String WINDOW_TITLE = "RipMe"; - private static final String HISTORY_FILE = ".history"; - private static JFrame mainFrame; private static JTextField ripTextfield; private static JButton ripButton; @@ -92,7 +85,7 @@ public class MainWindow implements Runnable, RipStatusHandler { // TODO Configuration components public MainWindow() { - mainFrame = new JFrame(WINDOW_TITLE + " v" + UpdateUtils.getThisJarVersion()); + mainFrame = new JFrame("RipMe v" + UpdateUtils.getThisJarVersion()); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //mainFrame.setPreferredSize(new Dimension(400, 180)); //mainFrame.setResizable(false); @@ -386,48 +379,13 @@ public class MainWindow implements Runnable, RipStatusHandler { } private void loadHistory() { - File f; FileReader fr = null; BufferedReader br; - try { - f = new File(HISTORY_FILE); - fr = new FileReader(f); - br = new BufferedReader(fr); - String line; - while ( (line = br.readLine()) != null ) { - if (!line.trim().equals("")) { - historyListModel.addElement(line.trim()); - } - } - } catch (FileNotFoundException e) { - // Do nothing - } catch (IOException e) { - logger.error("[!] Error while loading history file " + HISTORY_FILE, e); - } finally { - try { - if (fr != null) { - fr.close(); - } - } catch (IOException e) { } + for (String url : Utils.getConfigList("download.history")) { + historyListModel.addElement(url.trim()); } } private void saveHistory() { - FileWriter fw = null; - try { - fw = new FileWriter(HISTORY_FILE, false); - for (int i = 0; i < historyListModel.size(); i++) { - fw.write( (String) historyListModel.get(i) ); - fw.write("\n"); - fw.flush(); - } - } catch (IOException e) { - logger.error("[!] Error while saving history file " + HISTORY_FILE, e); - } finally { - try { - if (fw != null) { - fw.close(); - } - } catch (IOException e) { } - } + Utils.setConfigList("download.history", Arrays.asList(historyListModel.toArray())); } private Thread ripAlbum(String urlString) { diff --git a/src/main/java/com/rarchives/ripme/utils/Utils.java b/src/main/java/com/rarchives/ripme/utils/Utils.java index 0f66588e..d8948ef2 100644 --- a/src/main/java/com/rarchives/ripme/utils/Utils.java +++ b/src/main/java/com/rarchives/ripme/utils/Utils.java @@ -6,11 +6,13 @@ import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; +import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; import org.apache.log4j.Logger; /** @@ -32,6 +34,8 @@ public class Utils { configPath = configFile; } config = new PropertiesConfiguration(configPath); + config.setAutoSave(true); + config.setReloadingStrategy(new FileChangedReloadingStrategy()); logger.info("Loaded " + config.getPath()); } catch (Exception e) { logger.error("[!] Failed to load properties file from " + configFile, e); @@ -70,9 +74,23 @@ public class Utils { public static boolean getConfigBoolean(String key, boolean defaultValue) { return config.getBoolean(key, defaultValue); } - public static void setConfigBoolean(String key, boolean value) { config.setProperty(key, value); } - public static void setConfigString(String key, String value) { config.setProperty(key, value); } - public static void setConfigInteger(String key, int value) { config.setProperty(key, value); } + public static List getConfigList(String key) { + List result = new ArrayList(); + for (Object obj : config.getList(key, new ArrayList())) { + if (obj instanceof String) { + result.add( (String) obj); + } + } + return result; + } + public static void setConfigBoolean(String key, boolean value) { config.setProperty(key, value); } + public static void setConfigString(String key, String value) { config.setProperty(key, value); } + public static void setConfigInteger(String key, int value) { config.setProperty(key, value); } + public static void setConfigList(String key, List list) { + config.clearProperty(key); + config.addProperty(key, list); + } + public static void saveConfig() { try { config.save(config.getPath()); diff --git a/src/main/resources/rip.properties b/src/main/resources/rip.properties index cb3240f8..dc30ebdc 100644 --- a/src/main/resources/rip.properties +++ b/src/main/resources/rip.properties @@ -14,6 +14,7 @@ download.timeout = 60000 # Maximum size of downloaded files in bytes (required) download.max_size = 104857600 +download.history = # API creds twitter.auth = VW9Ybjdjb1pkd2J0U3kwTUh2VXVnOm9GTzVQVzNqM29LQU1xVGhnS3pFZzhKbGVqbXU0c2lHQ3JrUFNNZm8= tumblr.auth = v5kUqGQXUtmF7K0itri1DGtgTs0VQpbSEbh1jxYgj9d2Sq18F8