diff --git a/.gitignore b/.gitignore index e7b3b83a..5c05d814 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ app/.classpath app/.project app/.settings/* app/target/* +.idea +app/xdman.iml \ No newline at end of file diff --git a/app/src/main/java/xdman/Config.java b/app/src/main/java/xdman/Config.java index 3ef66cec..9b6f96db 100644 --- a/app/src/main/java/xdman/Config.java +++ b/app/src/main/java/xdman/Config.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.ArrayDeque; import xdman.util.Logger; import xdman.util.StringUtils; @@ -54,6 +55,8 @@ public class Config { private boolean noTransparency; private boolean hideTray; private String lastFolder; + private final int maxRecentFoldersCount = 5; + private ArrayDeque recentFolders; private List listeners; private String queueIdFilter; private boolean showVideoListOnlyInBrowser; @@ -141,6 +144,7 @@ public void save() { if (lastFolder != null) { fw.write("lastFolder:" + this.lastFolder + newLine); } + writeRecentFoldersToFile(fw); fw.write("showVideoListOnlyInBrowser:" + this.showVideoListOnlyInBrowser + newLine); fw.write("zoomLevelIndex:" + this.zoomLevelIndex + newLine); @@ -277,6 +281,9 @@ public void load() { } else if (key.equals("zoomLevelIndex")) { this.zoomLevelIndex = Integer.parseInt(val); } + else if (key.equals("recentFolders")){ + readRecentFoldersFromFile(val); + } } } catch (Exception e) { Logger.log(e); @@ -356,6 +363,7 @@ private Config() { this.noTransparency = false; this.hideTray = true; this.listeners = new ArrayList<>(); + this.recentFolders = new ArrayDeque<>(); } @@ -368,6 +376,32 @@ public void createFolders() { getCategoryVideos(); } + private void writeRecentFoldersToFile(FileWriter fw) + { + if (recentFolders.isEmpty()) + return; + try + { + fw.write("recentFolders:"); + for (String recentFolder : recentFolders) + { + fw.write(recentFolder + ","); + } + fw.write("\n"); + } + catch (Exception e) + { + Logger.log(e); + } + + } + private void readRecentFoldersFromFile(String val) + { + String[] folders = val.split(","); + for (String folder: folders) + this.recentFolders.addLast(folder); + } + public static synchronized Config getInstance() { if (_config == null) { _config = new Config(); @@ -881,10 +915,23 @@ public String getLastFolder() { return lastFolder; } + public ArrayDeque getRecentFolders() + { + return recentFolders; + } + public void setLastFolder(String lastFolder) { this.lastFolder = lastFolder; + updateRecentFolders(lastFolder); } + private void updateRecentFolders(String lastFolder) + { + if (recentFolders.size() == maxRecentFoldersCount) + recentFolders.removeLast(); + + recentFolders.addFirst(lastFolder); + } public String getQueueIdFilter() { return queueIdFilter; } diff --git a/app/src/main/java/xdman/ui/components/XDMFileSelectionPanel.java b/app/src/main/java/xdman/ui/components/XDMFileSelectionPanel.java index 790f7e7b..c24baefc 100644 --- a/app/src/main/java/xdman/ui/components/XDMFileSelectionPanel.java +++ b/app/src/main/java/xdman/ui/components/XDMFileSelectionPanel.java @@ -92,9 +92,10 @@ private void initUI() { add(hbox, BorderLayout.EAST); pop = new JPopupMenu(); - if (!StringUtils.isNullOrEmptyOrBlank(Config.getInstance().getLastFolder())) { - pop.add(createMenuItem(Config.getInstance().getLastFolder())); - } + for (String recentFolder : Config.getInstance().getRecentFolders()) + { + pop.add(createMenuItem(recentFolder)); + } pop.add(createMenuItem(Config.getInstance().getDownloadFolder())); if (!Config.getInstance().isForceSingleFolder()) { pop.add(createMenuItem(Config.getInstance().getCategoryDocuments()));