Fix: remember previous, externally loaded themes

This commit is contained in:
Pieter Vander Vennet 2022-01-25 00:46:57 +01:00
parent 06f9f2d94c
commit b61c0a1180
3 changed files with 71 additions and 40 deletions

View file

@ -178,12 +178,40 @@ export class OsmPreferences {
content: v content: v
}, function (error) { }, function (error) {
if (error) { if (error) {
console.log(`Could not set preference "${k}"'`, error); console.warn(`Could not set preference "${k}"'`, error);
return; return;
} }
console.log(`Preference ${k} written!`); console.debug(`Preference ${k} written!`);
}); });
} }
public ClearPreferences(){
let isRunning = false;
const self = this;
this.preferences.addCallbackAndRun(prefs => {
if(Object.keys(prefs).length == 0){
return;
}
if (isRunning) {
return
}
isRunning = true
const prefixes = ["mapcomplete-installed-theme","mapcomplete-installed-themes-","mapcomplete-current-open-changeset","mapcomplete-personal-theme-layer"]
for (const key in prefs) {
for (const prefix of prefixes) {
// console.log(key)
if (key.startsWith(prefix)) {
console.log("Clearing ", key)
self.GetPreference(key, "").setData("")
}
}
}
isRunning = false;
return true;
})
}
} }

View file

@ -32,13 +32,15 @@ export default class UserRelatedState extends ElementsState {
/** /**
* WHich other themes the user previously visited * WHich other themes the user previously visited
*/ */
public installedThemes: UIEventSource<{ id: string, // The id doubles as the URL public installedThemes: UIEventSource<{
id: string, // The id doubles as the URL
icon: string, icon: string,
title: any, title: any,
shortDescription: any}[]>; shortDescription: any
}[]>;
constructor(layoutToUse: LayoutConfig, options?:{attemptLogin : true | boolean}) { constructor(layoutToUse: LayoutConfig, options?: { attemptLogin: true | boolean }) {
super(layoutToUse); super(layoutToUse);
this.osmConnection = new OsmConnection({ this.osmConnection = new OsmConnection({
@ -73,46 +75,53 @@ export default class UserRelatedState extends ElementsState {
this.installedThemes = this.osmConnection.GetLongPreference("installed-themes").map( this.installedThemes = this.osmConnection.GetLongPreference("installed-themes").map(
str => { str => {
if(str === undefined || str === ""){ if (str === undefined || str === "") {
return [] return []
} }
try{ try {
return JSON.parse(str) return JSON.parse(str);
}catch(e){ } catch (e) {
console.warn("Could not parse preference with installed themes due to ", e,"\nThe offending string is",str) console.warn("Could not parse preference with installed themes due to ", e, "\nThe offending string is", str)
return [] return []
} }
}, [],(installed => JSON.stringify(installed)) }, [], (installed) => JSON.stringify(installed)
) )
const self = this; const self = this;
this.osmConnection.isLoggedIn.addCallbackAndRunD(loggedIn => {
if(!loggedIn){
return
}
if(this.layoutToUse?.id?.startsWith("http")){ if (this.layoutToUse?.id?.startsWith("http")) {
if(!this.installedThemes.data.some(installed => installed.id === this.layoutToUse.id)){ this.installedThemes.addCallbackAndRun(currentThemes => {
if (currentThemes === undefined) {
this.installedThemes.data.push({ // We wait till we are logged in
id: this.layoutToUse.id, return
icon: this.layoutToUse.icon,
title: this.layoutToUse.title.translations,
shortDescription: this.layoutToUse.shortDescription.translations
})
} }
this.installedThemes.ping()
console.log("Registered "+this.layoutToUse.id+" as installed themes") if(self.osmConnection.isLoggedIn.data == false){
} return;
}
if (currentThemes.some(installed => installed.id === this.layoutToUse.id)) {
// Already added to the 'installed theme' list
return;
}
console.log("Current installed themes are", this.installedThemes.data)
currentThemes.push({
id: self.layoutToUse.id,
icon: self.layoutToUse.icon,
title: self.layoutToUse.title.translations,
shortDescription: self.layoutToUse.shortDescription.translations
})
self.installedThemes.ping()
console.log("Registered " + self.layoutToUse.id + " as installed themes")
})
}
return true;
})
// Important: the favourite layers are initialized _after_ the installed themes, as these might contain an installedTheme // Important: the favourite layers are initialized _after_ the installed themes, as these might contain an installedTheme
this.favouriteLayers = LocalStorageSource.Get("favouriteLayers") this.favouriteLayers = LocalStorageSource.Get("favouriteLayers")
.syncWith(this.osmConnection.GetLongPreference("favouriteLayers")) .syncWith(this.osmConnection.GetLongPreference("favouriteLayers"))
@ -121,7 +130,7 @@ export default class UserRelatedState extends ElementsState {
[], [],
(layers) => Utils.Dedup(layers)?.join(";") (layers) => Utils.Dedup(layers)?.join(";")
); );
this.InitializeLanguage(); this.InitializeLanguage();
new SelectedElementTagsUpdater(this) new SelectedElementTagsUpdater(this)

View file

@ -1,6 +0,0 @@
import ValidatedTextField from "./UI/Input/ValidatedTextField";
import {VariableUiElement} from "./UI/Base/VariableUIElement";
const tf = ValidatedTextField.InputForType("url")
tf.AttachTo("maindiv")
new VariableUiElement(tf.GetValue()).AttachTo("extradiv")