summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2018-05-25 23:08:41 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2018-05-25 23:08:41 +0200
commit818ed0d5e2ff69bfb97074ea57b554bbc7bfcfe3 (patch)
tree5f4ee172a8ac32869ad709fe61ed81d64082dca0
parentd5db455f6050df3aade1c0bda977ec6942882aa7 (diff)
downloadsplus-818ed0d5e2ff69bfb97074ea57b554bbc7bfcfe3.tar.gz
splus-818ed0d5e2ff69bfb97074ea57b554bbc7bfcfe3.zip
Pass config as JSON file
-rw-r--r--config-example.json14
-rw-r--r--src/config.ts32
-rw-r--r--src/index.ts27
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);