/** * Initialize the program * * @param map Flag to reset configuration */ private void initialize(final Map<String, Object> map) { // Check for a configuration option if (map.containsKey("dir")) { final File file = new File(map.get("dir").toString()); if (!file.exists()) { file.mkdirs(); } Util.setWorkingDirectory(file); } // Verify the directory final File local = Util.getWorkingDirectory(); if (!local.exists()) { local.mkdirs(); } // Load the Release info final URL releaseUrl = Util.getResourceByName("/org/sleeksnap/release.json"); JSONObject releaseInfo = new JSONObject(); if (releaseUrl != null) { try { releaseInfo = new JSONObject(new JSONTokener(releaseUrl.openStream())); } catch (final IOException e) { e.printStackTrace(); } } // Set the UI skin try { UIManager.setLookAndFeel( releaseInfo.getString("uiClass", UIManager.getSystemLookAndFeelClassName())); } catch (final Exception e) { e.printStackTrace(); } // Then start try { LoggingManager.configure(); } catch (final IOException e) { logger.log( Level.WARNING, "Unable to configure logger, file logging and logging panel will not work.", e); JOptionPane.showMessageDialog( null, "Unable to configure logger, file logging and logging panel will not work.", "Error", JOptionPane.ERROR_MESSAGE); } logger.info("Loading plugins..."); try { loadUploaders(); loadFilters(); } catch (final Exception e) { logger.log(Level.SEVERE, "Failed to load plugins!", e); } // Load the settings logger.info("Loading settings..."); try { loadSettings(map.containsKey("resetconfig")); } catch (final Exception e) { logger.log(Level.SEVERE, "Failed to load settings!", e); } // Load the selected language try { Language.load( map.containsKey("language") ? map.get("language").toString() : configuration.getString("language", Constants.Configuration.DEFAULT_LANGUAGE)); } catch (final IOException e) { logger.log(Level.SEVERE, "Failed to load language file!", e); } // Check the update mode final UpdaterMode mode = configuration.getEnumValue("updateMode", UpdaterMode.class); if (mode != UpdaterMode.MANUAL) { final UpdaterReleaseType type = configuration.getEnumValue("updateReleaseType", UpdaterReleaseType.class); final Updater updater = new Updater(); if (updater.checkUpdate(type, mode == UpdaterMode.PROMPT)) { return; } } // Load the history logger.info("Loading history..."); final File historyFile = new File(local, "history.json"); history = new History(historyFile); if (historyFile.exists()) { logger.info("Using existing history file."); try { history.load(); } catch (final Exception e) { logger.log(Level.WARNING, "Failed to load history", e); } } else { logger.info("Using new history file."); } // Validate settings if (!configuration.contains("hotkeys") || !configuration.contains("uploaders")) { promptConfigurationReset(); } // Register the hotkeys logger.info("Registering keys..."); keyManager = new HotkeyManager(this); keyManager.initializeInput(); logger.info("Opening tray icon..."); initializeTray(); logger.info("Ready."); }
/** * Execute an upload * * @param object The object to upload */ @SuppressWarnings({"rawtypes", "unchecked"}) public void executeUpload(Upload object) { // Run the object through the filters if (filters.containsKey(object.getClass())) { for (final UploadFilter filter : filters.get(object.getClass())) { try { object = filter.filter(object); } catch (final FilterException e) { // FilterExceptions when thrown should interrupt the upload. showException(e, e.getErrorMessage()); return; } } } // Then upload it final Uploader uploader = uploaderAssociations.get(object.getClass()); if (uploader != null) { try { String url = uploader.upload(object); if (url != null) { if (configuration.getBoolean("shortenurls")) { final Uploader shortener = uploaderAssociations.get(URL.class); if (shortener != null) { url = shortener.upload(new URLUpload(url)); } } if (object instanceof ImageUpload) { if (configuration.getBoolean("savelocal") && !(uploader instanceof ImageLocalFileUploader)) { final FileOutputStream output = new FileOutputStream(getLocalFile(DateUtil.getCurrentDate() + ".png")); try { ImageIO.write(((ImageUpload) object).getImage(), "png", output); } finally { output.close(); } } ((ImageUpload) object).getImage().flush(); ((ImageUpload) object).setImage(null); } url = url.trim(); retries = 0; ClipboardUtil.setClipboard(url); lastUrl = url; history.addEntry(new HistoryEntry(url, uploader.getName())); icon.displayMessage( Language.getString("uploadComplete"), Language.getString("uploadedTo", url), TrayIcon.MessageType.INFO); logger.info("Upload completed, url: " + url); } else { icon.displayMessage( Language.getString("uploadFailed"), Language.getString("uploadFailedError"), TrayIcon.MessageType.ERROR); logger.severe("Upload failed to execute due to an unknown error"); } } catch (final UploaderConfigurationException e) { icon.displayMessage( Language.getString("uploaderConfigError"), Language.getString("uploaderConfigErrorMessage"), TrayIcon.MessageType.ERROR); logger.log(Level.SEVERE, "Upload failed to execute", e); } catch (final Exception e) { // Retry until retries > max final StringBuilder msg = new StringBuilder("The upload failed to execute: "); msg.append(e.getMessage()); final int max = configuration.getInteger("max_retries", Constants.Configuration.DEFAULT_MAX_RETRIES); if (retries++ < max) { logger.info("Retrying upload (" + retries + " of " + max + " retries)..."); msg.append("\nRetrying..."); upload(object); } else { msg.append("\nReached retry limit, upload aborted."); logger.log(Level.SEVERE, "Upload failed to execute, retries: " + retries, e); retries = 0; } icon.displayMessage( Language.getString("uploadFailed"), msg.toString(), TrayIcon.MessageType.ERROR); } } }