From ca2af066df1b022cc8821bd0445b1d44c96dc49a Mon Sep 17 00:00:00 2001 From: Innei Date: Fri, 11 Oct 2024 22:51:08 +0800 Subject: [PATCH] fix: cleaner Signed-off-by: Innei --- apps/renderer/src/database/schemas/cleaner.ts | 3 ++- apps/renderer/src/services/cleaner.ts | 18 +++++++++++++++++- apps/renderer/src/services/inbox.ts | 4 ++-- apps/renderer/src/services/list.ts | 4 ++-- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/apps/renderer/src/database/schemas/cleaner.ts b/apps/renderer/src/database/schemas/cleaner.ts index a3e6ecad4..49aa13596 100644 --- a/apps/renderer/src/database/schemas/cleaner.ts +++ b/apps/renderer/src/database/schemas/cleaner.ts @@ -1,5 +1,6 @@ +export type CleanerType = "feed" | "entry" | "list" | "inbox" export type DB_Cleaner = { refId: string visitedAt: number - type: "entry" | "feed" + type: CleanerType } diff --git a/apps/renderer/src/services/cleaner.ts b/apps/renderer/src/services/cleaner.ts index 43b5aab75..6e57496b5 100644 --- a/apps/renderer/src/services/cleaner.ts +++ b/apps/renderer/src/services/cleaner.ts @@ -1,9 +1,12 @@ import { browserDB } from "~/database" +import type { CleanerType } from "~/database/schemas/cleaner" import { appLog } from "~/lib/log" import { EntryService } from "./entry" import { FeedService } from "./feed" import { FeedUnreadService } from "./feed-unread" +import { InboxService } from "./inbox" +import { ListService } from "./list" import { SubscriptionService } from "./subscription" const cleanerModel = browserDB.cleaner @@ -35,7 +38,7 @@ class CleanerServiceStatic { /** * Mark the which data recently used */ - reset(list: { type: "feed" | "entry"; id: string }[]) { + reset(list: { type: CleanerType; id: string }[]) { const now = Date.now() return cleanerModel.bulkPut( list.map((item) => ({ @@ -59,6 +62,8 @@ class CleanerServiceStatic { } const deleteEntries = [] as string[] const deleteFeeds = [] as string[] + const deleteLists = [] as string[] + const deleteInboxes = [] as string[] for (const item of data) { switch (item.type) { case "feed": { @@ -69,6 +74,15 @@ class CleanerServiceStatic { deleteEntries.push(item.refId) break } + case "list": { + deleteLists.push(item.refId) + // TODO delete entries related to the list + break + } + case "inbox": { + deleteInboxes.push(item.refId) + break + } } } @@ -78,6 +92,8 @@ class CleanerServiceStatic { EntryService.deleteEntries(deleteEntries), EntryService.deleteEntriesByFeedIds(deleteFeeds), cleanerModel.bulkDelete(data.map((d) => d.refId)), + ListService.bulkDelete(deleteLists), + InboxService.bulkDelete(deleteInboxes), ]) } diff --git a/apps/renderer/src/services/inbox.ts b/apps/renderer/src/services/inbox.ts index fe69c2f56..a3fc882b4 100644 --- a/apps/renderer/src/services/inbox.ts +++ b/apps/renderer/src/services/inbox.ts @@ -12,7 +12,7 @@ class ServiceStatic extends BaseService<{ id: string }> implements Hydable { } override async upsertMany(data: InboxModel[]) { - CleanerService.reset(data.map((d) => ({ type: "feed", id: d.id! }))) + CleanerService.reset(data.map((d) => ({ type: "inbox", id: d.id! }))) return this.table.bulkPut(data) } @@ -23,7 +23,7 @@ class ServiceStatic extends BaseService<{ id: string }> implements Hydable { override async upsert(data: InboxModel): Promise { if (!data.id) return null - CleanerService.reset([{ type: "feed", id: data.id }]) + CleanerService.reset([{ type: "inbox", id: data.id }]) return this.table.put(data) } diff --git a/apps/renderer/src/services/list.ts b/apps/renderer/src/services/list.ts index c8022c333..c9ed6e56a 100644 --- a/apps/renderer/src/services/list.ts +++ b/apps/renderer/src/services/list.ts @@ -14,7 +14,7 @@ class ServiceStatic extends BaseService<{ id: string }> implements Hydable { } override async upsertMany(data: ListModel[]) { - CleanerService.reset(data.map((d) => ({ type: "feed", id: d.id! }))) + CleanerService.reset(data.map((d) => ({ type: "list", id: d.id! }))) // FIXME The backend should not pass these computed attributes, and these need to be removed here. // Subsequent refactoring of the backend data flow should not nest computed attributes @@ -27,7 +27,7 @@ class ServiceStatic extends BaseService<{ id: string }> implements Hydable { override async upsert(data: ListModel): Promise { if (!data.id) return null - CleanerService.reset([{ type: "feed", id: data.id }]) + CleanerService.reset([{ type: "list", id: data.id }]) return this.table.put(omit(data, "owner")) }