@@ -44,7 +44,7 @@ const checkChapters = async (manga: MangaWithLibrary) => {
44
44
opts : {
45
45
jobId : `${ sanitizer ( manga . title ) } _${ chapterIndex - 1 } _download` ,
46
46
} ,
47
- name : `${ sanitizer ( manga . title ) } _ ${ chapterIndex - 1 } _download` ,
47
+ name : `${ sanitizer ( manga . title ) } _chapter# ${ chapterIndex - 1 } _download` ,
48
48
data : {
49
49
chapterIndex : chapterIndex - 1 ,
50
50
source : manga . source ,
@@ -78,19 +78,39 @@ export const checkChaptersWorker = new Worker(
78
78
} ,
79
79
) ;
80
80
81
+ export const getJobIdFromTitle = ( title : string ) => `check_${ sanitizer ( title ) } _chapters` ;
82
+
83
+ export const removeJob = async ( title : string ) => {
84
+ const jobId = getJobIdFromTitle ( title ) ;
85
+ const jobs = await checkChaptersQueue . getJobs ( 'delayed' ) ;
86
+ await Promise . all (
87
+ jobs
88
+ . filter ( ( job ) => job . opts . repeat ?. jobId === jobId )
89
+ . map ( async ( job ) => {
90
+ if ( job . id ) {
91
+ return checkChaptersQueue . remove ( job . id ) ;
92
+ }
93
+ return null ;
94
+ } ) ,
95
+ ) ;
96
+ } ;
97
+
81
98
export const schedule = async ( manga : MangaWithLibrary ) => {
82
99
if ( manga . interval === 'never' ) {
83
100
return ;
84
101
}
85
102
103
+ await removeJob ( manga . title ) ;
104
+ const jobId = getJobIdFromTitle ( manga . title ) ;
105
+
86
106
await checkChaptersQueue . add (
87
- `check_ ${ manga . title } _chapters` ,
107
+ jobId ,
88
108
{
89
109
manga,
90
110
} ,
91
111
{
92
- jobId : `check_ ${ manga . libraryId } _ ${ manga . id } _chapters` ,
93
- repeatJobKey : `check_ ${ manga . libraryId } _ ${ manga . id } _chapters` ,
112
+ jobId,
113
+ repeatJobKey : jobId ,
94
114
repeat : {
95
115
pattern : cronMap [ manga . interval as keyof typeof cronMap ] ,
96
116
} ,
0 commit comments