diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2018-05-25 21:34:51 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2018-05-25 21:34:51 +0200 |
| commit | c2317850bade3b4f8d4dfbf637a4e7f0428fe944 (patch) | |
| tree | 84de82c6dcd99c3b68af0f8704bc873d8f226f3a | |
| parent | 3aa3f9f66cbb7c77c44eab53767c77811db50d79 (diff) | |
| download | splus-c2317850bade3b4f8d4dfbf637a4e7f0428fe944.tar.gz splus-c2317850bade3b4f8d4dfbf637a4e7f0428fe944.zip | |
Support multiple courses
| -rw-r--r-- | etc/.gitkeep | 0 | ||||
| -rw-r--r-- | src/config.ts | 25 | ||||
| -rw-r--r-- | src/index.ts | 7 |
3 files changed, 18 insertions, 14 deletions
diff --git a/etc/.gitkeep b/etc/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/etc/.gitkeep +++ /dev/null diff --git a/src/config.ts b/src/config.ts index a460ef2..31ebf6b 100644 --- a/src/config.ts +++ b/src/config.ts @@ -4,7 +4,7 @@ import {ILectureFilter} from './core/ILecture'; import {IcalSink} from './sinks/IcalSink'; export interface SplusConfig { - course: string; + courses: string[]; sink: ISink; prefetchWeeks: number; @@ -12,18 +12,21 @@ export interface SplusConfig { } export const config: SplusConfig = { - course: '#SPLUS7A3292', + courses: ['#SPLUS7A3292', '#SPLUS7A3280'], sink: new IcalSink('kalender/informatik1.ics'), prefetchWeeks: 4, - lectureFilter: lecture => { - // Filter some lectures out - if (lecture.title === '') return false; - if (lecture.title.indexOf('Mathe-Cafe') !== -1) return false; - if (lecture.title.indexOf('Mathe-Repetitorium') !== -1) return false; - if (lecture.title.indexOf('Informatik-Lounge') !== -1) return false; - if (lecture.title.indexOf('Grundlagen des Programmierens') !== -1) return false; - if (lecture.title.indexOf('Reservierung') !== -1) return false; - return lecture.title.indexOf('Kompetenzen') === -1; + lectureFilter: (lecture) => { + const whitelist = [ + 'Programmieren', + 'Datenbanken', + 'Diskrete Strukturen', + 'Reservierung', + 'Einführung', + 'Grundlagen des Programmierens', + ]; + const isIncluded = (s1) => (s2) => s1.includes(s2); + const anyTrue = (arr, cond) => arr.filter(cond).length > 0; + return anyTrue(whitelist, isIncluded(lecture.title)); } }; diff --git a/src/index.ts b/src/index.ts index 6de11de..a1e81a1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,11 +7,12 @@ import {IEvent} from './core/IEvent'; import {ILecture} from './core/ILecture'; const range = (upper: number): number[] => Array.from(Array(upper), (x, i) => i) +const xprod = (arr1, arr2) => [].concat(...arr1.map((e1) => arr2.map((e2) => [e1, e2]))); -async function main(configCourse, configPrefetchWeeks, configFilter) { +async function main(configCourses, configPrefetchWeeks, configFilter) { const baseDate = moment().startOf('week'); - await BPromise.map(range(configPrefetchWeeks), async weeksAhead => { + await BPromise.map(xprod(configCourses, range(configPrefetchWeeks)), async ([configCourse, weeksAhead]) => { const unfilteredLectures = await SplusApi.getData(configCourse, baseDate.weeks() + weeksAhead); const lectures = unfilteredLectures.filter(configFilter); @@ -46,4 +47,4 @@ async function main(configCourse, configPrefetchWeeks, configFilter) { await config.sink.commit(); } -main(config.course, config.prefetchWeeks, config.lectureFilter).catch(console.log); +main(config.courses, config.prefetchWeeks, config.lectureFilter).catch(console.log); |
