aboutsummaryrefslogtreecommitdiff
path: root/feeds.py
diff options
context:
space:
mode:
Diffstat (limited to 'feeds.py')
-rw-r--r--feeds.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/feeds.py b/feeds.py
index 2dd2479..6dfb851 100644
--- a/feeds.py
+++ b/feeds.py
@@ -17,6 +17,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.conf import settings
from django.contrib.syndication.views import Feed
from django.db.models import Q
+from django.db.models.functions import ExtractWeek, ExtractYear
from django.template import loader
from django.urls import reverse
from django.utils.feedgenerator import Atom1Feed, SyndicationFeed
@@ -27,7 +28,7 @@ from .models import Course, Group, LastUpdate
from .templatetags.rooms import format_rooms
from .utils import get_current_or_next_week, get_week, group_courses
-ICAL_NAMES = ["summary", "description", "location", "start", "dtstart", "dtend"]
+ICAL_NAMES = ["uid", "summary", "description", "location", "start", "dtstart", "dtend", "dtstamp"]
class IcalFeedGenerator(SyndicationFeed):
@@ -35,6 +36,7 @@ class IcalFeedGenerator(SyndicationFeed):
def write(self, outfile, encoding):
calendar = Calendar()
+ calendar.add("prodid", "-//celcatsanitizer//NONSGML v1.0//EN")
calendar.add("version", "2.0")
self.write_events(calendar)
@@ -68,11 +70,13 @@ class IcalFeed(Feed):
return ""
def items(self, obj):
- return Course.objects.get_courses_for_group(obj).order_by("begin")
+ return Course.objects.get_courses_for_group(obj).annotate(year=ExtractYear("begin"), week=ExtractWeek("begin"))
def item_extra_kwargs(self, item):
- return {"dtstart": item.begin,
+ return {"uid": "{0}@celcatsanitizer".format(item.id),
+ "dtstart": item.begin,
"dtend": item.end,
+ "dtstamp": LastUpdate.objects.get(timetable=item.timetable, year=item.year, week=item.week).updated_at,
"summary": item.name,
"location": format_rooms(item.rooms.all())}