Amélioration export ical:

- ajout des images
- ajout de cache
This commit is contained in:
Jean-Marie Favreau 2024-12-08 17:32:46 +01:00
parent f7f8d9cb0c
commit 3316d28e09
3 changed files with 14 additions and 6 deletions

View File

@ -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):

View File

@ -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)

View File

@ -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")