summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.ts2
-rw-r--r--src/index.ts23
2 files changed, 17 insertions, 8 deletions
diff --git a/src/config.ts b/src/config.ts
index 77ab16e..a4f6691 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -6,6 +6,7 @@ import {IcalSink} from './sinks/IcalSink';
export interface SplusConfig {
course: string;
sink: ISink;
+ prefetchWeeks: number;
lectureFilter?: ILectureFilter;
}
@@ -13,6 +14,7 @@ export interface SplusConfig {
export const config: SplusConfig = {
course: '#SPLUS7A3292',
sink: new IcalSink('docs/informatik1.ics'),
+ prefetchWeeks: 4,
lectureFilter: lecture => {
// Filter some lectures out
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);