diff options
author | Ivan Efimov <gendalf44@yandex.ru> | 2022-09-20 09:23:03 +0300 |
---|---|---|
committer | Ivan Efimov <gendalf44@yandex.ru> | 2022-09-22 12:56:16 +0300 |
commit | 6266f292dab64271d09762438c8729d4707dba2d (patch) | |
tree | f83587a347a79c95bb6b032447fea1be5e31cc71 | |
parent | e0692c135004f80e618a64cce94c9cf9ba400189 (diff) |
Presets: favorite presets
-rw-r--r-- | src/tabs/presets/FavoritePresets.js | 99 | ||||
-rw-r--r-- | src/tabs/presets/presets.js | 26 |
2 files changed, 124 insertions, 1 deletions
diff --git a/src/tabs/presets/FavoritePresets.js b/src/tabs/presets/FavoritePresets.js new file mode 100644 index 00000000..f5799ba5 --- /dev/null +++ b/src/tabs/presets/FavoritePresets.js @@ -0,0 +1,99 @@ + +const s_maxFavoritePresetsCount = 50; +const s_favoritePresetsListConfigStorageName = "FavoritePresetsList"; + +class FavoritePreset { + constructor(presetPath){ + this.presetPath = presetPath; + this.lastPickDate = Date.now(); + } +} + + +class FavoritePresetsData { + constructor() { + this._favoritePresetsList = []; + } + + _sort() { + this._favoritePresetsList.sort((a, b) => (a.lastPickDate - b.lastPickDate)); + } + + _purgeOldPresets() { + this._favoritePresetsList.splice(s_maxFavoritePresetsCount + 1, this._favoritePresetsList.length); + } + + loadFromStorage() { + this._favoritePresetsList = []; + const obj = ConfigStorage.get(s_favoritePresetsListConfigStorageName); + + if (obj[s_favoritePresetsListConfigStorageName]) { + this._favoritePresetsList = obj[s_favoritePresetsListConfigStorageName]; + } + } + + saveToStorage() { + const obj = {}; + obj[s_favoritePresetsListConfigStorageName] = this._favoritePresetsList; + ConfigStorage.set(obj); + } + + add(presetPath) { + let preset = this.findPreset(presetPath); + + if (!preset) { + preset = new FavoritePreset(presetPath); + this._favoritePresetsList.push(preset); + } + + preset.lastPickDate = Date.now(); + this._sort(); + this._purgeOldPresets(); + + return preset; + } + + findPreset(presetPath) { + return this._favoritePresetsList.find((preset) => preset.presetPath === presetPath); + } +} + + +class FavoritePresetsClass { + constructor() { + this._favoritePresetsData = new FavoritePresetsData(); + } + + add(preset) { + const favoritePreset = this._favoritePresetsData.add(preset.fullPath); + preset.lastPickDate = favoritePreset.lastPickDate; + } + + addLastPickDate(presets) { + for (let preset of presets) { + let favoritePreset = this._favoritePresetsData.findPreset(preset.fullPath); + + if (favoritePreset) { + preset.lastPickDate = favoritePreset.lastPickDate; + } + } + } + + saveToStorage() { + this._favoritePresetsData.saveToStorage(); + } + + loadFromStorage() { + this._favoritePresetsData.loadFromStorage(); + } +} + + +let favoritePresets; // for export as singleton + +if (!favoritePresets) { + favoritePresets = new FavoritePresetsClass(); + favoritePresets.loadFromStorage(); +} + +export { favoritePresets }; diff --git a/src/tabs/presets/presets.js b/src/tabs/presets/presets.js index 21e96742..ca5a296d 100644 --- a/src/tabs/presets/presets.js +++ b/src/tabs/presets/presets.js @@ -1,5 +1,7 @@ 'use strict'; +import { favoritePresets } from './FavoritePresets'; + const presets = { presetsRepo: null, cliEngine: null, @@ -82,6 +84,7 @@ presets.onSaveClick = function() { this.activateCli().then(() => { const cliCommandsArray = this.getPickedPresetsCli(); + this.markPickedPresetsAsFavorites(); this.cliEngine.executeCommandsArray(cliCommandsArray).then(() => { const newCliErrorsCount = this.cliEngine.errorsCount; @@ -98,6 +101,14 @@ presets.onSaveClick = function() { }); }; +presets.markPickedPresetsAsFavorites = function() { + for(const pickedPreset of this.pickedPresetList) { + favoritePresets.add(pickedPreset.preset); + } + + favoritePresets.saveToStorage(); +}; + presets.disconnectCliMakeSure = function() { GUI.timeout_add('disconnect', function () { $('div.connect_controls a.connect').trigger( "click" ); @@ -307,6 +318,7 @@ presets.tryLoadPresets = function() { this.presetsRepo.loadIndex() .then(() => this.checkPresetSourceVersion()) .then(() => { + favoritePresets.addLastPickDate(this.presetsRepo.index.presets); this.prepareFilterFields(); this._divGlobalLoading.toggle(false); this._divMainContent.toggle(true); @@ -465,11 +477,23 @@ presets.getFitPresets = function(searchParams) { } } - result.sort((a, b) => (a.priority > b.priority) ? -1 : 1); + result.sort((a, b) => this.presetSearchPriorityComparer(a,b)); return result; }; +presets.presetSearchPriorityComparer = function(presetA, presetB) { + if (presetA.lastPickDate && presetB.lastPickDate) { + return presetB.lastPickDate - presetA.lastPickDate; + } + + if (presetA.lastPickDate || presetB.lastPickDate) { + return (presetA.lastPickDate) ? -1 : 1; + } + + return (presetA.priority > presetB.priority) ? -1 : 1; +}; + presets.isPresetFitSearchStatuses = function(preset, searchParams) { return 0 === searchParams.status.length || searchParams.status.includes(preset.status); }; |