From f57dea7f1f396fe8552687a7c37e4a10d9163d7d Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 17 May 2015 16:07:27 -0700 Subject: [PATCH] New: Store last 5 used folders from manual import --- .../Manual/ManualImportService.cs | 6 +-- src/UI/Config.js | 17 +++++++ .../ManualImport/Folder/SelectFolderView.js | 45 ++++++++++++++++--- .../Folder/SelectFolderViewTemplate.hbs | 22 +++++++++ src/UI/ManualImport/manualimport.less | 12 +++++ src/UI/Mixins/FileBrowser.js | 2 +- 6 files changed, 95 insertions(+), 9 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs index 7c363dba4..86e0fdf0f 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Manual/ManualImportService.cs @@ -184,14 +184,14 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual public void Execute(ManualImportCommand message) { - _logger.ProgressInfo("Manually importing {0} files", message.Files.Count); + _logger.ProgressTrace("Manually importing {0} files", message.Files.Count); var imported = new List(); var importedTrackedDownload = new List(); for (int i = 0; i < message.Files.Count; i++) { - _logger.ProgressInfo("Processing file {0} of {1}", i + 1, message.Files.Count); + _logger.ProgressTrace("Processing file {0} of {1}", i + 1, message.Files.Count); var file = message.Files[i]; var series = _seriesService.GetSeries(file.SeriesId); @@ -237,7 +237,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Manual } } - _logger.ProgressInfo("Manually imported {0}", imported.Count); + _logger.ProgressTrace("Manually imported {0} files", imported.Count); foreach (var groupedTrackedDownload in importedTrackedDownload.GroupBy(i => i.TrackedDownload.DownloadItem.DownloadId).ToList()) { diff --git a/src/UI/Config.js b/src/UI/Config.js index 6ea02dbe8..2115d076a 100644 --- a/src/UI/Config.js +++ b/src/UI/Config.js @@ -1,3 +1,4 @@ +var $ = require('jquery'); var vent = require('./vent'); module.exports = { @@ -14,6 +15,18 @@ module.exports = { AdvancedSettings : 'advancedSettings' }, + getValueJson : function (key, defaultValue) { + defaultValue = defaultValue || {}; + + var storeValue = window.localStorage.getItem(key); + + if (!storeValue) { + return defaultValue; + } + + return $.parseJSON(storeValue); + }, + getValueBoolean : function(key, defaultValue) { defaultValue = defaultValue || false; @@ -30,6 +43,10 @@ module.exports = { return storeValue.toString(); }, + setValueJson : function(key, value) { + return this.setValue(key, JSON.stringify(value)); + }, + setValue : function(key, value) { console.log('Config: [{0}] => [{1}]'.format(key, value)); diff --git a/src/UI/ManualImport/Folder/SelectFolderView.js b/src/UI/ManualImport/Folder/SelectFolderView.js index 97691a7e8..0a2c066c2 100644 --- a/src/UI/ManualImport/Folder/SelectFolderView.js +++ b/src/UI/ManualImport/Folder/SelectFolderView.js @@ -1,4 +1,8 @@ +var _ = require('underscore'); +var $ = require('jquery'); +var Config = require('../../Config'); var Marionette = require('marionette'); +var moment = require('moment'); require('../../Mixins/FileBrowser'); module.exports = Marionette.ItemView.extend({ @@ -13,7 +17,14 @@ module.exports = Marionette.ItemView.extend({ 'click .x-manual-import' : '_manualImport', 'click .x-automatic-import' : '_automaticImport', 'change .x-path' : '_updateButtons', - 'keyup .x-path' : '_updateButtons' + 'keyup .x-path' : '_updateButtons', + 'click .x-recent-folder' : '_selectRecentFolder' + }, + + initialize : function () { + this.templateHelpers = { + recentFolders: Config.getValueJson('manualimport.recentfolders', []) + }; }, onRender : function() { @@ -26,14 +37,20 @@ module.exports = Marionette.ItemView.extend({ }, _manualImport : function () { - if (this.ui.path.val()) { - this.trigger('manualImport', { folder: this.ui.path.val() }); + var path = this.ui.path.val(); + + if (path) { + this._setRecentFolders(path); + this.trigger('manualImport', { folder: path }); } }, _automaticImport : function () { - if (this.ui.path.val()) { - this.trigger('automaticImport', { folder: this.ui.path.val() }); + var path = this.ui.path.val(); + + if (path) { + this._setRecentFolders(path); + this.trigger('automaticImport', { folder: path }); } }, @@ -45,5 +62,23 @@ module.exports = Marionette.ItemView.extend({ else { this.ui.buttons.attr('disabled', 'disabled'); } + }, + + _selectRecentFolder : function (e) { + var path = $(e.target).closest('tr').data('path'); + this.ui.path.val(path); + this.ui.path.trigger('change'); + }, + + _setRecentFolders : function (path) { + var recentFolders = Config.getValueJson('manualimport.recentfolders', []); + + recentFolders = _.filter(recentFolders, function (folder) { + return folder.path.toLowerCase() !== path.toLowerCase(); + }); + + recentFolders.unshift({ path: path, lastUsed: moment.utc().toISOString() }); + + Config.setValueJson('manualimport.recentfolders', _.take(recentFolders, 5)); } }); diff --git a/src/UI/ManualImport/Folder/SelectFolderViewTemplate.hbs b/src/UI/ManualImport/Folder/SelectFolderViewTemplate.hbs index 8e44e5042..0e0dc18f2 100644 --- a/src/UI/ManualImport/Folder/SelectFolderViewTemplate.hbs +++ b/src/UI/ManualImport/Folder/SelectFolderViewTemplate.hbs @@ -6,6 +6,28 @@ +
+ {{#if recentFolders}} +

Recent Folders

+ + + + + + + + + + {{#each recentFolders}} + + + + + {{/each}} + +
PathLast Used
{{path}}{{RelativeDate lastUsed}}
+ {{/if}} +
diff --git a/src/UI/ManualImport/manualimport.less b/src/UI/ManualImport/manualimport.less index efbc4c933..c1d7af5a2 100644 --- a/src/UI/ManualImport/manualimport.less +++ b/src/UI/ManualImport/manualimport.less @@ -43,9 +43,21 @@ margin-top: 10px; } } + + .recent-folders { + margin-top: 20px; + } + + .recent-folder { + .clickable(); + } } .manual-import-error { background-color : #fdefef; } + + .recent-folder { + .clickable(); + } } diff --git a/src/UI/Mixins/FileBrowser.js b/src/UI/Mixins/FileBrowser.js index 109964cb2..d194038f9 100644 --- a/src/UI/Mixins/FileBrowser.js +++ b/src/UI/Mixins/FileBrowser.js @@ -10,7 +10,7 @@ $.fn.fileBrowser = function(options) { var input = $(this); var inputOptions = $.extend({ input : input }, options); var inputGroup = $('
'); - var inputGroupButton = $(''); + var inputGroupButton = $(''); var button = $('');