diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2018-05-25 23:08:41 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2018-05-25 23:08:41 +0200 |
| commit | 818ed0d5e2ff69bfb97074ea57b554bbc7bfcfe3 (patch) | |
| tree | 5f4ee172a8ac32869ad709fe61ed81d64082dca0 | |
| parent | d5db455f6050df3aade1c0bda977ec6942882aa7 (diff) | |
| download | splus-818ed0d5e2ff69bfb97074ea57b554bbc7bfcfe3.tar.gz splus-818ed0d5e2ff69bfb97074ea57b554bbc7bfcfe3.zip | |
Pass config as JSON file
| -rw-r--r-- | config-example.json | 14 | ||||
| -rw-r--r-- | src/config.ts | 32 | ||||
| -rw-r--r-- | src/index.ts | 27 |
3 files changed, 31 insertions, 42 deletions
diff --git a/config-example.json b/config-example.json new file mode 100644 index 0000000..62f703d --- /dev/null +++ b/config-example.json @@ -0,0 +1,14 @@ +{ + "courses": ["#SPLUS7A3292", "#SPLUS7A3280"], + "icsPath": "kalender/informatik1.ics", + "prefetchWeeks": 4, + + "titleWhitelist": [ + "Programmieren", + "Datenbanken", + "Diskrete Strukturen", + "Reservierung", + "Einführung", + "Grundlagen des Programmierens" + ] +} diff --git a/src/config.ts b/src/config.ts deleted file mode 100644 index 31ebf6b..0000000 --- a/src/config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {ISink} from './sinks/ISink'; -import {ILectureFilter} from './core/ILecture'; - -import {IcalSink} from './sinks/IcalSink'; - -export interface SplusConfig { - courses: string[]; - sink: ISink; - prefetchWeeks: number; - - lectureFilter?: ILectureFilter; -} - -export const config: SplusConfig = { - courses: ['#SPLUS7A3292', '#SPLUS7A3280'], - sink: new IcalSink('kalender/informatik1.ics'), - prefetchWeeks: 4, - - 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 a1e81a1..3d7e588 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,22 +1,29 @@ import * as moment from 'moment'; import * as BPromise from 'bluebird'; +import * as fs from 'fs'; -import {config} from './config'; import {SplusApi} from './core/SplusApi'; import {IEvent} from './core/IEvent'; import {ILecture} from './core/ILecture'; +import {IcalSink} from './sinks/IcalSink'; +import {GoogleCalendarSink} from './sinks/GoogleCalendarSink'; -const range = (upper: number): number[] => Array.from(Array(upper), (x, i) => i) +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]))); +const isIncluded = (s1) => (s2) => s1.includes(s2); +const anyTrue = (arr, cond) => arr.filter(cond).length > 0; + +async function main(configPath) { + const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); + const sink = config.icsPath == undefined? new GoogleCalendarSink() : new IcalSink(config.icsPath); -async function main(configCourses, configPrefetchWeeks, configFilter) { const baseDate = moment().startOf('week'); - await BPromise.map(xprod(configCourses, range(configPrefetchWeeks)), async ([configCourse, weeksAhead]) => { - const unfilteredLectures = await SplusApi.getData(configCourse, baseDate.weeks() + weeksAhead); - const lectures = unfilteredLectures.filter(configFilter); + await BPromise.map(xprod(config.courses, range(config.prefetchWeeks)), async ([course, weeksAhead]) => { + const unfilteredLectures = await SplusApi.getData(course, baseDate.weeks() + weeksAhead); + const lectures = unfilteredLectures.filter(lecture => anyTrue(config.titleWhitelist, isIncluded(lecture.title))); - await BPromise.map(lectures, async lec => { + await BPromise.map(lectures, async (lec: ILecture) => { let beginDate = baseDate.clone(); beginDate.add(moment.duration({ days: lec.day + 1, // for moment: 1 = Monday @@ -38,13 +45,13 @@ async function main(configCourses, configPrefetchWeeks, configFilter) { end: endDate.toDate(), }; - await config.sink.createEvent(event); + await sink.createEvent(event); console.log(lec.title, beginDate.toISOString(), endDate.toISOString()); }); }); - await config.sink.commit(); + await sink.commit(); } -main(config.courses, config.prefetchWeeks, config.lectureFilter).catch(console.log); +main(process.argv[2] || './config-example.json').catch(console.log); |
