summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2018-05-25 21:34:51 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2018-05-25 21:34:51 +0200
commitc2317850bade3b4f8d4dfbf637a4e7f0428fe944 (patch)
tree84de82c6dcd99c3b68af0f8704bc873d8f226f3a
parent3aa3f9f66cbb7c77c44eab53767c77811db50d79 (diff)
downloadsplus-c2317850bade3b4f8d4dfbf637a4e7f0428fe944.tar.gz
splus-c2317850bade3b4f8d4dfbf637a4e7f0428fe944.zip
Support multiple courses
-rw-r--r--etc/.gitkeep0
-rw-r--r--src/config.ts25
-rw-r--r--src/index.ts7
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);