pixivflow 2.0.38 → 2.0.39

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.
Files changed (110) hide show
  1. package/dist/commands/DownloadCommand.d.ts.map +1 -1
  2. package/dist/commands/DownloadCommand.js +50 -2
  3. package/dist/commands/DownloadCommand.js.map +1 -1
  4. package/dist/config/validation.d.ts.map +1 -1
  5. package/dist/config/validation.js +11 -3
  6. package/dist/config/validation.js.map +1 -1
  7. package/dist/index.js +37 -14
  8. package/dist/index.js.map +1 -1
  9. package/dist/package.json +1 -1
  10. package/dist/pixiv/AuthClient.d.ts.map +1 -1
  11. package/dist/pixiv/AuthClient.js +56 -7
  12. package/dist/pixiv/AuthClient.js.map +1 -1
  13. package/dist/storage/Database.d.ts +22 -0
  14. package/dist/storage/Database.d.ts.map +1 -1
  15. package/dist/storage/Database.js +19 -0
  16. package/dist/storage/Database.js.map +1 -1
  17. package/dist/storage/DatabaseMigration.d.ts.map +1 -1
  18. package/dist/storage/DatabaseMigration.js +29 -0
  19. package/dist/storage/DatabaseMigration.js.map +1 -1
  20. package/dist/storage/repositories/TaskHistoryRepository.d.ts +61 -0
  21. package/dist/storage/repositories/TaskHistoryRepository.d.ts.map +1 -0
  22. package/dist/storage/repositories/TaskHistoryRepository.js +171 -0
  23. package/dist/storage/repositories/TaskHistoryRepository.js.map +1 -0
  24. package/dist/utils/errors.js +11 -11
  25. package/dist/utils/errors.js.map +1 -1
  26. package/dist/utils/pixiv-url-parser.d.ts +7 -1
  27. package/dist/utils/pixiv-url-parser.d.ts.map +1 -1
  28. package/dist/utils/pixiv-url-parser.js +75 -8
  29. package/dist/utils/pixiv-url-parser.js.map +1 -1
  30. package/dist/utils/token-manager.d.ts.map +1 -1
  31. package/dist/utils/token-manager.js +73 -5
  32. package/dist/utils/token-manager.js.map +1 -1
  33. package/dist/webui/package.json +1 -1
  34. package/dist/webui/routes/download.d.ts.map +1 -1
  35. package/dist/webui/routes/download.js +2 -0
  36. package/dist/webui/routes/download.js.map +1 -1
  37. package/dist/webui/routes/handlers/download-basic-handlers.d.ts +11 -0
  38. package/dist/webui/routes/handlers/download-basic-handlers.d.ts.map +1 -1
  39. package/dist/webui/routes/handlers/download-basic-handlers.js +199 -8
  40. package/dist/webui/routes/handlers/download-basic-handlers.js.map +1 -1
  41. package/dist/webui/services/DownloadTaskManager.d.ts.map +1 -1
  42. package/dist/webui/services/DownloadTaskManager.js +75 -3
  43. package/dist/webui/services/DownloadTaskManager.js.map +1 -1
  44. package/package.json +1 -1
  45. package/dist/webui/assets/ActionButton-DWq-fh3_.js +0 -2
  46. package/dist/webui/assets/ActionButton-DWq-fh3_.js.map +0 -1
  47. package/dist/webui/assets/CheckCircleOutlined-Can0-7ew.js +0 -2
  48. package/dist/webui/assets/CheckCircleOutlined-Can0-7ew.js.map +0 -1
  49. package/dist/webui/assets/CloseCircleOutlined-DfRmL2eG.js +0 -2
  50. package/dist/webui/assets/CloseCircleOutlined-DfRmL2eG.js.map +0 -1
  51. package/dist/webui/assets/Config-D9TWUGQR.js +0 -16
  52. package/dist/webui/assets/Config-D9TWUGQR.js.map +0 -1
  53. package/dist/webui/assets/Dashboard-CaGAH0y2.js +0 -2
  54. package/dist/webui/assets/Dashboard-CaGAH0y2.js.map +0 -1
  55. package/dist/webui/assets/DeleteOutlined-u-P2SpoK.js +0 -2
  56. package/dist/webui/assets/DeleteOutlined-u-P2SpoK.js.map +0 -1
  57. package/dist/webui/assets/Download-D9E4xrnM.js +0 -2
  58. package/dist/webui/assets/Download-D9E4xrnM.js.map +0 -1
  59. package/dist/webui/assets/Files-CKyc_PdW.js +0 -5
  60. package/dist/webui/assets/Files-CKyc_PdW.js.map +0 -1
  61. package/dist/webui/assets/PictureOutlined-C8Lbucj1.js +0 -2
  62. package/dist/webui/assets/PictureOutlined-C8Lbucj1.js.map +0 -1
  63. package/dist/webui/assets/SortDescendingOutlined-CR-hdhyW.js +0 -2
  64. package/dist/webui/assets/SortDescendingOutlined-CR-hdhyW.js.map +0 -1
  65. package/dist/webui/assets/ThunderboltOutlined-CiiB2de5.js +0 -2
  66. package/dist/webui/assets/ThunderboltOutlined-CiiB2de5.js.map +0 -1
  67. package/dist/webui/assets/UrlDownload-ClkUOXN_.js +0 -3
  68. package/dist/webui/assets/UrlDownload-ClkUOXN_.js.map +0 -1
  69. package/dist/webui/assets/dateUtils-CBk8bEa_.js +0 -2
  70. package/dist/webui/assets/dateUtils-CBk8bEa_.js.map +0 -1
  71. package/dist/webui/assets/errorCodeTranslator-DWsWq6B3.js +0 -3
  72. package/dist/webui/assets/errorCodeTranslator-DWsWq6B3.js.map +0 -1
  73. package/dist/webui/assets/index-BFgUdwJv.js +0 -214
  74. package/dist/webui/assets/index-BFgUdwJv.js.map +0 -1
  75. package/dist/webui/assets/index-CN3FylAF.js +0 -2
  76. package/dist/webui/assets/index-CN3FylAF.js.map +0 -1
  77. package/dist/webui/assets/index-CSoUPZat.js +0 -2
  78. package/dist/webui/assets/index-CSoUPZat.js.map +0 -1
  79. package/dist/webui/assets/index-CiHwNwrk.js +0 -19
  80. package/dist/webui/assets/index-CiHwNwrk.js.map +0 -1
  81. package/dist/webui/assets/index-DHwJxrFi.css +0 -1
  82. package/dist/webui/assets/index-DTU-FGA4.js +0 -2
  83. package/dist/webui/assets/index-DTU-FGA4.js.map +0 -1
  84. package/dist/webui/assets/index-DjpD0HQ5.js +0 -2
  85. package/dist/webui/assets/index-DjpD0HQ5.js.map +0 -1
  86. package/dist/webui/assets/index-Dycn6xoz.js +0 -2
  87. package/dist/webui/assets/index-Dycn6xoz.js.map +0 -1
  88. package/dist/webui/assets/index-G0EJCamt.js +0 -22
  89. package/dist/webui/assets/index-G0EJCamt.js.map +0 -1
  90. package/dist/webui/assets/index-WaraZQH0.js +0 -2
  91. package/dist/webui/assets/index-WaraZQH0.js.map +0 -1
  92. package/dist/webui/assets/index-k2rGFxEM.js +0 -8
  93. package/dist/webui/assets/index-k2rGFxEM.js.map +0 -1
  94. package/dist/webui/assets/index-lwTtspUb.js +0 -14
  95. package/dist/webui/assets/index-lwTtspUb.js.map +0 -1
  96. package/dist/webui/assets/index-pT0W4KjK.js +0 -47
  97. package/dist/webui/assets/index-pT0W4KjK.js.map +0 -1
  98. package/dist/webui/assets/index-wvielV9A.js +0 -2
  99. package/dist/webui/assets/index-wvielV9A.js.map +0 -1
  100. package/dist/webui/assets/row-FRqVdQDX.js +0 -20
  101. package/dist/webui/assets/row-FRqVdQDX.js.map +0 -1
  102. package/dist/webui/assets/useAuth-BMt6dHSB.js +0 -9
  103. package/dist/webui/assets/useAuth-BMt6dHSB.js.map +0 -1
  104. package/dist/webui/assets/useConfig-29Ugtjk4.js +0 -9
  105. package/dist/webui/assets/useConfig-29Ugtjk4.js.map +0 -1
  106. package/dist/webui/assets/useDownload-Dt6lsP8S.js +0 -2
  107. package/dist/webui/assets/useDownload-Dt6lsP8S.js.map +0 -1
  108. package/dist/webui/assets/useErrorHandler-DWHs3RlU.js +0 -84
  109. package/dist/webui/assets/useErrorHandler-DWHs3RlU.js.map +0 -1
  110. package/dist/webui/index.html +0 -15
@@ -16,6 +16,7 @@ const node_fs_1 = require("node:fs");
16
16
  const node_path_1 = require("node:path");
17
17
  const logger_1 = require("../logger");
18
18
  const TOKEN_FILE_NAME = '.pixiv-refresh-token';
19
+ const TOKEN_BACKUP_FILE_NAME = '.pixiv-refresh-token.backup';
19
20
  const PLACEHOLDER_TOKEN = 'YOUR_REFRESH_TOKEN';
20
21
  /**
21
22
  * Get the token storage directory based on database path
@@ -46,6 +47,55 @@ function isPlaceholderToken(token) {
46
47
  }
47
48
  return token.trim() === '' || token === PLACEHOLDER_TOKEN || token.length < 10;
48
49
  }
50
+ /**
51
+ * Create a backup of the current token file
52
+ * @param databasePath Optional database path to determine storage location
53
+ */
54
+ function backupToken(databasePath) {
55
+ try {
56
+ const tokenPath = getTokenFilePath(databasePath);
57
+ if (!(0, node_fs_1.existsSync)(tokenPath)) {
58
+ return; // No token to backup
59
+ }
60
+ const backupPath = (0, node_path_1.join)((0, node_path_1.dirname)(tokenPath), TOKEN_BACKUP_FILE_NAME);
61
+ (0, node_fs_1.copyFileSync)(tokenPath, backupPath);
62
+ logger_1.logger.debug('Token backup created', { backupPath });
63
+ }
64
+ catch (error) {
65
+ logger_1.logger.warn('Failed to create token backup', {
66
+ error: error instanceof Error ? error.message : String(error),
67
+ });
68
+ // Don't throw - backup is optional
69
+ }
70
+ }
71
+ /**
72
+ * Restore token from backup if main token file is missing or corrupted
73
+ * @param databasePath Optional database path to determine storage location
74
+ * @returns The restored token, or null if restoration failed
75
+ */
76
+ function restoreTokenFromBackup(databasePath) {
77
+ try {
78
+ const backupPath = (0, node_path_1.join)(getTokenStorageDir(databasePath), TOKEN_BACKUP_FILE_NAME);
79
+ if (!(0, node_fs_1.existsSync)(backupPath)) {
80
+ return null;
81
+ }
82
+ const token = (0, node_fs_1.readFileSync)(backupPath, 'utf-8').trim();
83
+ if (isPlaceholderToken(token)) {
84
+ return null;
85
+ }
86
+ logger_1.logger.info('Token restored from backup', { backupPath });
87
+ // Restore the main token file
88
+ const tokenPath = getTokenFilePath(databasePath);
89
+ (0, node_fs_1.writeFileSync)(tokenPath, token, 'utf-8');
90
+ return token;
91
+ }
92
+ catch (error) {
93
+ logger_1.logger.warn('Failed to restore token from backup', {
94
+ error: error instanceof Error ? error.message : String(error),
95
+ });
96
+ return null;
97
+ }
98
+ }
49
99
  /**
50
100
  * Save refresh token to unified storage
51
101
  * @param refreshToken The refresh token to save
@@ -63,15 +113,28 @@ function saveTokenToStorage(refreshToken, databasePath) {
63
113
  if (!(0, node_fs_1.existsSync)(storageDir)) {
64
114
  (0, node_fs_1.mkdirSync)(storageDir, { recursive: true });
65
115
  }
116
+ // Create backup of existing token before overwriting
117
+ if ((0, node_fs_1.existsSync)(tokenPath)) {
118
+ backupToken(databasePath);
119
+ }
66
120
  // Save token to file (simple text file, no JSON wrapper needed)
67
121
  (0, node_fs_1.writeFileSync)(tokenPath, refreshToken.trim(), 'utf-8');
68
122
  logger_1.logger.debug('Token saved to unified storage', { tokenPath });
123
+ // Verify the write was successful
124
+ if (!(0, node_fs_1.existsSync)(tokenPath)) {
125
+ throw new Error('Token file was not created successfully');
126
+ }
127
+ // Double-check the content
128
+ const savedToken = (0, node_fs_1.readFileSync)(tokenPath, 'utf-8').trim();
129
+ if (savedToken !== refreshToken.trim()) {
130
+ throw new Error('Saved token does not match input token');
131
+ }
69
132
  }
70
133
  catch (error) {
71
- logger_1.logger.warn('Failed to save token to unified storage', {
134
+ logger_1.logger.error('Failed to save token to unified storage', {
72
135
  error: error instanceof Error ? error.message : String(error),
73
136
  });
74
- // Don't throw - this is a non-critical operation
137
+ // Don't throw - this is a non-critical operation, but log as error
75
138
  }
76
139
  }
77
140
  /**
@@ -83,11 +146,15 @@ function loadTokenFromStorage(databasePath) {
83
146
  try {
84
147
  const tokenPath = getTokenFilePath(databasePath);
85
148
  if (!(0, node_fs_1.existsSync)(tokenPath)) {
86
- return null;
149
+ // Try to restore from backup
150
+ logger_1.logger.debug('Token file not found, attempting to restore from backup');
151
+ return restoreTokenFromBackup(databasePath);
87
152
  }
88
153
  const token = (0, node_fs_1.readFileSync)(tokenPath, 'utf-8').trim();
89
154
  if (isPlaceholderToken(token)) {
90
- return null;
155
+ // Token is invalid, try backup
156
+ logger_1.logger.debug('Token file contains placeholder, attempting to restore from backup');
157
+ return restoreTokenFromBackup(databasePath);
91
158
  }
92
159
  logger_1.logger.debug('Token loaded from unified storage', { tokenPath });
93
160
  return token;
@@ -96,7 +163,8 @@ function loadTokenFromStorage(databasePath) {
96
163
  logger_1.logger.warn('Failed to load token from unified storage', {
97
164
  error: error instanceof Error ? error.message : String(error),
98
165
  });
99
- return null;
166
+ // Try backup as last resort
167
+ return restoreTokenFromBackup(databasePath);
100
168
  }
101
169
  }
102
170
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/utils/token-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/utils/token-manager.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "pixivflow-webui-backend",
4
- "version": "2.0.38",
4
+ "version": "2.0.39",
5
5
  "description": "PixivFlow WebUI Backend - CommonJS module"
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/webui/routes/download.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAyBxB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/webui/routes/download.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA2BxB,eAAe,MAAM,CAAC"}
@@ -45,6 +45,8 @@ router.post('/stop', basicHandlers.stopDownload);
45
45
  router.get('/status', basicHandlers.getDownloadStatus);
46
46
  router.get('/logs', basicHandlers.getDownloadLogs);
47
47
  router.get('/history', basicHandlers.getDownloadHistory);
48
+ router.delete('/history/:taskId', basicHandlers.deleteTaskHistory);
49
+ router.delete('/history', basicHandlers.deleteAllTaskHistory);
48
50
  // Batch download operations
49
51
  router.post('/run-all', batchHandlers.runAllDownloads);
50
52
  router.post('/random', batchHandlers.randomDownload);
@@ -1 +1 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/webui/routes/download.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAiC;AACjC,kFAAoE;AACpE,4FAA8E;AAC9E,kFAAoE;AACpE,8EAAgE;AAEhE,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,2BAA2B;AAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;AACnD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;AACjD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACvD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;AACnD,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;AAEzD,4BAA4B;AAC5B,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;AACvD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;AAErD,0BAA0B;AAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;AACjD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAC7D,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAEhD,8BAA8B;AAC9B,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;AAC1E,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;AACvE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;AAE1D,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/webui/routes/download.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAiC;AACjC,kFAAoE;AACpE,4FAA8E;AAC9E,kFAAoE;AACpE,8EAAgE;AAEhE,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,2BAA2B;AAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;AACnD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;AACjD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACvD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;AACnD,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;AAE9D,4BAA4B;AAC5B,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;AACvD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;AAErD,0BAA0B;AAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;AACjD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAC7D,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAEhD,8BAA8B;AAC9B,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;AAC1E,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;AACvE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;AAE1D,kBAAe,MAAM,CAAC"}
@@ -13,6 +13,7 @@ export declare function stopDownload(req: Request, res: Response): Promise<void>
13
13
  /**
14
14
  * GET /api/download/status
15
15
  * Get download task status
16
+ * Includes both in-memory tasks and database history
16
17
  */
17
18
  export declare function getDownloadStatus(req: Request, res: Response): Promise<void>;
18
19
  /**
@@ -20,6 +21,16 @@ export declare function getDownloadStatus(req: Request, res: Response): Promise<
20
21
  * Get logs for a specific task
21
22
  */
22
23
  export declare function getDownloadLogs(req: Request, res: Response): Promise<void>;
24
+ /**
25
+ * DELETE /api/download/history/:taskId
26
+ * Delete a task history record by task ID
27
+ */
28
+ export declare function deleteTaskHistory(req: Request, res: Response): Promise<void>;
29
+ /**
30
+ * DELETE /api/download/history
31
+ * Delete all task history records
32
+ */
33
+ export declare function deleteAllTaskHistory(req: Request, res: Response): Promise<void>;
23
34
  /**
24
35
  * GET /api/download/history
25
36
  * Get download history from database
@@ -1 +1 @@
1
- {"version":3,"file":"download-basic-handlers.d.ts","sourceRoot":"","sources":["../../../../src/webui/routes/handlers/download-basic-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkE5C;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B9E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB7E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAmClF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChF;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DnF"}
1
+ {"version":3,"file":"download-basic-handlers.d.ts","sourceRoot":"","sources":["../../../../src/webui/routes/handlers/download-basic-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkE5C;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B9E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB7E;AAsBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoGlF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DlF;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDrF;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DnF"}
@@ -4,6 +4,8 @@ exports.startDownload = startDownload;
4
4
  exports.stopDownload = stopDownload;
5
5
  exports.getDownloadStatus = getDownloadStatus;
6
6
  exports.getDownloadLogs = getDownloadLogs;
7
+ exports.deleteTaskHistory = deleteTaskHistory;
8
+ exports.deleteAllTaskHistory = deleteAllTaskHistory;
7
9
  exports.getDownloadHistory = getDownloadHistory;
8
10
  const logger_1 = require("../../../logger");
9
11
  const DownloadTaskManager_1 = require("../../services/DownloadTaskManager");
@@ -124,40 +126,113 @@ async function stopDownload(req, res) {
124
126
  });
125
127
  }
126
128
  }
129
+ /**
130
+ * Convert database task history record to TaskStatus
131
+ */
132
+ function deserializeTaskHistory(record) {
133
+ return {
134
+ taskId: record.taskId,
135
+ status: record.status,
136
+ startTime: new Date(record.startTime),
137
+ endTime: record.endTime ? new Date(record.endTime) : undefined,
138
+ error: record.error || undefined,
139
+ targetId: record.targetId || undefined,
140
+ progress: record.progressCurrent !== null && record.progressTotal !== null ? {
141
+ current: record.progressCurrent,
142
+ total: record.progressTotal,
143
+ message: record.progressMessage || undefined,
144
+ } : undefined,
145
+ logs: [], // Database doesn't store logs
146
+ };
147
+ }
127
148
  /**
128
149
  * GET /api/download/status
129
150
  * Get download task status
151
+ * Includes both in-memory tasks and database history
130
152
  */
131
153
  async function getDownloadStatus(req, res) {
154
+ let database = null;
132
155
  try {
133
156
  const { taskId } = req.query;
134
157
  if (taskId) {
158
+ // First check in-memory tasks
135
159
  const status = DownloadTaskManager_1.downloadTaskManager.getTaskStatus(taskId);
136
- if (!status) {
137
- res.status(404).json({
138
- data: {
139
- errorCode: error_codes_1.ErrorCode.DOWNLOAD_TASK_NOT_FOUND,
140
- },
160
+ if (status) {
161
+ res.json({
162
+ data: serializeTaskStatus(status),
141
163
  });
142
164
  return;
143
165
  }
144
- res.json({
145
- data: serializeTaskStatus(status),
166
+ // If not found in memory, check database
167
+ const configPath = (0, config_1.getConfigPath)();
168
+ const config = (0, config_1.loadConfig)(configPath);
169
+ database = new Database_1.Database(config.storage.databasePath);
170
+ database.migrate();
171
+ const historyRecord = database.getTaskHistory(taskId);
172
+ if (historyRecord) {
173
+ const historyStatus = deserializeTaskHistory(historyRecord);
174
+ res.json({
175
+ data: serializeTaskStatus(historyStatus),
176
+ });
177
+ database.close();
178
+ database = null;
179
+ return;
180
+ }
181
+ database.close();
182
+ database = null;
183
+ res.status(404).json({
184
+ data: {
185
+ errorCode: error_codes_1.ErrorCode.DOWNLOAD_TASK_NOT_FOUND,
186
+ },
146
187
  });
147
188
  return;
148
189
  }
149
190
  // Return all tasks and active task info
150
191
  const allTasks = DownloadTaskManager_1.downloadTaskManager.getAllTasks();
151
192
  const activeTask = DownloadTaskManager_1.downloadTaskManager.getActiveTask();
193
+ // Load task history from database and merge with in-memory tasks
194
+ const configPath = (0, config_1.getConfigPath)();
195
+ const config = (0, config_1.loadConfig)(configPath);
196
+ database = new Database_1.Database(config.storage.databasePath);
197
+ database.migrate();
198
+ const historyTasks = database.getAllTaskHistory(100);
199
+ const historyTaskMap = new Map();
200
+ // Convert history records to TaskStatus format
201
+ for (const historyRecord of historyTasks) {
202
+ const historyStatus = deserializeTaskHistory(historyRecord);
203
+ historyTaskMap.set(historyRecord.taskId, historyStatus);
204
+ }
205
+ // Merge: in-memory tasks take precedence (they're more up-to-date)
206
+ const allTasksMap = new Map();
207
+ // First add database history
208
+ for (const [taskId, task] of historyTaskMap) {
209
+ allTasksMap.set(taskId, task);
210
+ }
211
+ // Then add/update with in-memory tasks (these are more current)
212
+ for (const task of allTasks) {
213
+ allTasksMap.set(task.taskId, task);
214
+ }
215
+ // Convert to array and sort by start time (newest first)
216
+ const mergedTasks = Array.from(allTasksMap.values()).sort((a, b) => b.startTime.getTime() - a.startTime.getTime());
217
+ database.close();
218
+ database = null;
152
219
  res.json({
153
220
  data: {
154
221
  activeTask: serializeTaskStatus(activeTask),
155
- allTasks: allTasks.map(serializeTaskStatus),
222
+ allTasks: mergedTasks.map(serializeTaskStatus),
156
223
  hasActiveTask: DownloadTaskManager_1.downloadTaskManager.hasActiveTask(),
157
224
  },
158
225
  });
159
226
  }
160
227
  catch (error) {
228
+ if (database) {
229
+ try {
230
+ database.close();
231
+ }
232
+ catch (closeError) {
233
+ // Ignore close errors
234
+ }
235
+ }
161
236
  logger_1.logger.error('Failed to get download status', { error });
162
237
  res.status(500).json({ errorCode: error_codes_1.ErrorCode.DOWNLOAD_STATUS_FAILED });
163
238
  }
@@ -194,6 +269,122 @@ async function getDownloadLogs(req, res) {
194
269
  });
195
270
  }
196
271
  }
272
+ /**
273
+ * DELETE /api/download/history/:taskId
274
+ * Delete a task history record by task ID
275
+ */
276
+ async function deleteTaskHistory(req, res) {
277
+ let database = null;
278
+ try {
279
+ const { taskId } = req.params;
280
+ if (!taskId) {
281
+ res.status(400).json({
282
+ data: {
283
+ success: false,
284
+ errorCode: error_codes_1.ErrorCode.INVALID_REQUEST,
285
+ message: 'Task ID is required',
286
+ },
287
+ });
288
+ return;
289
+ }
290
+ const configPath = (0, config_1.getConfigPath)();
291
+ const config = (0, config_1.loadConfig)(configPath);
292
+ database = new Database_1.Database(config.storage.databasePath);
293
+ database.migrate();
294
+ const result = database.deleteTaskHistory(taskId);
295
+ database.close();
296
+ database = null;
297
+ if (result.success) {
298
+ res.json({
299
+ data: {
300
+ success: true,
301
+ message: 'Task history deleted successfully',
302
+ },
303
+ });
304
+ }
305
+ else {
306
+ res.status(404).json({
307
+ data: {
308
+ success: false,
309
+ errorCode: error_codes_1.ErrorCode.DOWNLOAD_TASK_NOT_FOUND,
310
+ message: result.message || 'Task history not found',
311
+ },
312
+ });
313
+ }
314
+ }
315
+ catch (error) {
316
+ if (database) {
317
+ try {
318
+ database.close();
319
+ }
320
+ catch (closeError) {
321
+ // Ignore close errors
322
+ }
323
+ }
324
+ const errorMessage = error instanceof Error ? error.message : String(error);
325
+ logger_1.logger.error('Failed to delete task history', { error: errorMessage });
326
+ res.status(500).json({
327
+ data: {
328
+ success: false,
329
+ errorCode: error_codes_1.ErrorCode.DOWNLOAD_HISTORY_FAILED,
330
+ message: errorMessage,
331
+ },
332
+ });
333
+ }
334
+ }
335
+ /**
336
+ * DELETE /api/download/history
337
+ * Delete all task history records
338
+ */
339
+ async function deleteAllTaskHistory(req, res) {
340
+ let database = null;
341
+ try {
342
+ const configPath = (0, config_1.getConfigPath)();
343
+ const config = (0, config_1.loadConfig)(configPath);
344
+ database = new Database_1.Database(config.storage.databasePath);
345
+ database.migrate();
346
+ const result = database.deleteAllTaskHistory();
347
+ database.close();
348
+ database = null;
349
+ if (result.success) {
350
+ res.json({
351
+ data: {
352
+ success: true,
353
+ deletedCount: result.deletedCount,
354
+ message: `Successfully deleted ${result.deletedCount} task history records`,
355
+ },
356
+ });
357
+ }
358
+ else {
359
+ res.status(500).json({
360
+ data: {
361
+ success: false,
362
+ errorCode: error_codes_1.ErrorCode.DOWNLOAD_HISTORY_FAILED,
363
+ message: result.message || 'Failed to delete task history',
364
+ },
365
+ });
366
+ }
367
+ }
368
+ catch (error) {
369
+ if (database) {
370
+ try {
371
+ database.close();
372
+ }
373
+ catch (closeError) {
374
+ // Ignore close errors
375
+ }
376
+ }
377
+ const errorMessage = error instanceof Error ? error.message : String(error);
378
+ logger_1.logger.error('Failed to delete all task history', { error: errorMessage });
379
+ res.status(500).json({
380
+ data: {
381
+ success: false,
382
+ errorCode: error_codes_1.ErrorCode.DOWNLOAD_HISTORY_FAILED,
383
+ message: errorMessage,
384
+ },
385
+ });
386
+ }
387
+ }
197
388
  /**
198
389
  * GET /api/download/history
199
390
  * Get download history from database
@@ -1 +1 @@
1
- {"version":3,"file":"download-basic-handlers.js","sourceRoot":"","sources":["../../../../src/webui/routes/handlers/download-basic-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download-basic-handlers.js","sourceRoot":"","sources":["../../../../src/webui/routes/handlers/download-basic-handlers.ts"],"names":[],"mappings":"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"}
@@ -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;AAG3E,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,CAMF;IAEhB;;;;;;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;IAyHhB;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B7C;;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;IAOpG;;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;IAwCzF;;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"}
1
+ {"version":3,"file":"DownloadTaskManager.d.ts","sourceRoot":"","sources":["../../../src/webui/services/DownloadTaskManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAA6B,MAAM,cAAc,CAAC;AAG3E,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,CAMF;IAEhB;;;;;;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;IAmKhB;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C7C;;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;IAuBpG;;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;IAwCzF;;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"}
@@ -82,6 +82,17 @@ class DownloadTaskManager {
82
82
  };
83
83
  this.tasks.set(taskId, taskStatus);
84
84
  this.taskLogs.set(taskId, []);
85
+ // Save task history to database
86
+ try {
87
+ database.saveTaskHistory(taskId, {
88
+ status: 'running',
89
+ startTime: taskStatus.startTime,
90
+ targetId,
91
+ });
92
+ }
93
+ catch (error) {
94
+ logger_1.logger.warn('Failed to save task history to database', { taskId, error });
95
+ }
85
96
  // Add initial log entry
86
97
  this.addLog(taskId, 'info', `下载任务 ${taskId} 已启动`);
87
98
  const promise = (async () => {
@@ -91,6 +102,20 @@ class DownloadTaskManager {
91
102
  await downloadManager.runAllTargets();
92
103
  taskStatus.status = 'completed';
93
104
  taskStatus.endTime = new Date();
105
+ // Update task history in database
106
+ try {
107
+ database.saveTaskHistory(taskId, {
108
+ status: 'completed',
109
+ startTime: taskStatus.startTime,
110
+ endTime: taskStatus.endTime,
111
+ progressCurrent: taskStatus.progress?.current,
112
+ progressTotal: taskStatus.progress?.total,
113
+ progressMessage: taskStatus.progress?.message,
114
+ });
115
+ }
116
+ catch (error) {
117
+ logger_1.logger.warn('Failed to update task history in database', { taskId, error });
118
+ }
94
119
  this.addLog(taskId, 'info', '下载任务完成');
95
120
  logger_1.logger.info(`Download task ${taskId} completed`);
96
121
  }
@@ -99,6 +124,21 @@ class DownloadTaskManager {
99
124
  const errorMessage = error instanceof Error ? error.message : String(error);
100
125
  taskStatus.error = errorMessage;
101
126
  taskStatus.endTime = new Date();
127
+ // Update task history in database
128
+ try {
129
+ database.saveTaskHistory(taskId, {
130
+ status: 'failed',
131
+ startTime: taskStatus.startTime,
132
+ endTime: taskStatus.endTime,
133
+ error: errorMessage,
134
+ progressCurrent: taskStatus.progress?.current,
135
+ progressTotal: taskStatus.progress?.total,
136
+ progressMessage: taskStatus.progress?.message,
137
+ });
138
+ }
139
+ catch (dbError) {
140
+ logger_1.logger.warn('Failed to update task history in database', { taskId, error: dbError });
141
+ }
102
142
  this.addLog(taskId, 'error', `下载任务失败: ${errorMessage}`);
103
143
  if (error instanceof Error && error.stack) {
104
144
  this.addLog(taskId, 'error', `错误堆栈: ${error.stack}`);
@@ -135,12 +175,28 @@ class DownloadTaskManager {
135
175
  throw new Error(`Task ${taskId} is not running`);
136
176
  }
137
177
  if (this.activeTask && this.activeTask.taskId === taskId) {
178
+ const database = this.activeTask.database;
179
+ // Update task history in database BEFORE closing
180
+ try {
181
+ task.status = 'stopped';
182
+ task.endTime = new Date();
183
+ database.saveTaskHistory(taskId, {
184
+ status: 'stopped',
185
+ startTime: task.startTime,
186
+ endTime: task.endTime,
187
+ error: 'Task stopped by user',
188
+ progressCurrent: task.progress?.current,
189
+ progressTotal: task.progress?.total,
190
+ progressMessage: task.progress?.message,
191
+ });
192
+ }
193
+ catch (error) {
194
+ logger_1.logger.warn('Failed to update task history in database', { taskId, error });
195
+ }
138
196
  // Signal abort
139
197
  this.activeTask.abortController.abort();
140
198
  // Close database
141
- this.activeTask.database.close();
142
- task.status = 'stopped';
143
- task.endTime = new Date();
199
+ database.close();
144
200
  this.addLog(taskId, 'warn', '下载任务已停止');
145
201
  this.activeTask = null;
146
202
  logger_1.logger.info(`Download task ${taskId} stopped`);
@@ -180,6 +236,22 @@ class DownloadTaskManager {
180
236
  const task = this.tasks.get(taskId);
181
237
  if (task) {
182
238
  task.progress = progress;
239
+ // Update task history in database (only if task is running)
240
+ if (task.status === 'running' && this.activeTask) {
241
+ try {
242
+ this.activeTask.database.saveTaskHistory(taskId, {
243
+ status: 'running',
244
+ startTime: task.startTime,
245
+ progressCurrent: progress.current,
246
+ progressTotal: progress.total,
247
+ progressMessage: progress.message,
248
+ });
249
+ }
250
+ catch (error) {
251
+ // Don't log as error - progress updates are frequent and non-critical
252
+ logger_1.logger.debug('Failed to update task progress in database', { taskId });
253
+ }
254
+ }
183
255
  }
184
256
  }
185
257
  /**