Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/betaflight/betaflight-configurator.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Efimov <gendalf44@yandex.ru>2022-09-20 09:23:03 +0300
committerIvan Efimov <gendalf44@yandex.ru>2022-09-22 12:56:16 +0300
commit6266f292dab64271d09762438c8729d4707dba2d (patch)
treef83587a347a79c95bb6b032447fea1be5e31cc71
parente0692c135004f80e618a64cce94c9cf9ba400189 (diff)
Presets: favorite presets
-rw-r--r--src/tabs/presets/FavoritePresets.js99
-rw-r--r--src/tabs/presets/presets.js26
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);
};