From 659988330c7632131f5e9b218efc839d754d8258 Mon Sep 17 00:00:00 2001 From: Adam Kemish <49228220+Soopyboo32@users.noreply.github.com> Date: Sat, 18 Jan 2025 16:43:04 +0800 Subject: [PATCH] Fix some bugs with task queue (#1384) * Fix novel chapter downloading spinner not showing in chapter list * Fix novel chapter download notification staying on 'Prepairing' --- src/hooks/persisted/useDownload.ts | 12 ++++++++---- src/screens/novel/NovelScreen.tsx | 2 +- src/services/ServiceManager.ts | 21 ++++++++++++++++----- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/hooks/persisted/useDownload.ts b/src/hooks/persisted/useDownload.ts index c5f43127a..d9c1cfd4c 100644 --- a/src/hooks/persisted/useDownload.ts +++ b/src/hooks/persisted/useDownload.ts @@ -1,5 +1,9 @@ import { ChapterInfo, NovelInfo } from '@database/types'; -import ServiceManager, { BackgroundTask } from '@services/ServiceManager'; +import ServiceManager, { + BackgroundTaskMetadata, + DownloadChapterTask, + QueuedBackgroundTask, +} from '@services/ServiceManager'; import { useMemo } from 'react'; import { useMMKVObject } from 'react-native-mmkv'; @@ -7,13 +11,13 @@ export const DOWNLOAD_QUEUE = 'DOWNLOAD'; export const CHAPTER_DOWNLOADING = 'CHAPTER_DOWNLOADING'; export default function useDownload() { - const [queue] = useMMKVObject( + const [queue] = useMMKVObject( ServiceManager.manager.STORE_KEY, ); const downloadQueue = useMemo( - () => queue?.filter(t => t.name === 'DOWNLOAD_CHAPTER') || [], + () => queue?.filter(t => t.task.name === 'DOWNLOAD_CHAPTER') || [], [queue], - ); + ) as { task: DownloadChapterTask; meta: BackgroundTaskMetadata }[]; const downloadChapter = (novel: NovelInfo, chapter: ChapterInfo) => ServiceManager.manager.addTask({ diff --git a/src/screens/novel/NovelScreen.tsx b/src/screens/novel/NovelScreen.tsx index 4937dc824..12e0f2d62 100644 --- a/src/screens/novel/NovelScreen.tsx +++ b/src/screens/novel/NovelScreen.tsx @@ -438,7 +438,7 @@ const Novel = ({ route, navigation }: NovelScreenProps) => { renderItem={({ item }) => ( c.data.chapterId === item.id, + c => c.task.data.chapterId === item.id, )} isLocal={novel.isLocal} theme={theme} diff --git a/src/services/ServiceManager.ts b/src/services/ServiceManager.ts index 13715f1d8..8b638cb69 100644 --- a/src/services/ServiceManager.ts +++ b/src/services/ServiceManager.ts @@ -35,10 +35,11 @@ export type BackgroundTask = | { name: 'SELF_HOST_BACKUP'; data: SelfHostData } | { name: 'SELF_HOST_RESTORE'; data: SelfHostData } | { name: 'MIGRATE_NOVEL'; data: MigrateNovelData } - | { - name: 'DOWNLOAD_CHAPTER'; - data: { chapterId: number; novelName: string; chapterName: string }; - }; + | DownloadChapterTask; +export type DownloadChapterTask = { + name: 'DOWNLOAD_CHAPTER'; + data: { chapterId: number; novelName: string; chapterName: string }; +}; export type BackgroundTaskMetadata = { name: string; @@ -105,7 +106,7 @@ export default class ServiceManager { if (taskList[0].meta.isRunning) { BackgroundService.updateNotification({ taskTitle: taskList[0].meta.name, - taskDesc: taskList[0].meta.progressText, + taskDesc: taskList[0].meta.progressText ?? '', progressBar: { indeterminate: taskList[0].meta.progress === undefined, value: (taskList[0].meta.progress || 0) * 100, @@ -117,6 +118,16 @@ export default class ServiceManager { setMMKVObject(this.STORE_KEY, taskList); } async executeTask(task: QueuedBackgroundTask) { + await BackgroundService.updateNotification({ + taskTitle: task.meta.name, + taskDesc: task.meta.progressText ?? '', + progressBar: { + indeterminate: true, + max: 100, + value: 0, + }, + }); + switch (task.task.name) { case 'IMPORT_EPUB': return importEpub(task.task.data, this.setMeta.bind(this));