Calendar: recurring events show their series start date, and the "today" window starts at midnight UTC
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 76/100
Direzione di ricerca
Read CalendarExtensionMethods.ToAppointment(Occurrence) and IcalCalendarService.GetAppointments(); the issue identifies both affected paths and the expected local-day behavior. Check how occurrence periods supply appointment dates, then inspect how the calendar query window gets its time zone. Done when recurring events use their occurrence dates and the results include only events overlapping the container’s local day.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Version
v1.0.39.0
Deployment Method
Docker (ghcr.io/immichframe/immichframe:latest) on Unraid, TZ=America/Chicago. Calendar is a Google Calendar secret iCal URL.
Description
There are two problems in the calendar widget. Both show up with an ordinary Google Calendar feed.
1. Recurring events show the date of their first occurrence, not today's.
GetOccurrences() correctly finds the recurring events that happen today. But CalendarExtensionMethods.ToAppointment(Occurrence) hands off to ToAppointment(CalendarEvent), which builds the appointment from calEvent.Start / calEvent.End. Those are the series' original DTSTART / DTEND, not this occurrence's occurrence.Period. So a yearly birthday first entered in 2022 shows a 2022 date and weekday, and a bi-weekly event first entered in 2023 shows a date from 2023.
2. Events from the previous evening show as "today".
IcalCalendarService.GetAppointments() calls calendar.GetOccurrences(DateTime.Today, DateTime.Today.AddDays(1)). With Ical.Net 4.3.1, the window seems to be read as UTC midnight to UTC midnight. For a UTC−6 time zone, that means 6:00 pm yesterday to 6:00 pm today. So any event after 6 pm the evening before appears in today's list, and events after 6 pm today are missing.
Reproduction
Container TZ=America/Chicago, checked on 2026-11-06 at about 3:30 pm CST (docker exec immichFrame date → CST).
Calendar feed contains:
BEGIN:VEVENT
DTSTART;VALUE=DATE:20221106
DTEND;VALUE=DATE:20221107
RRULE:FREQ=YEARLY
SUMMARY:Birthday
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20230721
DTEND;VALUE=DATE:20230722
RRULE:FREQ=WEEKLY;INTERVAL=2
SUMMARY:Payday
END:VEVENT
BEGIN:VEVENT
DTSTART:20261106T014500Z
DTEND:20261106T024500Z
SUMMARY:Appointment
END:VEVENT
(The last event is 2026-11-05 at 7:45 pm CST, which is yesterday evening.)
GET /api/Calendar returns:
[{"startTime":"2022-11-06T00:00:00-05:00","endTime":"2022-11-07T00:00:00-06:00","summary":"Birthday"},
{"startTime":"2023-07-21T00:00:00-05:00","endTime":"2023-07-22T00:00:00-05:00","summary":"Payday"},
{"startTime":"2026-11-05T19:45:00-06:00","endTime":"2026-11-05T20:45:00-06:00","summary":"Appointment"}]
The frame then shows the birthday on Nov 6, 2022, a Sunday, even though today is Friday, Nov 6, 2026. When the container was accidentally running in UTC, the same entry rendered as "Saturday, Nov 5". The appointment from yesterday evening is listed as today.
Expectations
- Recurring events should show the occurrence's own start and end,
2026-11-06for the birthday and payday above. - Only events that overlap the current local day (midnight to midnight in the container's
TZ) should be listed.
Possible fixes, untested:
- In
ToAppointment(Occurrence), takeSummary,DescriptionandLocationfrom the sourceCalendarEvent, but takeStartTime,EndTimeandDurationfromoccurrence.Period. - Pass a time-zone-aware window to
GetOccurrences, e.g.new CalDateTime(DateTime.Today, TimeZoneInfo.Local.Id). That keeps it from being read as UTC.
Configuration
Relevant settings only:
"Webcalendars": ["https://calendar.google.com/calendar/ical/<id>/private-<token>/basic.ics"]
All other settings are left at their defaults.
Logs
There are no errors. The calendar loads successfully; the only problem is the dates.
Pre-Submission Checklist
- This is a bug report and not a feature request
- I have provided all of the required information to reproduce the bug (config, logs, etc.)
- I have checked for related issues and checked the documentation. Related but separate: #695 (configurable look-ahead) and #589 (switched the search to
DateTime.Today).
- Lingua principale
- C#
- Stelle
- 2.4k
- Fork
- 121
- Merge medio
- 18g 20h
- PR unite (30g)
- 1
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di immichFrame/ImmichFrame
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
immichFrame/ImmichFrame#735 ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 56/100
immichFrame/ImmichFrame#733 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 22/100
immichFrame/ImmichFrame#731 · 1 reazione ·
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
immichFrame/ImmichFrame#729 ·
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
immichFrame/ImmichFrame#725 ·
Tutte le issue di immichFrame/ImmichFrame
Issue simili
-
Feature needs response
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
Adyen/adyen-dotnet-api-library#1907 ·
I maintainer di solito rispondono entro 5 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
dimitar-radenkov/Pointframe#318 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
DotHarness/dotcraft#546 ·
I maintainer di solito rispondono entro 1 giorno
-
a-corriger bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
christian-raj/S-Aloha#303 · 1 commento ·
-
Input editor says "Apply Changes" even when no changes have been made.Forse già presa @hcooper l’ha presa oggi. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
MobiFlight/MobiFlight-Connector#3526 ·
I maintainer di solito rispondono entro 1 giorno