pixivflow 2.0.41 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -674
- package/README.md +67 -574
- package/README_EN.md +71 -1523
- package/dist/commands/SchedulerCommand.d.ts.map +1 -1
- package/dist/commands/SchedulerCommand.js +5 -1
- package/dist/commands/SchedulerCommand.js.map +1 -1
- package/dist/download/DownloadManager.d.ts +9 -0
- package/dist/download/DownloadManager.d.ts.map +1 -1
- package/dist/download/DownloadManager.js +27 -0
- package/dist/download/DownloadManager.js.map +1 -1
- package/dist/download/pipeline/DownloadPipeline.d.ts +6 -0
- package/dist/download/pipeline/DownloadPipeline.d.ts.map +1 -1
- package/dist/download/pipeline/DownloadPipeline.js +4 -2
- package/dist/download/pipeline/DownloadPipeline.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/scheduler/Scheduler.d.ts +17 -4
- package/dist/scheduler/Scheduler.d.ts.map +1 -1
- package/dist/scheduler/Scheduler.js +58 -20
- package/dist/scheduler/Scheduler.js.map +1 -1
- package/dist/utils/errors.d.ts +9 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +17 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/webui/package.json +1 -1
- package/dist/webui/routes/handlers/download-basic-handlers.d.ts.map +1 -1
- package/dist/webui/routes/handlers/download-basic-handlers.js +6 -20
- package/dist/webui/routes/handlers/download-basic-handlers.js.map +1 -1
- package/dist/webui/routes/handlers/download-url-handlers.d.ts +3 -6
- package/dist/webui/routes/handlers/download-url-handlers.d.ts.map +1 -1
- package/dist/webui/routes/handlers/download-url-handlers.js +72 -138
- package/dist/webui/routes/handlers/download-url-handlers.js.map +1 -1
- package/dist/webui/server/server-routes.d.ts.map +1 -1
- package/dist/webui/server/server-routes.js +6 -2
- package/dist/webui/server/server-routes.js.map +1 -1
- package/dist/webui/server/server.d.ts.map +1 -1
- package/dist/webui/server/server.js +25 -3
- package/dist/webui/server/server.js.map +1 -1
- package/dist/webui/services/DownloadTaskManager.d.ts +12 -0
- package/dist/webui/services/DownloadTaskManager.d.ts.map +1 -1
- package/dist/webui/services/DownloadTaskManager.js +119 -51
- package/dist/webui/services/DownloadTaskManager.js.map +1 -1
- package/dist/webui/utils/task-serialize.d.ts +31 -0
- package/dist/webui/utils/task-serialize.d.ts.map +1 -0
- package/dist/webui/utils/task-serialize.js +40 -0
- package/dist/webui/utils/task-serialize.js.map +1 -0
- package/dist/webui/websocket/DownloadStatus.d.ts +19 -0
- package/dist/webui/websocket/DownloadStatus.d.ts.map +1 -0
- package/dist/webui/websocket/DownloadStatus.js +61 -0
- package/dist/webui/websocket/DownloadStatus.js.map +1 -0
- package/package.json +11 -10
|
@@ -22,6 +22,18 @@ export declare class DownloadTaskManager {
|
|
|
22
22
|
private tasks;
|
|
23
23
|
private taskLogs;
|
|
24
24
|
private activeTask;
|
|
25
|
+
/**
|
|
26
|
+
* Change notification so realtime layers (websocket) can push updates
|
|
27
|
+
* without polling REST endpoints.
|
|
28
|
+
*/
|
|
29
|
+
private changeListeners;
|
|
30
|
+
private notifyTimer;
|
|
31
|
+
/** Subscribe to coarse-grained change events; returns an unsubscribe fn. */
|
|
32
|
+
subscribe(listener: () => void): () => void;
|
|
33
|
+
/** Test-only isolation hook: wipe in-memory task maps. */
|
|
34
|
+
clearAllForTests?(): void;
|
|
35
|
+
/** Coalesced notification (max ~7/sec) so bursts of per-file progress are cheap. */
|
|
36
|
+
private notifyChange;
|
|
25
37
|
/**
|
|
26
38
|
* Start a download task
|
|
27
39
|
* @param taskId - Unique task identifier
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadTaskManager.d.ts","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAA6B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"DownloadTaskManager.d.ts","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAA6B,MAAM,cAAc,CAAC;AAI3E,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,UAAU,CAKF;IAEhB;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,WAAW,CAA+B;IAElD,4EAA4E;IACrE,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAOlD,0DAA0D;IACnD,gBAAgB,CAAC,IAAI,IAAI;IAKhC,oFAAoF;IACpF,OAAO,CAAC,YAAY;IAcpB;;;;;;OAMG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACxC,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IA8LhB;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C7C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIhD;;OAEG;IACH,WAAW,IAAI,UAAU,EAAE;IAM3B;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAOlC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAwBpG;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI;IAoB/F;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IA0CzF;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAQ3D;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAOpC;AAGD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
|
|
@@ -8,10 +8,45 @@ const Database_1 = require("../../storage/Database");
|
|
|
8
8
|
const FileService_1 = require("../../download/FileService");
|
|
9
9
|
const config_1 = require("../../config");
|
|
10
10
|
const logger_1 = require("../../logger");
|
|
11
|
+
const errors_1 = require("../../utils/errors");
|
|
11
12
|
class DownloadTaskManager {
|
|
12
13
|
tasks = new Map();
|
|
13
14
|
taskLogs = new Map();
|
|
14
15
|
activeTask = null;
|
|
16
|
+
/**
|
|
17
|
+
* Change notification so realtime layers (websocket) can push updates
|
|
18
|
+
* without polling REST endpoints.
|
|
19
|
+
*/
|
|
20
|
+
changeListeners = new Set();
|
|
21
|
+
notifyTimer = null;
|
|
22
|
+
/** Subscribe to coarse-grained change events; returns an unsubscribe fn. */
|
|
23
|
+
subscribe(listener) {
|
|
24
|
+
this.changeListeners.add(listener);
|
|
25
|
+
return () => {
|
|
26
|
+
this.changeListeners.delete(listener);
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Test-only isolation hook: wipe in-memory task maps. */
|
|
30
|
+
clearAllForTests() {
|
|
31
|
+
this.tasks.clear();
|
|
32
|
+
this.taskLogs.clear();
|
|
33
|
+
}
|
|
34
|
+
/** Coalesced notification (max ~7/sec) so bursts of per-file progress are cheap. */
|
|
35
|
+
notifyChange() {
|
|
36
|
+
if (this.notifyTimer)
|
|
37
|
+
return;
|
|
38
|
+
this.notifyTimer = setTimeout(() => {
|
|
39
|
+
this.notifyTimer = null;
|
|
40
|
+
for (const listener of this.changeListeners) {
|
|
41
|
+
try {
|
|
42
|
+
listener();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// A failing listener must never affect task execution.
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, 150);
|
|
49
|
+
}
|
|
15
50
|
/**
|
|
16
51
|
* Start a download task
|
|
17
52
|
* @param taskId - Unique task identifier
|
|
@@ -72,7 +107,6 @@ class DownloadTaskManager {
|
|
|
72
107
|
const progressCallback = this.getProgressCallback(taskId);
|
|
73
108
|
downloadManager.setProgressCallback(progressCallback);
|
|
74
109
|
await downloadManager.initialise();
|
|
75
|
-
const abortController = new AbortController();
|
|
76
110
|
const taskStatus = {
|
|
77
111
|
taskId,
|
|
78
112
|
status: 'running',
|
|
@@ -82,6 +116,7 @@ class DownloadTaskManager {
|
|
|
82
116
|
};
|
|
83
117
|
this.tasks.set(taskId, taskStatus);
|
|
84
118
|
this.taskLogs.set(taskId, []);
|
|
119
|
+
this.notifyChange();
|
|
85
120
|
// Save task history to database
|
|
86
121
|
try {
|
|
87
122
|
database.saveTaskHistory(taskId, {
|
|
@@ -100,55 +135,86 @@ class DownloadTaskManager {
|
|
|
100
135
|
this.addLog(taskId, 'info', '开始执行下载任务...');
|
|
101
136
|
logger_1.logger.info(`Starting download task ${taskId}`);
|
|
102
137
|
await downloadManager.runAllTargets();
|
|
103
|
-
taskStatus.status
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
138
|
+
if (taskStatus.status === 'running') {
|
|
139
|
+
taskStatus.status = 'completed';
|
|
140
|
+
taskStatus.endTime = new Date();
|
|
141
|
+
try {
|
|
142
|
+
database.saveTaskHistory(taskId, {
|
|
143
|
+
status: 'completed',
|
|
144
|
+
startTime: taskStatus.startTime,
|
|
145
|
+
endTime: taskStatus.endTime,
|
|
146
|
+
progressCurrent: taskStatus.progress?.current,
|
|
147
|
+
progressTotal: taskStatus.progress?.total,
|
|
148
|
+
progressMessage: taskStatus.progress?.message,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
logger_1.logger.warn('Failed to update task history in database', { taskId, error });
|
|
153
|
+
}
|
|
154
|
+
this.addLog(taskId, 'info', '下载任务完成');
|
|
155
|
+
logger_1.logger.info(`Download task ${taskId} completed`);
|
|
118
156
|
}
|
|
119
|
-
this.addLog(taskId, 'info', '下载任务完成');
|
|
120
|
-
logger_1.logger.info(`Download task ${taskId} completed`);
|
|
121
157
|
}
|
|
122
158
|
catch (error) {
|
|
123
|
-
taskStatus.status
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
159
|
+
if (taskStatus.status !== 'running' || (0, errors_1.isOperationCancelled)(error)) {
|
|
160
|
+
// User requested a stop (status already set by stopTask) or the run
|
|
161
|
+
// was cancelled cooperatively. Record it without failing the task.
|
|
162
|
+
if (taskStatus.status === 'running') {
|
|
163
|
+
taskStatus.status = 'stopped';
|
|
164
|
+
taskStatus.endTime = new Date();
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
database.saveTaskHistory(taskId, {
|
|
168
|
+
status: taskStatus.status,
|
|
169
|
+
startTime: taskStatus.startTime,
|
|
170
|
+
endTime: taskStatus.endTime,
|
|
171
|
+
error: taskStatus.status === 'stopped' ? 'Task stopped by user' : undefined,
|
|
172
|
+
progressCurrent: taskStatus.progress?.current,
|
|
173
|
+
progressTotal: taskStatus.progress?.total,
|
|
174
|
+
progressMessage: taskStatus.progress?.message,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
catch (dbError) {
|
|
178
|
+
logger_1.logger.warn('Failed to update task history in database', { taskId, error: dbError });
|
|
179
|
+
}
|
|
180
|
+
this.addLog(taskId, 'warn', `任务已终止(${(0, errors_1.isOperationCancelled)(error) ? error.message : '用户停止'})`);
|
|
141
181
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
182
|
+
else {
|
|
183
|
+
taskStatus.status = 'failed';
|
|
184
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
185
|
+
taskStatus.error = errorMessage;
|
|
186
|
+
taskStatus.endTime = new Date();
|
|
187
|
+
try {
|
|
188
|
+
database.saveTaskHistory(taskId, {
|
|
189
|
+
status: 'failed',
|
|
190
|
+
startTime: taskStatus.startTime,
|
|
191
|
+
endTime: taskStatus.endTime,
|
|
192
|
+
error: errorMessage,
|
|
193
|
+
progressCurrent: taskStatus.progress?.current,
|
|
194
|
+
progressTotal: taskStatus.progress?.total,
|
|
195
|
+
progressMessage: taskStatus.progress?.message,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
catch (dbError) {
|
|
199
|
+
logger_1.logger.warn('Failed to update task history in database', { taskId, error: dbError });
|
|
200
|
+
}
|
|
201
|
+
this.addLog(taskId, 'error', `下载任务失败: ${errorMessage}`);
|
|
202
|
+
if (error instanceof Error && error.stack) {
|
|
203
|
+
this.addLog(taskId, 'error', `错误堆栈: ${error.stack}`);
|
|
204
|
+
}
|
|
205
|
+
logger_1.logger.error(`Download task ${taskId} failed`, { error });
|
|
206
|
+
throw error;
|
|
145
207
|
}
|
|
146
|
-
logger_1.logger.error(`Download task ${taskId} failed`, { error });
|
|
147
|
-
throw error;
|
|
148
208
|
}
|
|
149
209
|
finally {
|
|
150
|
-
|
|
210
|
+
try {
|
|
211
|
+
database.close();
|
|
212
|
+
}
|
|
213
|
+
catch (closeError) {
|
|
214
|
+
logger_1.logger.warn('Error while closing task database', { taskId, error: closeError });
|
|
215
|
+
}
|
|
151
216
|
this.activeTask = null;
|
|
217
|
+
this.notifyChange();
|
|
152
218
|
}
|
|
153
219
|
})();
|
|
154
220
|
this.activeTask = {
|
|
@@ -156,7 +222,6 @@ class DownloadTaskManager {
|
|
|
156
222
|
manager: downloadManager,
|
|
157
223
|
database,
|
|
158
224
|
promise,
|
|
159
|
-
abortController,
|
|
160
225
|
};
|
|
161
226
|
// Don't await - let it run in background
|
|
162
227
|
promise.catch(() => {
|
|
@@ -176,10 +241,9 @@ class DownloadTaskManager {
|
|
|
176
241
|
}
|
|
177
242
|
if (this.activeTask && this.activeTask.taskId === taskId) {
|
|
178
243
|
const database = this.activeTask.database;
|
|
179
|
-
|
|
244
|
+
task.status = 'stopped';
|
|
245
|
+
task.endTime = new Date();
|
|
180
246
|
try {
|
|
181
|
-
task.status = 'stopped';
|
|
182
|
-
task.endTime = new Date();
|
|
183
247
|
database.saveTaskHistory(taskId, {
|
|
184
248
|
status: 'stopped',
|
|
185
249
|
startTime: task.startTime,
|
|
@@ -193,14 +257,16 @@ class DownloadTaskManager {
|
|
|
193
257
|
catch (error) {
|
|
194
258
|
logger_1.logger.warn('Failed to update task history in database', { taskId, error });
|
|
195
259
|
}
|
|
196
|
-
//
|
|
197
|
-
|
|
198
|
-
//
|
|
199
|
-
|
|
260
|
+
// Cooperatively cancel the run: the in-flight item finishes, remaining
|
|
261
|
+
// targets/items are skipped, then runAllTargets() throws and the runner
|
|
262
|
+
// finalizes state + closes the database.
|
|
263
|
+
this.activeTask.manager.cancel('stopped by user');
|
|
200
264
|
this.addLog(taskId, 'warn', '下载任务已停止');
|
|
201
|
-
this.activeTask = null;
|
|
202
265
|
logger_1.logger.info(`Download task ${taskId} stopped`);
|
|
203
266
|
}
|
|
267
|
+
else {
|
|
268
|
+
throw new Error(`Task ${taskId} is not the active task`);
|
|
269
|
+
}
|
|
204
270
|
}
|
|
205
271
|
/**
|
|
206
272
|
* Get task status
|
|
@@ -252,6 +318,7 @@ class DownloadTaskManager {
|
|
|
252
318
|
logger_1.logger.debug('Failed to update task progress in database', { taskId });
|
|
253
319
|
}
|
|
254
320
|
}
|
|
321
|
+
this.notifyChange();
|
|
255
322
|
}
|
|
256
323
|
}
|
|
257
324
|
/**
|
|
@@ -311,6 +378,7 @@ class DownloadTaskManager {
|
|
|
311
378
|
logger_1.logger.error(logMessage, { taskId });
|
|
312
379
|
break;
|
|
313
380
|
}
|
|
381
|
+
this.notifyChange();
|
|
314
382
|
}
|
|
315
383
|
/**
|
|
316
384
|
* Get logs for a task
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadTaskManager.js","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DownloadTaskManager.js","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared serialization helpers for task status payloads.
|
|
3
|
+
*
|
|
4
|
+
* Used by both the REST layer (download handlers) and the realtime layer
|
|
5
|
+
* (websocket download stream) so both channels emit identical shapes.
|
|
6
|
+
*/
|
|
7
|
+
interface DateIsh {
|
|
8
|
+
startTime: unknown;
|
|
9
|
+
endTime?: unknown;
|
|
10
|
+
logs?: Array<{
|
|
11
|
+
timestamp: unknown;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Convert a TaskStatus-like object into a JSON-safe clone:
|
|
16
|
+
* Date instances become ISO strings.
|
|
17
|
+
*/
|
|
18
|
+
export declare function serializeTaskStatus<T extends DateIsh>(task: T | null): T | null;
|
|
19
|
+
export interface DownloadStatusSnapshot<T> {
|
|
20
|
+
hasActiveTask: boolean;
|
|
21
|
+
activeTask: T | null;
|
|
22
|
+
allTasks: T[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build the realtime snapshot payload from in-memory tasks only.
|
|
26
|
+
* Historical hydration stays the responsibility of the REST endpoint so the
|
|
27
|
+
* push channel never touches the database.
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildInMemorySnapshot(activeTask: unknown, allTasks: unknown[]): DownloadStatusSnapshot<unknown>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=task-serialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-serialize.d.ts","sourceRoot":"","sources":["../../../src/webui/utils/task-serialize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,UAAU,OAAO;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAW/E;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,EAAE,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,OAAO,EAAE,GAClB,sBAAsB,CAAC,OAAO,CAAC,CAMjC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared serialization helpers for task status payloads.
|
|
4
|
+
*
|
|
5
|
+
* Used by both the REST layer (download handlers) and the realtime layer
|
|
6
|
+
* (websocket download stream) so both channels emit identical shapes.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.serializeTaskStatus = serializeTaskStatus;
|
|
10
|
+
exports.buildInMemorySnapshot = buildInMemorySnapshot;
|
|
11
|
+
/**
|
|
12
|
+
* Convert a TaskStatus-like object into a JSON-safe clone:
|
|
13
|
+
* Date instances become ISO strings.
|
|
14
|
+
*/
|
|
15
|
+
function serializeTaskStatus(task) {
|
|
16
|
+
if (!task)
|
|
17
|
+
return null;
|
|
18
|
+
return {
|
|
19
|
+
...task,
|
|
20
|
+
startTime: task.startTime instanceof Date ? task.startTime.toISOString() : task.startTime,
|
|
21
|
+
endTime: task.endTime instanceof Date ? task.endTime.toISOString() : task.endTime,
|
|
22
|
+
logs: task.logs?.map((log) => ({
|
|
23
|
+
...log,
|
|
24
|
+
timestamp: log.timestamp instanceof Date ? log.timestamp.toISOString() : log.timestamp,
|
|
25
|
+
})),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build the realtime snapshot payload from in-memory tasks only.
|
|
30
|
+
* Historical hydration stays the responsibility of the REST endpoint so the
|
|
31
|
+
* push channel never touches the database.
|
|
32
|
+
*/
|
|
33
|
+
function buildInMemorySnapshot(activeTask, allTasks) {
|
|
34
|
+
return {
|
|
35
|
+
hasActiveTask: activeTask !== null && activeTask !== undefined,
|
|
36
|
+
activeTask: serializeTaskStatus(activeTask),
|
|
37
|
+
allTasks: allTasks.slice(0, 10).map((t) => serializeTaskStatus(t)),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=task-serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-serialize.js","sourceRoot":"","sources":["../../../src/webui/utils/task-serialize.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAYH,kDAWC;AAaD,sDASC;AArCD;;;GAGG;AACH,SAAgB,mBAAmB,CAAoB,IAAc;IACnE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS;QACzF,OAAO,EAAE,IAAI,CAAC,OAAO,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;QACjF,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,GAAG;YACN,SAAS,EAAE,GAAG,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS;SACvF,CAAC,CAAC;KACmB,CAAC;AAC3B,CAAC;AAQD;;;;GAIG;AACH,SAAgB,qBAAqB,CACnC,UAAmB,EACnB,QAAmB;IAEnB,OAAO;QACL,aAAa,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;QAC9D,UAAU,EAAE,mBAAmB,CAAC,UAAmB,CAAC;QACpD,QAAQ,EAAG,QAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAU,CAAC,CAAC;KAC3F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Server as SocketServer } from 'socket.io';
|
|
2
|
+
/** Socket.IO event used for download task pushes. */
|
|
3
|
+
export declare const DOWNLOAD_EVENT = "download";
|
|
4
|
+
/**
|
|
5
|
+
* Realtime download task stream.
|
|
6
|
+
*
|
|
7
|
+
* Subscribes once to the task manager's coalesced change notifications and
|
|
8
|
+
* broadcasts a full snapshot (active task + recent in-memory tasks) to every
|
|
9
|
+
* connected client whenever something meaningful happens:
|
|
10
|
+
*
|
|
11
|
+
* - task starts / progress updates / logs append
|
|
12
|
+
* - completion, failure or user stop
|
|
13
|
+
*
|
|
14
|
+
* A slow safety-net interval also re-pushes while clients are connected, so a
|
|
15
|
+
* missed diff can never wedge the UI; hydration of finished history remains
|
|
16
|
+
* the job of GET /api/download/status.
|
|
17
|
+
*/
|
|
18
|
+
export declare function setupDownloadStatus(io: SocketServer): void;
|
|
19
|
+
//# sourceMappingURL=DownloadStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DownloadStatus.d.ts","sourceRoot":"","sources":["../../../src/webui/websocket/DownloadStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAKnD,qDAAqD;AACrD,eAAO,MAAM,cAAc,aAAa,CAAC;AAQzC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAwC1D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DOWNLOAD_EVENT = void 0;
|
|
4
|
+
exports.setupDownloadStatus = setupDownloadStatus;
|
|
5
|
+
const logger_1 = require("../../logger");
|
|
6
|
+
const DownloadTaskManager_1 = require("../services/DownloadTaskManager");
|
|
7
|
+
const task_serialize_1 = require("../utils/task-serialize");
|
|
8
|
+
/** Socket.IO event used for download task pushes. */
|
|
9
|
+
exports.DOWNLOAD_EVENT = 'download';
|
|
10
|
+
/**
|
|
11
|
+
* Realtime download task stream.
|
|
12
|
+
*
|
|
13
|
+
* Subscribes once to the task manager's coalesced change notifications and
|
|
14
|
+
* broadcasts a full snapshot (active task + recent in-memory tasks) to every
|
|
15
|
+
* connected client whenever something meaningful happens:
|
|
16
|
+
*
|
|
17
|
+
* - task starts / progress updates / logs append
|
|
18
|
+
* - completion, failure or user stop
|
|
19
|
+
*
|
|
20
|
+
* A slow safety-net interval also re-pushes while clients are connected, so a
|
|
21
|
+
* missed diff can never wedge the UI; hydration of finished history remains
|
|
22
|
+
* the job of GET /api/download/status.
|
|
23
|
+
*/
|
|
24
|
+
function setupDownloadStatus(io) {
|
|
25
|
+
const LOG_TAIL = 40;
|
|
26
|
+
const buildPayload = () => {
|
|
27
|
+
const active = DownloadTaskManager_1.downloadTaskManager.getActiveTask();
|
|
28
|
+
// Cap inline logs so frequent per-file progress cannot balloon frames;
|
|
29
|
+
// full history stays available via GET /api/download/logs.
|
|
30
|
+
let activeCapped = active;
|
|
31
|
+
if (active && Array.isArray(active.logs) && active.logs.length > LOG_TAIL) {
|
|
32
|
+
activeCapped = { ...active, logs: active.logs.slice(-LOG_TAIL) };
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
kind: 'snapshot',
|
|
36
|
+
status: (0, task_serialize_1.buildInMemorySnapshot)(activeCapped, DownloadTaskManager_1.downloadTaskManager.getAllTasks()),
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
const pushSnapshot = () => {
|
|
41
|
+
try {
|
|
42
|
+
io.emit(exports.DOWNLOAD_EVENT, buildPayload());
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
logger_1.logger.error('Failed to broadcast download snapshot', { error });
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
// Push on connect so fresh clients render current state instantly.
|
|
49
|
+
io.on('connection', (socket) => {
|
|
50
|
+
socket.emit(exports.DOWNLOAD_EVENT, buildPayload());
|
|
51
|
+
});
|
|
52
|
+
// React to task changes with small debounce handled inside the manager.
|
|
53
|
+
DownloadTaskManager_1.downloadTaskManager.subscribe(pushSnapshot);
|
|
54
|
+
// Safety net: one push per 5s while at least one client is listening.
|
|
55
|
+
setInterval(() => {
|
|
56
|
+
if (io.engine.clientsCount > 0) {
|
|
57
|
+
pushSnapshot();
|
|
58
|
+
}
|
|
59
|
+
}, 5000).unref();
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=DownloadStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DownloadStatus.js","sourceRoot":"","sources":["../../../src/webui/websocket/DownloadStatus.ts"],"names":[],"mappings":";;;AA4BA,kDAwCC;AAnED,yCAAsC;AACtC,yEAAsE;AACtE,4DAAwF;AAExF,qDAAqD;AACxC,QAAA,cAAc,GAAG,UAAU,CAAC;AAQzC;;;;;;;;;;;;;GAaG;AACH,SAAgB,mBAAmB,CAAC,EAAgB;IAClD,MAAM,QAAQ,GAAG,EAAE,CAAC;IAEpB,MAAM,YAAY,GAAG,GAAoB,EAAE;QACzC,MAAM,MAAM,GAAG,yCAAmB,CAAC,aAAa,EAAE,CAAC;QACnD,uEAAuE;QACvE,2DAA2D;QAC3D,IAAI,YAAY,GAAG,MAAM,CAAC;QAC1B,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC1E,YAAY,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAA,sCAAqB,EAAC,YAAY,EAAE,yCAAmB,CAAC,WAAW,EAAE,CAAC;YAC9E,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,sBAAc,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC;IAEF,mEAAmE;IACnE,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,CAAC,IAAI,CAAC,sBAAc,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,yCAAmB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAE5C,sEAAsE;IACtE,WAAW,CAAC,GAAG,EAAE;QACf,IAAI,EAAE,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAC/B,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pixivflow",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "🎨 智能的 Pixiv 自动化下载工具 - 支持批量下载插画和小说、定时任务、Docker部署 | Intelligent Pixiv Automation Downloader with batch download, scheduler, and Docker support",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
|
-
"url": "git+https://github.com/
|
|
7
|
+
"url": "git+https://github.com/redtidev1918/PixivFlow.git"
|
|
8
8
|
},
|
|
9
|
-
"homepage": "https://
|
|
9
|
+
"homepage": "https://redtidev1918.github.io/PixivFlow/",
|
|
10
10
|
"bugs": {
|
|
11
|
-
"url": "https://github.com/
|
|
11
|
+
"url": "https://github.com/redtidev1918/PixivFlow/issues"
|
|
12
12
|
},
|
|
13
|
-
"author": "
|
|
14
|
-
"license": "
|
|
13
|
+
"author": "redtidev1918",
|
|
14
|
+
"license": "MIT",
|
|
15
15
|
"main": "dist/index.js",
|
|
16
16
|
"bin": {
|
|
17
17
|
"pixivflow": "dist/index.js"
|
|
@@ -97,6 +97,10 @@
|
|
|
97
97
|
"kill-port": "^2.0.1",
|
|
98
98
|
"npm-run-all": "^4.1.5"
|
|
99
99
|
},
|
|
100
|
+
"overrides": {
|
|
101
|
+
"glob": "^10.3.10",
|
|
102
|
+
"basic-ftp": "^5.2.0"
|
|
103
|
+
},
|
|
100
104
|
"dependencies": {
|
|
101
105
|
"axios": "^1.13.2",
|
|
102
106
|
"better-sqlite3": "^11.10.0",
|
|
@@ -111,12 +115,9 @@
|
|
|
111
115
|
"undici": "^6.19.8"
|
|
112
116
|
},
|
|
113
117
|
"engines": {
|
|
114
|
-
"node": "^18.14.0 || ^20.0.0 || ^22.0.0
|
|
118
|
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0",
|
|
115
119
|
"npm": ">=9.0.0"
|
|
116
120
|
},
|
|
117
|
-
"overrides": {
|
|
118
|
-
"glob": "^10.3.10"
|
|
119
|
-
},
|
|
120
121
|
"files": [
|
|
121
122
|
"dist/",
|
|
122
123
|
"config/standalone.config.example.json",
|