From 818ed0d5e2ff69bfb97074ea57b554bbc7bfcfe3 Mon Sep 17 00:00:00 2001 From: schneefux Date: Fri, 25 May 2018 23:08:41 +0200 Subject: Pass config as JSON file --- src/config.ts | 32 -------------------------------- src/index.ts | 27 +++++++++++++++++---------- 2 files changed, 17 insertions(+), 42 deletions(-) delete mode 100644 src/config.ts (limited to 'src') 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); -- cgit v1.3.1