diff --git a/Logic/Osm/OsmPreferences.ts b/Logic/Osm/OsmPreferences.ts index 489b27cb8a..dc9b5c50e1 100644 --- a/Logic/Osm/OsmPreferences.ts +++ b/Logic/Osm/OsmPreferences.ts @@ -76,9 +76,9 @@ export class OsmPreferences { function updateData(l: number) { - if (l === undefined) { - source.setData(undefined); - return; + if(Object.keys(self.preferences.data).length === 0){ + // The preferences are still empty - they are not yet updated, so we delay updating for now + return } const prefsCount = Number(l); if (prefsCount > 100) { @@ -86,7 +86,11 @@ export class OsmPreferences { } let str = ""; for (let i = 0; i < prefsCount; i++) { - str += self.GetPreference(allStartWith + "-" + i, "").data; + const key = allStartWith + "-" + i + if(self.preferences.data[key] === undefined){ + console.warn("Detected a broken combined preference:", key, "is undefined", self.preferences) + } + str += self.preferences.data[key] ?? ""; } source.setData(str); @@ -95,7 +99,9 @@ export class OsmPreferences { length.addCallback(l => { updateData(Number(l)); }); - updateData(Number(length.data)); + this.preferences.addCallbackAndRun(_ => { + updateData(Number(length.data)); + }) return source; } @@ -127,7 +133,8 @@ export class OsmPreferences { public ClearPreferences() { let isRunning = false; const self = this; - this.preferences.addCallbackAndRun(prefs => { + this.preferences.addCallback(prefs => { + console.log("Cleaning preferences...") if (Object.keys(prefs).length == 0) { return; } @@ -135,19 +142,17 @@ export class OsmPreferences { return } isRunning = true - const prefixes = ["mapcomplete-installed-theme", "mapcomplete-installed-themes-", "mapcomplete-current-open-changeset", "mapcomplete-personal-theme-layer"] + const prefixes = ["mapcomplete-"] for (const key in prefs) { - for (const prefix of prefixes) { - if (key.startsWith(prefix)) { - console.log("Clearing ", key) - self.GetPreference(key, "").setData("") + const matches = prefixes.some(prefix => key.startsWith(prefix)) + if (matches) { + console.log("Clearing ", key) + self.GetPreference(key, "").setData("") - } } } isRunning = false; - return true; - + return; }) }