diff options
Diffstat (limited to 'src/index.ts')
| -rw-r--r-- | src/index.ts | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/index.ts b/src/index.ts index 4fa7c20..ce1a70a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,29 +1,36 @@ import * as moment from 'moment'; +import * as BPromise from 'bluebird'; import {config} from './config'; import {SplusApi} from './core/SplusApi'; import {IEvent} from './core/IEvent'; +import {ILecture} from './core/ILecture'; -async function main() { +const flatten = (array) => [].concat(...array); +const range = (upper: number): number[] => Array.from(Array(upper), (x, i) => i) + +async function main(configCourse, configPrefetchWeeks, configFilter) { const baseDate = moment().startOf('week'); - const unfilteredLectures = await SplusApi.getData(config.course, baseDate.weeks()); - const lectures = unfilteredLectures.filter(config.lectureFilter); - for (let i = 0; i < lectures.length; i++) { - const lec = lectures[i]; + const unfilteredLectureChunks: ILecture[][] = await BPromise.map(range(configPrefetchWeeks), + async week => await SplusApi.getData(configCourse, baseDate.weeks() + week) + ); + const lectures: ILecture[] = flatten(unfilteredLectureChunks).filter(configFilter); + await BPromise.map(lectures, async (lec: ILecture, weeksAhead) => { let beginDate = baseDate.clone(); beginDate.add(moment.duration({ days: lec.day + 1, // for moment: 1 = Monday hours: lec.begin, + weeks: weeksAhead, })); let endDate = baseDate.clone(); endDate.add(moment.duration({ days: lec.day + 1, hours: lec.end, + weeks: weeksAhead, })); - const event: IEvent = { summary: lec.title, description: lec.lecturer + (lec.info !== '' ? ' - ' : '') + lec.info, @@ -35,9 +42,9 @@ async function main() { await config.sink.createEvent(event); console.log(lec.title, beginDate.toISOString(), endDate.toISOString()); - } + }); await config.sink.commit(); } -main(); +main(config.course, config.prefetchWeeks, config.lectureFilter).catch(console.log); |
