From a250594acdead6649593cd822c525854f62b15a4 Mon Sep 17 00:00:00 2001 From: iamzim101 Date: Fri, 15 Jul 2016 00:49:43 +1200 Subject: [PATCH] Setting to save images into a folder named the current board (#211) --- .../floens/chan/core/saver/ImageSaveTask.java | 7 +++++++ .../floens/chan/core/saver/ImageSaver.java | 19 +++++++++++++------ .../chan/core/settings/ChanSettings.java | 4 ++++ .../AdvancedSettingsController.java | 2 ++ .../ui/controller/ImageViewerController.java | 1 + Clover/app/src/main/res/values/strings.xml | 1 + 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaveTask.java b/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaveTask.java index 5b001449..523541e7 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaveTask.java +++ b/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaveTask.java @@ -50,9 +50,16 @@ public class ImageSaveTask implements Runnable, FileCache.DownloadedCallback { private boolean makeBitmap; private Bitmap bitmap; private boolean showToast; + private String boardName; private boolean success = false; + public void setBoardName(String boardName) {this.boardName = boardName;} + + public String getBoardName() { + return boardName; + } + public ImageSaveTask(PostImage postImage) { this.postImage = postImage; } diff --git a/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaver.java b/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaver.java index 9ff394a2..99b69c16 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaver.java +++ b/Clover/app/src/main/java/org/floens/chan/core/saver/ImageSaver.java @@ -43,30 +43,33 @@ import static org.floens.chan.utils.AndroidUtils.getAppContext; import static org.floens.chan.utils.AndroidUtils.getString; public class ImageSaver implements ImageSaveTask.ImageSaveTaskCallback { + public static final int MAX_RENAME_TRIES = 500; private static final String TAG = "ImageSaver"; private static final int NOTIFICATION_ID = 3; private static final int MAX_NAME_LENGTH = 50; private static final Pattern REPEATED_UNDERSCORES_PATTERN = Pattern.compile("_+"); private static final Pattern SAFE_CHARACTERS_PATTERN = Pattern.compile("[^a-zA-Z0-9._]"); private static final ImageSaver instance = new ImageSaver(); - public static final int MAX_RENAME_TRIES = 500; - private NotificationManager notificationManager; private ExecutorService executor = Executors.newSingleThreadExecutor(); private int doneTasks = 0; private int totalTasks = 0; private Toast toast; + private String boardName; - public static ImageSaver getInstance() { - return instance; - } private ImageSaver() { EventBus.getDefault().register(this); notificationManager = (NotificationManager) getAppContext().getSystemService(Context.NOTIFICATION_SERVICE); } + public static ImageSaver getInstance() { + return instance; + } + public void startDownloadTask(Context context, final ImageSaveTask task) { + + boardName = task.getBoardName(); PostImage postImage = task.getPostImage(); String name = ChanSettings.saveOriginalFilename.get() ? postImage.originalName : postImage.filename; String fileName = filterName(name + "." + postImage.extension); @@ -123,7 +126,11 @@ public class ImageSaver implements ImageSaveTask.ImageSaveTaskCallback { } public File getSaveLocation() { - return new File(ChanSettings.saveLocation.get()); + if (ChanSettings.saveBoardFolder.get()) { + return new File(ChanSettings.saveLocation.get() + File.separator + boardName); + } else { + return new File(ChanSettings.saveLocation.get()); + } } @Override diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java index d41e53bc..e8f2af2c 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java @@ -131,6 +131,8 @@ public class ChanSettings { public static final BooleanSetting neverHideToolbar; public static final BooleanSetting controllerSwipeable; + public static final BooleanSetting saveBoardFolder; + public static final BooleanSetting watchEnabled; public static final BooleanSetting watchCountdown; public static final BooleanSetting watchBackground; @@ -227,6 +229,8 @@ public class ChanSettings { neverHideToolbar = new BooleanSetting(p, "preference_never_hide_toolbar", false); controllerSwipeable = new BooleanSetting(p, "preference_controller_swipeable", true); + saveBoardFolder = new BooleanSetting(p, "preference_save_subboard", true); + watchEnabled = new BooleanSetting(p, "preference_watch_enabled", false); watchEnabled.addCallback(new Setting.SettingCallback() { @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java index 5b62993b..c94e7e2f 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java @@ -105,6 +105,8 @@ public class AdvancedSettingsController extends SettingsController { settings.add(new BooleanSettingView(this, ChanSettings.postFilename, R.string.setting_post_filename, 0)); neverHideToolbar = settings.add(new BooleanSettingView(this, ChanSettings.neverHideToolbar, R.string.setting_never_hide_toolbar, 0)); + settings.add(new BooleanSettingView(this, ChanSettings.saveBoardFolder, R.string.setting_save_board_folder, 0)); + groups.add(settings); SettingsGroup proxy = new SettingsGroup(R.string.settings_group_proxy); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java index e08b8ed9..ed32cbf4 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java @@ -231,6 +231,7 @@ public class ImageViewerController extends Controller implements ImageViewerPres } else { ImageSaveTask task = new ImageSaveTask(postImage); task.setShare(share); + task.setBoardName(presenter.getLoadable().board); ImageSaver.getInstance().startDownloadTask(context, task); } } diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 8331d928..d108e51a 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -411,6 +411,7 @@ Re-enable this permission in the app settings if you permanently disabled it."Use the new captcha Enable to use the newer recaptcha. Save original filename + Save in board folder Share url to image Share the url to the image instead of the image itself Use HTTPS