From db0e7b8f9b9d3212f307ee2234bf9ef05200315c Mon Sep 17 00:00:00 2001
From: Stijn De Clercq 
Date: Wed, 3 Mar 2021 18:37:09 +0100
Subject: [PATCH] Add support for linebreaks, parse id's beforehand to check
 properly, add leading zeroes to timestamp
---
 data/embeds/ufora.py             | 24 +++++++++---------------
 functions/ufora_notifications.py | 21 +++++++++++++++++----
 2 files changed, 26 insertions(+), 19 deletions(-)
diff --git a/data/embeds/ufora.py b/data/embeds/ufora.py
index df52c83..3a38c46 100644
--- a/data/embeds/ufora.py
+++ b/data/embeds/ufora.py
@@ -1,15 +1,16 @@
 from datetime import datetime, timedelta
 from discord import Embed, Colour
+from functions.stringFormatters import leadingZero as lz
 from functions.timeFormatters import intToWeekday
 import pytz
 import re
 
 
 class UforaNotification:
-    def __init__(self, content: dict, course):
+    def __init__(self, content: dict, course, notif_id, course_id):
         self._content: dict = content
         self._course = course
-        self._notif_id, self._course_id = self._find_ids(self._content["id"])
+        self._notif_id, self._course_id = notif_id, course_id
         self._view_url = self._create_url()
         self._title = self._clean_content(self._content["title"])
         self._description = self._get_description()
@@ -35,16 +36,6 @@ class UforaNotification:
 
         return "https://ufora.ugent.be/d2l/le/news/{0}/{1}/view?ou={0}".format(self._course_id, self._notif_id)
 
-    def _find_ids(self, url: str):
-        match = re.search(r"[0-9]+-[0-9]+$", url)
-
-        if not match:
-            return None, None
-
-        spl = match[0].split("-")
-
-        return spl[0], spl[1]
-
     def _get_description(self):
         desc = self._clean_content(self._content["summary"])
 
@@ -76,7 +67,10 @@ class UforaNotification:
             "": "__",
             "": "__",
             # Represent paragraphs with newlines
-            "
": "\n"
+            "": "\n",
+            "
": "\n",
+            "
": "\n",
+            "
": "\n"
         }
 
         # Unescape HTML
@@ -96,6 +90,6 @@ class UforaNotification:
 
         return "{} {}/{}/{} om {}:{}:{}".format(
             intToWeekday(dt.weekday()),
-            dt.day, dt.month, dt.year,
-            dt.hour, dt.minute, dt.second
+            lz(dt.day), lz(dt.month), lz(dt.year),
+            lz(dt.hour), lz(dt.minute), lz(dt.second)
         )
diff --git a/functions/ufora_notifications.py b/functions/ufora_notifications.py
index ecb8a1c..26a5419 100644
--- a/functions/ufora_notifications.py
+++ b/functions/ufora_notifications.py
@@ -1,3 +1,5 @@
+import re
+
 import feedparser
 from data.embeds import UforaNotification
 import json
@@ -37,14 +39,14 @@ def run():
         feed = feedparser.parse(url)
 
         # Filter out old notifications
-        feed = list(filter(lambda f: f["id"] not in notifications[course], feed.entries))
+        feed = list(filter(lambda f: _parse_ids(f["id"])[0] not in notifications[course], feed.entries))
 
         if feed:
             for item in feed:
-                notification = UforaNotification(item, course)
-                new_notifications.append(notification)
+                notif_id, course_id = _parse_ids(item["id"])
+                new_notifications.append(UforaNotification(item, course, notif_id, course_id))
 
-                notifications[course].append(notification.get_id())
+                notifications[course].append(notif_id)
 
     # Update list of notifications
     if new_notifications:
@@ -52,3 +54,14 @@ def run():
             json.dump(notifications, fp)
 
     return new_notifications
+
+
+def _parse_ids(url: str):
+    match = re.search(r"[0-9]+-[0-9]+$", url)
+
+    if not match:
+        return None, None
+
+    spl = match[0].split("-")
+
+    return spl[0], spl[1]