MCPcopy Create free account
hub / github.com/VirtualHotBar/NetMount / scheduleTask

Method scheduleTask

src/controller/task/scheduler.ts:23–69  ·  view source on GitHub ↗
(task: TaskListItem)

Source from the content-addressed store, hash-verified

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')}`

Callers 1

addTaskMethod · 0.95

Calls 3

executeTaskMethod · 0.95
cancelTaskMethod · 0.95
delTaskFunction · 0.90

Tested by

no test coverage detected