chore: automated housekeeping...

This commit is contained in:
Pieter Vander Vennet 2025-04-15 18:18:44 +02:00
parent 79b6927b56
commit 42ded4c1b1
328 changed files with 4062 additions and 1284 deletions

View file

@ -57,10 +57,7 @@ class RoundRobinStore<T> {
this._index.set((i + 1) % this._maxCount)
this._store.data[i] = t
this._store.ping()
}
}
export class OptionallySyncedHistory<T extends object | string> {
@ -84,18 +81,21 @@ export class OptionallySyncedHistory<T extends object | string> {
this._maxHistory = maxHistory
this._isSame = isSame
this.syncPreference = osmconnection.getPreference("preference-" + key + "-history", {
defaultValue: "sync"
defaultValue: "sync",
})
this.syncedBackingStore = Stores.fromArray(
Utils.TimesT(maxHistory, (i) => {
const pref = osmconnection.getPreference(key + "-hist-" + i + "-")
return UIEventSource.asObject<T>(pref, undefined)
}))
})
)
const ringIndex = UIEventSource.asInt(osmconnection.getPreference(key + "-hist-round-robin", {
defaultValue: "0"
}))
const ringIndex = UIEventSource.asInt(
osmconnection.getPreference(key + "-hist-round-robin", {
defaultValue: "0",
})
)
this.syncedOrdered = new RoundRobinStore<T>(this.syncedBackingStore, ringIndex, 10)
const local = (this.local = LocalStorageSource.getParsed<T[]>(key + "-history", []))
const thisSession = (this.thisSession = new UIEventSource<T[]>(
@ -104,7 +104,10 @@ export class OptionallySyncedHistory<T extends object | string> {
))
this.syncPreference.addCallback((syncmode) => {
if (syncmode === "sync") {
const list = [...thisSession.data, ...this.syncedOrdered.value.data].slice(0, maxHistory)
const list = [...thisSession.data, ...this.syncedOrdered.value.data].slice(
0,
maxHistory
)
if (this._isSame) {
for (let i = 0; i < list.length; i++) {
for (let j = i + 1; j < list.length; j++) {
@ -140,7 +143,9 @@ export class OptionallySyncedHistory<T extends object | string> {
public add(t: T) {
if (this._isSame) {
const alreadyNoted = this.getAppropriateStore().data.some(item => this._isSame(item, t))
const alreadyNoted = this.getAppropriateStore().data.some((item) =>
this._isSame(item, t)
)
if (alreadyNoted) {
return
}
@ -154,7 +159,7 @@ export class OptionallySyncedHistory<T extends object | string> {
}
this.local.ping()
} else if (this.syncPreference.data === "sync") {
this.osmconnection.isLoggedIn.addCallbackAndRun(loggedIn => {
this.osmconnection.isLoggedIn.addCallbackAndRun((loggedIn) => {
// Wait until we are logged in and the settings are downloaded before adding the preference
if (loggedIn) {
this.syncedOrdered.add(t)
@ -271,22 +276,29 @@ export default class UserRelatedState {
this.a11y = this.osmConnection.getPreference("a11y")
this.mangroveIdentity = new MangroveIdentity(
this.osmConnection.getPreference("identity", { defaultValue: undefined, prefix: "mangrove" }),
this.osmConnection.getPreference("identity", {
defaultValue: undefined,
prefix: "mangrove",
}),
this.osmConnection.getPreference("identity-creation-date", {
defaultValue: undefined,
prefix: "mangrove"
prefix: "mangrove",
})
)
this.preferredBackgroundLayer = this.osmConnection.getPreference("preferred-background-layer")
this.addNewFeatureMode = this.osmConnection.getPreference("preferences-add-new-mode",
{ defaultValue: "button_click_right" }
this.preferredBackgroundLayer = this.osmConnection.getPreference(
"preferred-background-layer"
)
this.addNewFeatureMode = this.osmConnection.getPreference("preferences-add-new-mode", {
defaultValue: "button_click_right",
})
this.showScale = UIEventSource.asBoolean(
this.osmConnection.getPreference("preference-show-scale", { defaultValue: "false" })
)
this.imageLicense = this.osmConnection.getPreference("pictures-license", { defaultValue: "CC0" })
this.imageLicense = this.osmConnection.getPreference("pictures-license", {
defaultValue: "CC0",
})
this.installedUserThemes = UserRelatedState.initInstalledUserThemes(osmConnection)
this.translationMode = this.initTranslationMode()
this.homeLocation = this.initHomeLocation()
@ -370,8 +382,8 @@ export default class UserRelatedState {
} catch (e) {
console.warn(
"Removing theme " +
id +
" as it could not be parsed from the preferences; the content is:",
id +
" as it could not be parsed from the preferences; the content is:",
str
)
pref.setData(null)
@ -401,7 +413,7 @@ export default class UserRelatedState {
icon: layout.icon,
title: layout.title.translations,
shortDescription: layout.shortDescription.translations,
definition: layout["definition"]
definition: layout["definition"],
})
)
}
@ -456,13 +468,13 @@ export default class UserRelatedState {
id: "home",
"user:home": "yes",
_lon: homeLonLat[0],
_lat: homeLonLat[1]
_lat: homeLonLat[1],
},
geometry: {
type: "Point",
coordinates: homeLonLat
}
}
coordinates: homeLonLat,
},
},
]
})
return new StaticFeatureSource(feature)
@ -484,7 +496,7 @@ export default class UserRelatedState {
_applicationOpened: new Date().toISOString(),
_supports_sharing:
typeof window === "undefined" ? "no" : window.navigator.share ? "yes" : "no",
_iframe: Utils.isIframe ? "yes" : "no"
_iframe: Utils.isIframe ? "yes" : "no",
})
if (!Utils.runningFromConsole) {
amendedPrefs.data["_host"] = window.location.host
@ -532,18 +544,18 @@ export default class UserRelatedState {
const zenLinks: { link: string; id: string }[] = Utils.NoNull([
hasMissingTheme
? {
id: "theme:" + layout.id,
link: LinkToWeblate.hrefToWeblateZen(
language,
"themes",
layout.id
)
}
id: "theme:" + layout.id,
link: LinkToWeblate.hrefToWeblateZen(
language,
"themes",
layout.id
),
}
: undefined,
...missingLayers.map((id) => ({
id: "layer:" + id,
link: LinkToWeblate.hrefToWeblateZen(language, "layers", id)
}))
link: LinkToWeblate.hrefToWeblateZen(language, "layers", id),
})),
])
const untranslated_count = untranslated.length
amendedPrefs.data["_translation_total"] = "" + total