diff --git a/src/agenda_culturel/calendar.py b/src/agenda_culturel/calendar.py index e9df9ff..c80a922 100644 --- a/src/agenda_culturel/calendar.py +++ b/src/agenda_culturel/calendar.py @@ -300,10 +300,10 @@ class CalendarList: def time_intervals_list_first(self): return self.time_intervals_list(True) - def export_to_ics(self): + def export_to_ics(self, request): from .models import Event events = [event for day in self.get_calendar_days().values() for event in day.events] - return Event.export_to_ics(events) + return Event.export_to_ics(events, request) class CalendarMonth(CalendarList): diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py index 1e35bb8..cbaa76f 100644 --- a/src/agenda_culturel/models.py +++ b/src/agenda_culturel/models.py @@ -1646,7 +1646,7 @@ class Event(models.Model): return (dtstart <= e_dtstart <= dtend) or (e_dtstart <= dtstart <= e_dtend) - def export_to_ics(events): + def export_to_ics(events, request): cal = icalCal() # Some properties are required to be compliant cal.add("prodid", "-//My calendar product//example.com//") @@ -1704,6 +1704,8 @@ class Event(models.Model): eventIcal.add( "description", description + url ) + if not event.local_image is None: + eventIcal.add('image', request.build_absolute_uri(event.local_image), parameters={'VALUE': 'URI'}) eventIcal.add("location", event.exact_location or event.location) cal.add_component(eventIcal) diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py index 4ced3d8..62ff3ee 100644 --- a/src/agenda_culturel/views.py +++ b/src/agenda_culturel/views.py @@ -13,6 +13,8 @@ from django.utils.safestring import mark_safe from django.utils.decorators import method_decorator from honeypot.decorators import check_honeypot from .utils import PlaceGuesser +import hashlib +from django.core.cache import cache from django.contrib.gis.geos import Point @@ -711,7 +713,7 @@ def export_event_ical(request, year, month, day, pk): events = list() events.append(event) - cal = Event.export_to_ics(events) + cal = Event.export_to_ics(events, request) response = HttpResponse(content_type="text/calendar") response.content = cal.to_ical().decode("utf-8").replace("\r\n", "\n") @@ -726,8 +728,12 @@ def export_ical(request): request = EventFilter.set_default_values(request) filter = EventFilter(request.GET, queryset=get_event_qs(request), request=request) - calendar = CalendarList(now + timedelta(days=-7), now + timedelta(days=+60), filter) - ical = calendar.export_to_ics() + id_cache = hashlib.md5(filter.get_url().encode("utf8")).hexdigest() + ical = cache.get(id_cache) + if not ical: + calendar = CalendarList(now + timedelta(days=-7), now + timedelta(days=+60), filter) + ical = calendar.export_to_ics(request) + cache.set(id_cache, ical, 3600) # 1 heure response = HttpResponse(content_type="text/calendar") response.content = ical.to_ical().decode("utf-8").replace("\r\n", "\n")