From c7e76fc169413a115ed6388f2ded50c3fd43fa57 Mon Sep 17 00:00:00 2001 From: Timothy Farrell Date: Sat, 25 Nov 2017 16:02:06 -0600 Subject: [PATCH] Remove image from album upon deletion --- packages/gallery/src/data/album.js | 20 +++++++++++++------- packages/gallery/src/services/db.js | 4 ++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/gallery/src/data/album.js b/packages/gallery/src/data/album.js index e17f346..8a7f7a9 100644 --- a/packages/gallery/src/data/album.js +++ b/packages/gallery/src/data/album.js @@ -68,10 +68,16 @@ class AlbumSpec extends TypeSpec { export const AlbumType = PouchDB.registerType('Album', AlbumSpec); -// ImageType.watch({_deleted: true}, true) -// .then(la => { -// la.subscribe() ); -// -// image.removed.subscribe(image => { -// Object.keys(image.tags).forEach(t => index.removeMember(t, image._id)); -// }) +ImageType.subscribe((id, deleted, doc) => { + if (!deleted) { + return; + } + + Object.keys(doc.$links) + .filter(k => k.startsWith(AlbumType.prefix)) + .forEach(async albumId => { + const album = await AlbumType.find(albumId); + album.count -= 1; + album.save(); + }); +}); diff --git a/packages/gallery/src/services/db.js b/packages/gallery/src/services/db.js index b295541..149e28b 100644 --- a/packages/gallery/src/services/db.js +++ b/packages/gallery/src/services/db.js @@ -7,6 +7,7 @@ import find from 'pouchdb-find'; import { log, warn } from './console.js'; import { isObject } from '../utils/comparators.js'; import { LiveArray } from '../utils/livearray.js'; +import { Watcher } from '../utils/watcher.js'; import { deepAssign, pouchDocHash } from '../utils/conversion.js'; export const PouchDB = core @@ -95,6 +96,7 @@ export function PouchORM(PouchDB) { const _baseSelector = Object.freeze({ _id: { $gt: `${prefix}_0`, $lt: `${prefix}_\ufff0` } }); + const watch = Watcher(_db, _baseSelector, true); if (!cls.hasOwnProperty('validate')) { warn(`${cls.name} has no validation.`); @@ -156,8 +158,10 @@ export function PouchORM(PouchDB) { getOrCreate: { value: getOrCreate }, find: { value: find }, delete: { value: _delete }, + subscribe: { value: watch }, db: { value: _db }, name: { value: name }, + prefix: { value: prefix }, selector: { value: _baseSelector } });