From 0d2b59a4129780944329d0e10f64f292c5695542 Mon Sep 17 00:00:00 2001 From: "Patrik J. Braun" Date: Sun, 6 Sep 2020 10:23:09 +0200 Subject: [PATCH] Improving local storing handling by try-cache all setItem calls and resetting storage on failure. Fixes: #170 --- .../app/ui/gallery/cache.gallery.service.ts | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/frontend/app/ui/gallery/cache.gallery.service.ts b/src/frontend/app/ui/gallery/cache.gallery.service.ts index dfd240f9..3d7acb06 100644 --- a/src/frontend/app/ui/gallery/cache.gallery.service.ts +++ b/src/frontend/app/ui/gallery/cache.gallery.service.ts @@ -218,17 +218,18 @@ export class GalleryCacheService { } try { + // try to fit it localStorage.setItem(key, JSON.stringify(directory)); + directory.directories.forEach((dir: DirectoryDTO) => { + const sub_key = GalleryCacheService.CONTENT_PREFIX + Utils.concatUrls(dir.path, dir.name); + if (localStorage.getItem(sub_key) == null) { // don't override existing + localStorage.setItem(sub_key, JSON.stringify(dir)); + } + }); } catch (e) { this.reset(); console.error(e); } - directory.directories.forEach((dir: DirectoryDTO) => { - const sub_key = GalleryCacheService.CONTENT_PREFIX + Utils.concatUrls(dir.path, dir.name); - if (localStorage.getItem(sub_key) == null) { // don't override existing - localStorage.setItem(sub_key, JSON.stringify(dir)); - } - }); } @@ -242,21 +243,26 @@ export class GalleryCacheService { return; } - const directoryName = Utils.concatUrls(media.directory.path, media.directory.name); - const value = localStorage.getItem(directoryName); - if (value != null) { - const directory: DirectoryDTO = JSON.parse(value); - directory.media.forEach((p) => { - if (p.name === media.name) { - // update data - p.metadata = media.metadata; - p.readyThumbnails = media.readyThumbnails; + try { + const directoryName = Utils.concatUrls(media.directory.path, media.directory.name); + const value = localStorage.getItem(directoryName); + if (value != null) { + const directory: DirectoryDTO = JSON.parse(value); + directory.media.forEach((p) => { + if (p.name === media.name) { + // update data + p.metadata = media.metadata; + p.readyThumbnails = media.readyThumbnails; - // save changes - localStorage.setItem(directoryName, JSON.stringify(directory)); - return; - } - }); + // save changes + localStorage.setItem(directoryName, JSON.stringify(directory)); + return; + } + }); + } + } catch (e) { + this.reset(); + console.error(e); } }