diff --git a/db.ts b/db.ts index 9d31473..1459f5d 100644 --- a/db.ts +++ b/db.ts @@ -612,6 +612,9 @@ export class EhDb { [token], )); } + get_gallery_count() { + return this.db.query<[number]>("SELECT COUNT(*) FROM gmeta;")[0][0]; + } get_gids(offset = 0, limit = 20) { return this.db.query<[number]>( "SELECT gid FROM gmeta LIMIT ? OFFSET ?;", diff --git a/tasks/fix_gallery_page.ts b/tasks/fix_gallery_page.ts index 6e035be..c6ef088 100644 --- a/tasks/fix_gallery_page.ts +++ b/tasks/fix_gallery_page.ts @@ -1,8 +1,16 @@ -import { Task } from "../task.ts"; +import { Task, TaskFixGalleryPageProgress, TaskType } from "../task.ts"; import { TaskManager } from "../task_manager.ts"; import { asyncForEach } from "../utils.ts"; export async function fix_gallery_page(t: Task, m: TaskManager) { + const p: TaskFixGalleryPageProgress = { + total_gallery: m.db.get_gallery_count(), + checked_gallery: 0, + }; + const sendEvent = () => { + m.dispatchTaskProgressEvent(TaskType.FixGalleryPage, t.id, p); + }; + sendEvent(); let offset = 0; let gids = m.db.get_gids(offset); while (gids.length) { @@ -13,6 +21,8 @@ export async function fix_gallery_page(t: Task, m: TaskManager) { if (gmeta.filecount != count) { await m.add_download_task(gid, gmeta.token); } + p.checked_gallery += 1; + sendEvent(); }); offset += gids.length; gids = m.db.get_gids(offset); diff --git a/tasks/update_meili_search_data.ts b/tasks/update_meili_search_data.ts index e82fdb4..d4a97d2 100644 --- a/tasks/update_meili_search_data.ts +++ b/tasks/update_meili_search_data.ts @@ -1,4 +1,4 @@ -import { Task } from "../task.ts"; +import { Task, TaskType, TaskUpdateMeiliSearchDataProgress } from "../task.ts"; import { TaskManager } from "../task_manager.ts"; export async function update_meili_search_data( @@ -6,14 +6,33 @@ export async function update_meili_search_data( manager: TaskManager, ) { if (!manager.meilisearch) throw Error("MeiliServer not found."); + const progress: TaskUpdateMeiliSearchDataProgress = { + total_gallery: 0, + updated_gallery: 0, + }; + const sendEvent = () => { + manager.dispatchTaskProgressEvent( + TaskType.UpdateMeiliSearchData, + task.id, + progress, + ); + }; if (task.gid !== 0) { + progress.total_gallery = 1; + sendEvent(); await manager.meilisearch.updateGallery(task.gid); + progress.updated_gallery = 1; + sendEvent(); } else { + progress.total_gallery = manager.db.get_gallery_count(); + sendEvent(); let i = manager.db.get_gids(); let offset = 0; while (i.length) { await manager.meilisearch.updateGallery(...i); offset += i.length; + progress.updated_gallery = offset; + sendEvent(); i = manager.db.get_gids(offset); } }