(task: TaskListItem)
| 21 | } |
| 22 | |
| 23 | private async scheduleTask(task: TaskListItem) { |
| 24 | switch (task.run.mode) { |
| 25 | case 'start': |
| 26 | await this.executeTask(task) |
| 27 | this.cancelTask(task.name) |
| 28 | break |
| 29 | case 'disposable': |
| 30 | await this.executeTask(task) |
| 31 | this.cancelTask(task.name) |
| 32 | delTask(task.name) |
| 33 | break |
| 34 | case 'time': { |
| 35 | const executeTaskInterval = () => { |
| 36 | const now = new Date() |
| 37 | const scheduledTime = new Date(now) |
| 38 | scheduledTime.setDate(scheduledTime.getDate() + task.run.time.intervalDays) |
| 39 | scheduledTime.setHours(task.run.time.h, task.run.time.m, task.run.time.s) |
| 40 | |
| 41 | // 如果设置的时间比现在的时间早,则表示下一次执行是明天 |
| 42 | if (scheduledTime < now) { |
| 43 | scheduledTime.setDate(scheduledTime.getDate() + 1) |
| 44 | } |
| 45 | |
| 46 | const timeout = scheduledTime.getTime() - now.getTime() |
| 47 | if (timeout >= 0) { |
| 48 | task.run.runId = window.setTimeout(async () => { |
| 49 | await this.executeTask(task) |
| 50 | // 完成执行后,重新计划下一次执行 |
| 51 | executeTaskInterval() |
| 52 | }, timeout) |
| 53 | } |
| 54 | |
| 55 | task.runInfo.msg += '\r\n' + `${t('next_run_at')}: ${scheduledTime.toLocaleString()}` |
| 56 | } |
| 57 | executeTaskInterval() |
| 58 | break |
| 59 | } |
| 60 | case 'interval': { |
| 61 | const intervalMs = task.run.interval! * 1000 |
| 62 | task.run.runId = window.setInterval(async () => await this.executeTask(task), intervalMs) |
| 63 | //task.runInfo.msg += '\r\n'+`${t('next_run_at')}: ${new Date(Date.now() + intervalMs).toLocaleString()}`; |
| 64 | break |
| 65 | } |
| 66 | default: |
| 67 | console.error('Invalid task mode:', task.run.mode) |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | public async executeTask(task: TaskListItem) { |
| 72 | task.runInfo.msg += '\r\n' + `${new Date(Date.now()).toLocaleString()}: ${t('trigger_task')}` |
no test coverage detected