From 7990ea9a0d973172d5935bf25e349969741294a9 Mon Sep 17 00:00:00 2001
From: Julian Rother <julianr@fsmpi.rwth-aachen.de>
Date: Mon, 12 Sep 2016 02:02:32 +0200
Subject: [PATCH] Implemented simple meeting importer that works with sogo and
 generates psas

---
 db_schema.sql |  2 +-
 meetings.py   | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 meetings.py

diff --git a/db_schema.sql b/db_schema.sql
index 3b39f48..f5e1fbf 100644
--- a/db_schema.sql
+++ b/db_schema.sql
@@ -185,6 +185,7 @@ CREATE TABLE IF NOT EXISTS `videos_data` (
 );
 CREATE TABLE IF NOT EXISTS `announcements` (
 `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+	`extid` varchar(128) UNIQUE,
 	`text` text NOT NULL DEFAULT '',
 	`level` INTEGER NOT NULL DEFAULT 0,
 	`visible` INTEGER NOT NULL DEFAULT 0,
@@ -206,7 +207,6 @@ CREATE TABLE IF NOT EXISTS `featured` (
   `time_updated` datetime NOT NULL,
   `created_by` INTEGER NOT NULL
 );
-
 CREATE TABLE IF NOT EXISTS `sortlog` (
 `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
   `when` datetime NOT NULL,
diff --git a/meetings.py b/meetings.py
new file mode 100644
index 0000000..57b3e50
--- /dev/null
+++ b/meetings.py
@@ -0,0 +1,34 @@
+from server import *
+import icalendar
+import requests
+
+def get_next_meeting():
+	ical = requests.get(config['ICAL_URL']).content
+	events = icalendar.Calendar.from_ical(ical).walk('VEVENT')
+	now = datetime.now().date()
+	delta = timedelta(weeks=2)
+	meetings = []
+	for event in events:
+		try:
+			start = event['DTSTART'].dt.date()
+			if 'VIDEO' != event['SUMMARY'].upper() or start < now or start > now+delta:
+				continue
+			meetings.append(event)
+		except:
+			pass
+	if not meetings:
+		return
+	event = sorted(meetings, key=lambda e: e['DTSTART'].dt)[0]
+	return str(event['UID']), event['DTSTART'].dt.replace(tzinfo=None)
+
+def update_meeting():
+	try:
+		uid, start = get_next_meeting()
+	except:
+		return
+	text = 'Die nächste Video AG-Sitzung findet am %s ab %s Uhr in den Räumlichkeiten der Fachschaft im Augustinerbach 2a statt.'%(
+			human_date(start), human_time(start))
+	modify('''REPLACE INTO announcements
+			(extid, text, level, visible, time_publish, time_expire, time_created, time_updated, created_by)
+			VALUES (?, ?, 0, 1, ?, ?, ?, ?, 0)''',
+		'ical:'+uid, text, start-timedelta(days=3), start+timedelta(hours=2), datetime.now(), datetime.now())
-- 
GitLab