From 4fd76cfce7b8d208a5c3fc61ebc8f18a5d347b2b Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 16 Jun 2025 20:30:51 +0200 Subject: [PATCH] Fix: stabilize user settings --- src/Logic/Osm/OsmPreferences.ts | 17 ++++++++++++----- src/Logic/State/UserRelatedState.ts | 4 +++- src/UI/Map/MapLibreAdaptor.ts | 7 ++++++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Logic/Osm/OsmPreferences.ts b/src/Logic/Osm/OsmPreferences.ts index 527d873cf..0c13cd1ac 100644 --- a/src/Logic/Osm/OsmPreferences.ts +++ b/src/Logic/Osm/OsmPreferences.ts @@ -71,8 +71,8 @@ export class OsmPreferences { if (value) { this.setPreferencesAll(key, value, deferPing) } - pref.addCallback((v) => { - this.uploadKvSplit(key, v) + pref.addCallback(async (v) => { + await this.uploadKvSplit(key, v) this.setPreferencesAll(key, v, deferPing) }) return pref @@ -270,20 +270,27 @@ export class OsmPreferences { return } // _All_ keys are deleted first, to avoid pending parts - const keysToDelete = OsmPreferences.keysStartingWith(this.seenKeys, k) - await Promise.all(keysToDelete.map((k) => this.deleteKeyDirectly(k))) + const keysToDelete = Utils.Dedup(OsmPreferences.keysStartingWith(this.seenKeys, k)) if (v === null || v === undefined || v === "" || v === "undefined" || v === "null") { + for (const k of keysToDelete) { + await this.deleteKeyDirectly(k) + } return } - + const restingKeys = new Set(keysToDelete) + restingKeys.delete(k) await this.uploadKeyDirectly(k, v.slice(0, 255)) v = v.slice(255) let i = 0 while (v.length > 0) { + restingKeys.delete(`${k}:${i}`) await this.uploadKeyDirectly(`${k}:${i}`, v.slice(0, 255)) v = v.slice(255) i++ } + for (const k of restingKeys) { + await this.deleteKeyDirectly(k) + } } /** diff --git a/src/Logic/State/UserRelatedState.ts b/src/Logic/State/UserRelatedState.ts index 80b88fd58..1ee0cee05 100644 --- a/src/Logic/State/UserRelatedState.ts +++ b/src/Logic/State/UserRelatedState.ts @@ -644,7 +644,9 @@ export default class UserRelatedState { } const pref = this.osmConnection.GetPreference(key, undefined, { prefix: "" }) - pref.set(tags[key]) + if (pref.data !== tags[key]) { + pref.set(tags[key]) + } } }) diff --git a/src/UI/Map/MapLibreAdaptor.ts b/src/UI/Map/MapLibreAdaptor.ts index ab8109225..49b69dcda 100644 --- a/src/UI/Map/MapLibreAdaptor.ts +++ b/src/UI/Map/MapLibreAdaptor.ts @@ -756,7 +756,12 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap { } if (!showScale) { if (this.scaleControl) { - map.removeControl(this.scaleControl) + try { + + map.removeControl(this.scaleControl) + } catch (e) { + console.warn("Could not remove scale control, underlying map might have had a reset") + } this.scaleControl = undefined } return