Use DB Watcher to trigger generateThumbnails
This commit is contained in:
parent
99b8b9a636
commit
36773bf5c0
@ -35,7 +35,7 @@ function onRouteChange(router, route) {
|
|||||||
update(route);
|
update(route);
|
||||||
}
|
}
|
||||||
|
|
||||||
image.imported.subscribe(generateThumbnails);
|
image.watcher(generateThumbnails);
|
||||||
image.imported.subscribe(redraw);
|
image.imported.subscribe(redraw);
|
||||||
image.removed.subscribe(redraw);
|
image.removed.subscribe(redraw);
|
||||||
index.added.subscribe(redraw);
|
index.added.subscribe(redraw);
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
export default async function(...args) {
|
export default async function(id, deleted) {
|
||||||
const module = await import('../context/generateThumbnails');
|
if (!deleted) {
|
||||||
module.invoke(...args);
|
const module = await import('../context/generateThumbnails');
|
||||||
|
module.invoke(id, deleted);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,15 +3,31 @@ import { log, error } from '../services/console.js';
|
|||||||
import { sha256 } from '../utils/crypto.js';
|
import { sha256 } from '../utils/crypto.js';
|
||||||
import { blobToArrayBuffer, deepAssign } from '../utils/conversion.js';
|
import { blobToArrayBuffer, deepAssign } from '../utils/conversion.js';
|
||||||
import { Event, backgroundTask } from '../utils/event.js';
|
import { Event, backgroundTask } from '../utils/event.js';
|
||||||
|
import { Watcher } from '../utils/watcher.js';
|
||||||
|
|
||||||
const db = getDatabase();
|
const db = getDatabase();
|
||||||
const PROCESS_PREFIX = 'importing';
|
const PROCESS_PREFIX = 'importing';
|
||||||
const PREFIX = 'image';
|
const PREFIX = 'image';
|
||||||
|
const SELECTOR = {
|
||||||
|
_id: {
|
||||||
|
$gt: `${PREFIX}_`,
|
||||||
|
$lt: `${PREFIX}_\ufff0`
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const IMPORT_SELECTOR = {
|
||||||
|
_id: {
|
||||||
|
$gt: `${PROCESS_PREFIX}_`,
|
||||||
|
$lt: `${PROCESS_PREFIX}_\ufff0`
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
export const imported = new Event('Image.imported');
|
export const imported = new Event('Image.imported');
|
||||||
export const removed = new Event('Image.removed');
|
export const removed = new Event('Image.removed');
|
||||||
|
|
||||||
|
// Watchers
|
||||||
|
export const watcher = Watcher(db, SELECTOR);
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
const getId = id => (id.startsWith(PREFIX) ? id : `${PREFIX}_${id}`);
|
const getId = id => (id.startsWith(PREFIX) ? id : `${PREFIX}_${id}`);
|
||||||
|
|
||||||
@ -76,12 +92,7 @@ export async function addAttachment(doc, key, blob) {
|
|||||||
// Internal Functions
|
// Internal Functions
|
||||||
const processImportables = backgroundTask(async function _processImportables() {
|
const processImportables = backgroundTask(async function _processImportables() {
|
||||||
const result = await db.find({
|
const result = await db.find({
|
||||||
selector: {
|
selector: IMPORT_SELECTOR,
|
||||||
_id: {
|
|
||||||
$gt: `${PROCESS_PREFIX}_`,
|
|
||||||
$lt: `${PROCESS_PREFIX}_\ufff0`
|
|
||||||
}
|
|
||||||
},
|
|
||||||
limit: 1
|
limit: 1
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
36
packages/gallery/src/utils/watcher.js
Normal file
36
packages/gallery/src/utils/watcher.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import { log, error } from '../services/console.js';
|
||||||
|
|
||||||
|
export function Watcher(db, selector) {
|
||||||
|
const subscribers = new Set();
|
||||||
|
let changes = null;
|
||||||
|
|
||||||
|
return function subscribe(fn) {
|
||||||
|
subscribers.add(fn);
|
||||||
|
|
||||||
|
if (subscribers.size === 1 && !changes) {
|
||||||
|
log('Watching:', db, selector);
|
||||||
|
changes = db
|
||||||
|
.changes({
|
||||||
|
since: 'now',
|
||||||
|
live: true,
|
||||||
|
selector
|
||||||
|
})
|
||||||
|
.on('change', change => {
|
||||||
|
log('changed:', change);
|
||||||
|
subscribers.forEach(s => s(change.id, !!change.deleted));
|
||||||
|
})
|
||||||
|
.on('error', err => {
|
||||||
|
error(err);
|
||||||
|
subscribers.empty();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return () => {
|
||||||
|
this.subscribers.delete(fn);
|
||||||
|
if (subscribers.size === 0 && changes) {
|
||||||
|
log('Unwatching:', db, selector);
|
||||||
|
changes.cancel();
|
||||||
|
changes = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user