"Couldn't parse iCalendar" since update to 1.8.9-standard


  • Since upgrade to the 1.8.9 version via F-Droid no more calendar is accepted by the app.
    Always error “Couldn’t parse ICalendar”. No more info . No debug output. Nothing.
    Checking the ICS file in ICS validators shows no errors.
    No matter if authentication is needed or not, always the same error.

    Tried to downgrade to 1.8.8 via F-Droid:
    “Fehler beim Installieren von ICSx5: Installation aufgrund eines unbekannten Fehlers fehlgeschlagen”.

    After de-installation of 1.8.9 and installation of 1.8.8:
    Same error.

    https://icalendar.org/validator.html says “all fine” for the ICS file.

  • developer

    1.8.9 is working fine here.

    How can I know whether your .ics is really ok? Web validators are often very basic.


  • Tested 3 different validators.
    How can i know what is the problem when the app does not show any further errors? Which line is the “error”? What is the problem? How can I debug?


  • SAMPLE ICS CONTENT THAT FAILS:

    BEGIN:VCALENDAR
    VERSION:2.0
    PRODID:georgeos-sammelkalender
    CALSCALE:GREGORIAN
    METHOD:PUBLISH
    REFRESH-INTERVAL;VALUE=DURATION:P2H
    BEGIN:VTIMEZONE
    TZID:Europe/Berlin
    X-LIC-LOCATION:Europe/Berlin
    BEGIN:DAYLIGHT
    TZNAME:CEST
    TZOFFSETFROM:+0100
    TZOFFSETTO:+0200
    DTSTART:19810329T030000
    RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
    END:DAYLIGHT
    BEGIN:STANDARD
    TZNAME:CET
    TZOFFSETFROM:+0200
    TZOFFSETTO:+0100
    DTSTART:19961027T030000
    RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
    END:STANDARD
    END:VTIMEZONE
    BEGIN:VEVENT
    UID:1605609188-Geburtstag-lalala-hansmustermann
    DTSTART;TZID=Europe/Berlin:20200220T080000
    SEQUENCE:0
    DTEND;TZID=Europe/Berlin:20200220T081500
    LOCATION:Geburtstag
    SUMMARY:Hans Mustermann (1967)
    DESCRIPTION:Aus dem Verzeichnisdienst
    CATEGORIES:Geburtstag
    DTSTAMP:20201117T113308Z
    CREATED:20201117T113308Z
    LAST-MODIFIED:20201117T113308Z
    RRULE:FREQ=YEARLY;BYMONTH=02;BYMONTHDAY=20
    BEGIN:VALARM
    TRIGGER;VALUE=DURATION:-PT5M
    ACTION:DISPLAY
    DESCRIPTION:Gratulieren: Hans Mustermann
    END:VALARM
    END:VEVENT
    END:VCALENDAR

  • developer

    Thanks. At the moment you have to look over adb to see:

    2020-11-17 14:22:42.860 7898-8858/at.bitfire.icsdroid E/icsx5: Couldn't validate calendar
        at.bitfire.ical4android.InvalidCalendarException: Couldn't parse iCalendar
            at at.bitfire.ical4android.ICalendar$Companion.fromReader(ICalendar.kt:92)
            at at.bitfire.ical4android.Event$Companion.eventsFromReader(Event.kt:82)
            at at.bitfire.icsdroid.ui.AddCalendarValidationFragment$ValidationModel$initialize$downloader$1.onSuccess(AddCalendarValidationFragment.kt:112)
            at at.bitfire.icsdroid.CalendarFetcher.fetchNetwork(CalendarFetcher.kt:133)
            at at.bitfire.icsdroid.CalendarFetcher.run(CalendarFetcher.kt:44)
            at java.lang.Thread.run(Thread.java:923)
         Caused by: net.fortuna.ical4j.data.ParserException: Error at line 6:Text cannot be parsed to a Duration
            at net.fortuna.ical4j.data.CalendarParserImpl.parse(CalendarParserImpl.java:158)
            at net.fortuna.ical4j.data.CalendarBuilder.build(CalendarBuilder.java:183)
            at net.fortuna.ical4j.data.CalendarBuilder.build(CalendarBuilder.java:171)
            at at.bitfire.ical4android.ICalendar$Companion.fromReader(ICalendar.kt:90)
            at at.bitfire.ical4android.Event$Companion.eventsFromReader(Event.kt:82) 
            at at.bitfire.icsdroid.ui.AddCalendarValidationFragment$ValidationModel$initialize$downloader$1.onSuccess(AddCalendarValidationFragment.kt:112) 
            at at.bitfire.icsdroid.CalendarFetcher.fetchNetwork(CalendarFetcher.kt:133) 
            at at.bitfire.icsdroid.CalendarFetcher.run(CalendarFetcher.kt:44) 
            at java.lang.Thread.run(Thread.java:923) 
         Caused by: java.time.format.DateTimeParseException: Text cannot be parsed to a Duration
            at java.time.Duration.parse(Duration.java:406)
            at net.fortuna.ical4j.model.TemporalAmountAdapter.parse(TemporalAmountAdapter.java:125)
            at net.fortuna.ical4j.model.property.RefreshInterval.setValue(RefreshInterval.java:35)
    ...
    

    So you can see that

    REFRESH-INTERVAL;VALUE=DURATION:P2H

    is an invalid duration and can’t be parsed. According to the iCalendar specification, It would have to be PT2H.

    Please fix this on the server side. Which software did you use to generate this iCalendar?

  • developer

    Additionally with ICSx5 1.9, error details can be shared.


  • @rfc2822 Thank you, this helps a lot, it is a subscription of a shared calendar of an openXchange suite. Seems this error has always been there, but ICSX5 has begun to fail just with the pre-former release. I will contact the server software provider…

Similar topics

  • 5
  • 10
  • 16