Add feature switch to disable the cache, partial fix to make GRB theme workable again
This commit is contained in:
parent
0a7d48de5b
commit
fda88fcccf
8 changed files with 47 additions and 31 deletions
|
@ -787,5 +787,6 @@
|
|||
},
|
||||
"overpassMaxZoom": 15,
|
||||
"osmApiTileSize": 17,
|
||||
"widenFactor": 2
|
||||
"widenFactor": 2,
|
||||
"enableCache": false
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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 &&
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue