-
Notifications
You must be signed in to change notification settings - Fork 0
/
autopilot.ts
108 lines (98 loc) · 3.05 KB
/
autopilot.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import BroadcastSchema from "./src/broadcast-schema";
import BroadcastSchedule from "./src/broadcast-schedule";
import BroadcastRecorder from "./src/broadcast-recorder";
import { DateTime } from "luxon";
import "dotenv/config";
import { timeFormats } from "./src/helper/helper";
import ApiConnectorWelocal from "./src/api-connector-welocal";
import ScheduleExport from "./src/schedule-export";
const schema = new BroadcastSchema({
schemaFile: process.env.BROADCAST_SCHEMA_FILE,
});
const now = DateTime.now();
if (now.weekday === 1) {
// Each Monday, we would like to export the schedule to FTP
const exporter = new ScheduleExport({
schedule: new BroadcastSchedule({
dateStart: now.plus({ days: 21 }).set({
hour: 0,
minute: 0,
second: 0,
millisecond: 0,
}),
dateEnd: now.plus({ days: 28 }).set({
hour: 0,
minute: 0,
second: 0,
millisecond: 0,
}),
schema: schema,
repeatPadding: 1,
locale: process.env.SCHEDULE_LOCALE,
repeatShort: process.env.REPEAT_SHORT,
repeatLong: process.env.REPEAT_LONG,
strings: {
each: process.env.SCHEDULE_INFO_EACH,
last: process.env.SCHEDULE_INFO_LAST,
and: process.env.SCHEDULE_INFO_AND,
monthly: process.env.SCHEDULE_INFO_MONTHLY,
always: process.env.SCHEDULE_INFO_ALWAYS,
from: process.env.SCHEDULE_INFO_FROM,
oclock: process.env.SCHEDULE_INFO_HOUR,
},
}),
mode: "welocal-json",
outDir: "json",
filenamePrefix: process.env.EXPORTER_FILENAME_PREFIX,
});
exporter
.write()
.toFTP()
.then((response) => {
console.log("[Export] exported to FTP");
});
}
const dataStartString = [
now.toFormat("yyyy-MM-dd"),
"T",
process.env.RECORDER_START_TIME,
].join("");
const dateStart = DateTime.fromISO(dataStartString);
const dateEnd = dateStart.plus({
hours: Number(process.env.RECORDER_DURATION),
});
const schedule = new BroadcastSchedule({
dateStart: dateStart,
dateEnd: dateEnd,
schema: schema,
locale: process.env.SCHEDULE_LOCALE,
repeatShort: process.env.REPEAT_SHORT,
repeatLong: process.env.REPEAT_LONG,
});
const recorder = new BroadcastRecorder({
schedule,
outDir: process.env.MP3_PATH,
streamUrl: process.env.RECORDER_STREAM_URL,
filenamePrefix: process.env.FILENAME_PREFIX,
delay: 5,
});
console.log("[Recorder] starts at " + dateStart.toFormat(timeFormats.human));
console.log("[Recorder] ends at " + dateEnd.toFormat(timeFormats.human));
const uploader = new ApiConnectorWelocal({
token: process.env.WELOCAL_API_TOKEN,
baseUrl: process.env.WELOCAL_API_URL,
uploadFilePath: process.env.MP3_PATH,
logFile: "upload-welocal",
filePrefix: process.env.FILENAME_PREFIX,
fileSuffix: ".mp3",
schedule,
});
recorder.on("finished", async (sourceFile, slot) => {
const uploadFile = uploader.getUploadFileInfo(sourceFile, slot);
uploader.upload(uploadFile).then((resp) => {
console.log("[welocal] upload finished!");
});
});
recorder.start().then((resp) => {
console.log("[Recorder] has finished!");
});