From 7431bac30a8eab94ef758a775bf060dc8d6d5324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 10 Dec 2019 00:57:38 +0100 Subject: [PATCH] make sure there no local cache problems when a changeset change is reverted --- src/c3nav/editor/api.py | 17 +++++++++-------- src/c3nav/editor/static/editor/js/editor.js | 21 ++++++++++++++++----- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/c3nav/editor/api.py b/src/c3nav/editor/api.py index d2e514bb..e76b054b 100644 --- a/src/c3nav/editor/api.py +++ b/src/c3nav/editor/api.py @@ -322,16 +322,17 @@ class EditorViewSet(EditorViewSetMixin, ViewSet): return Response({ 'update_cache_key': update_cache_key, - 'geometries': [ - ( - obj.get_geojson_key() - if update_cache_key_match and not obj._affected_by_changeset - else obj.to_geojson(instance=obj) - ) - for obj in results - ], + 'geometries': [self.conditional_geojson(obj, update_cache_key_match) for obj in results], }) + def conditional_geojson(self, obj, update_cache_key_match): + if update_cache_key_match and not obj._affected_by_changeset: + return obj.get_geojson_key() + + result = obj.to_geojson(instance=obj) + result['properties']['changed'] = obj._affected_by_changeset + return result + @action(detail=False, methods=['get']) @api_etag(etag_func=MapUpdate.current_cache_key, cache_parameters={}) def geometrystyles(self, request, *args, **kwargs): diff --git a/src/c3nav/editor/static/editor/js/editor.js b/src/c3nav/editor/static/editor/js/editor.js index f16e9bff..96e8452d 100644 --- a/src/c3nav/editor/static/editor/js/editor.js +++ b/src/c3nav/editor/static/editor/js/editor.js @@ -675,7 +675,7 @@ editor = { _last_geometry_cache: {}, load_geometries: function (geometry_url, highlight_type, editing_id) { // load geometries from url - var same_url = (editor._last_geometry_url == geometry_url); + var same_url = (editor._last_geometry_url === geometry_url); editor._last_geometry_url = geometry_url; editor._loading_geometry = true; editor._highlight_type = highlight_type; @@ -702,12 +702,23 @@ editor = { feature = result.geometries[i]; if (Array.isArray(feature)) { // load from cache - feature = editor._last_geometry_cache[feature[0]][feature[1]]; + if (feature[0] in editor._last_geometry_cache) { + feature = editor._last_geometry_cache[feature[0]][feature[1]]; + } else { + feature = null; + } + if (!feature) { + editor._last_geometry_update_cache_key = null; + editor.load_geometries(editor._last_geometry_url, editor._highlight_type, editor._editing_id); + return; + } } - if (!new_cache[feature.properties.type]) { - new_cache[feature.properties.type] = {}; + if (!feature.properties.changed) { + if (!new_cache[feature.properties.type]) { + new_cache[feature.properties.type] = {}; + } + new_cache[feature.properties.type][feature.properties.id] = feature; } - new_cache[feature.properties.type][feature.properties.id] = feature; geometries.push(feature); } editor._last_geometry_cache = new_cache;