Add feature switch to disable the cache, partial fix to make GRB theme workable again

This commit is contained in:
Pieter Vander Vennet 2024-08-02 13:32:47 +02:00
parent 0a7d48de5b
commit fda88fcccf
8 changed files with 47 additions and 31 deletions

View file

@ -787,5 +787,6 @@
},
"overpassMaxZoom": 15,
"osmApiTileSize": 17,
"widenFactor": 2
"widenFactor": 2,
"enableCache": false
}

View file

@ -112,7 +112,7 @@ export default class SelectedElementTagsUpdater {
private invalidateCache(s: Feature) {
const state = this.state
const wasPartOfLayer = state.layout.getMatchingLayer(s.properties)
state.toCacheSavers.get(wasPartOfLayer.id).invalidateCacheAround(BBox.get(s))
state.toCacheSavers?.get(wasPartOfLayer.id)?.invalidateCacheAround(BBox.get(s))
}
private installCallback() {
const state = this.state

View file

@ -75,14 +75,7 @@ export default class ChangeGeometryApplicator implements FeatureSource {
newFeatures.push(feature)
continue
}
console.log(
"Applying a geometry change onto:",
feature,
"The change is:",
change,
"which becomes:",
copy
)
newFeatures.push(copy)
}
this.features.setData(newFeatures)

View file

@ -27,6 +27,7 @@ export default class LayoutSource extends FeatureSourceMerger {
private readonly supportsForceDownload: UpdatableFeatureSource[]
public static readonly fromCacheZoomLevel = 15
constructor(
layers: LayerConfig[],
featureSwitches: FeatureSwitchState,
@ -45,20 +46,22 @@ export default class LayoutSource extends FeatureSourceMerger {
const geojsonlayers = layers.filter((layer) => layer.source.geojsonSource !== undefined)
const osmLayers = layers.filter((layer) => layer.source.geojsonSource === undefined)
const fromCache = new Map<string, LocalStorageFeatureSource>()
for (const layer of osmLayers) {
const src = new LocalStorageFeatureSource(
backend,
layer,
LayoutSource.fromCacheZoomLevel,
mapProperties,
{
isActive: isDisplayed(layer.id),
maxAge: layer.maxAgeOfCache,
}
)
fromCache.set(layer.id, src)
}
if (featureSwitches.featureSwitchCache.data) {
for (const layer of osmLayers) {
const src = new LocalStorageFeatureSource(
backend,
layer,
LayoutSource.fromCacheZoomLevel,
mapProperties,
{
isActive: isDisplayed(layer.id),
maxAge: layer.maxAgeOfCache
}
)
fromCache.set(layer.id, src)
}
}
const mvtSources: UpdatableFeatureSource[] = osmLayers
.filter((f) => mvtAvailableLayers.has(f.id))
.map((l) => LayoutSource.setupMvtSource(l, mapProperties, isDisplayed(l.id)))
@ -104,7 +107,6 @@ export default class LayoutSource extends FeatureSourceMerger {
super(...geojsonSources, ...Array.from(fromCache.values()), ...mvtSources, ...nonMvtSources)
this.isLoading = isLoading
this.fromCache = fromCache
supportsForceDownload.push(...geojsonSources)
supportsForceDownload.push(...mvtSources) // Non-mvt sources are handled by overpass
this.supportsForceDownload = supportsForceDownload
@ -168,7 +170,7 @@ export default class LayoutSource extends FeatureSourceMerger {
backend,
isActive,
patchRelations: true,
fullNodeDatabase,
fullNodeDatabase
})
}
@ -200,11 +202,11 @@ export default class LayoutSource extends FeatureSourceMerger {
widenFactor: featureSwitches.layoutToUse.widenFactor,
overpassUrl: featureSwitches.overpassUrl,
overpassTimeout: featureSwitches.overpassTimeout,
overpassMaxZoom: featureSwitches.overpassMaxZoom,
overpassMaxZoom: featureSwitches.overpassMaxZoom
},
{
padToTiles: zoom.map((zoom) => Math.min(15, zoom + 1)),
isActive,
isActive
}
)
}

View file

@ -57,6 +57,8 @@ export default class FeatureSwitchState extends OsmConnectionFeatureSwitches {
public readonly featureSwitchBackToThemeOverview: UIEventSource<boolean>
public readonly featureSwitchShareScreen: UIEventSource<boolean>
public readonly featureSwitchGeolocation: UIEventSource<boolean>
public readonly featureSwitchCache: UIEventSource<boolean>
public readonly featureSwitchIsTesting: UIEventSource<boolean>
public readonly featureSwitchIsDebugging: UIEventSource<boolean>
public readonly featureSwitchShowAllQuestions: UIEventSource<boolean>
@ -176,6 +178,13 @@ export default class FeatureSwitchState extends OsmConnectionFeatureSwitches {
"Enable the export as GeoJSON and CSV button"
)
this.featureSwitchCache = FeatureSwitchUtils.initSwitch(
"fs-cache",
layoutToUse?.enableCache ?? true,
"Enable/disable caching from localStorage"
)
let testingDefaultValue = false
if (
!Utils.runningFromConsole &&

View file

@ -450,4 +450,14 @@ export interface LayoutConfigJson {
* iftrue: Do not write 'change_within_x_m' and do not indicate that this was done by survey
*/
enableMorePrivacy: boolean
/**
* question: Should this theme have the cache enabled?
*
* Should only be dissabled in highly specific cases, such as the GRB-theme
*
* ifunset: Cache is enabled
* iffalse: Do not cache data
* group: hidden
*/
enableCache?: true | boolean
}

View file

@ -81,6 +81,7 @@ export default class LayoutConfig implements LayoutInformation {
private readonly layersDict: Map<string, LayerConfig>
private readonly source: LayoutConfigJson
public readonly enableCache: boolean
constructor(
json: LayoutConfigJson,
@ -98,6 +99,7 @@ export default class LayoutConfig implements LayoutInformation {
this.id = json.id
this.definedAtUrl = options?.definedAtUrl
this.definitionRaw = options?.definitionRaw
this.enableCache = json.enableCache ?? true
if (official) {
if (json.id.toLowerCase() !== json.id) {
throw "The id of a theme should be lowercase: " + json.id

View file

@ -204,7 +204,6 @@ export default class ThemeViewState implements SpecialVisualizationState {
this.osmConnection.isLoggedIn
)
const self = this
this.layerState = new LayerState(
this.osmConnection,
layout.layers,
@ -241,7 +240,7 @@ export default class ThemeViewState implements SpecialVisualizationState {
this.featureSwitches,
this.mapProperties,
this.osmConnection.Backend(),
(id) => self.layerState.filteredLayers.get(id).isDisplayed,
(id) => this.layerState.filteredLayers.get(id).isDisplayed,
mvtAvailableLayers,
this.fullNodeDatabase
)
@ -316,7 +315,7 @@ export default class ThemeViewState implements SpecialVisualizationState {
}
const floors = new Set<string>()
for (const feature of features) {
let level = feature.properties["_level"]
const level = feature.properties["_level"]
if (level) {
const levels = level.split(";")
for (const l of levels) {
@ -379,7 +378,7 @@ export default class ThemeViewState implements SpecialVisualizationState {
this.featureSummary = this.setupSummaryLayer(
new LayerConfig(<LayerConfigJson>summaryLayer, "summaryLayer", true)
)
this.toCacheSavers = this.initSaveToLocalStorage()
this.toCacheSavers = layout.enableCache ? this.initSaveToLocalStorage() : undefined
this.initActors()
this.drawSpecialLayers()
this.initHotkeys()