Recurring events not displayed for local ics file

  • Hi,

    first of all thanks a lot for ICSx5.
    I’m using ICSx5 1.9.1 to load a local .ics file on my Android 9 Samsung SM-J730F, which was exported from an IBM Notes calendar.
    It works great for the most part, but recurring events are not shown.

    I have attached a minimum example that demonstrates my problem:
    The event “SomeText1” is shown on 2021-03-23 as expected, but none of the “Recurring_Event_Instance<N>” events, where N=1…6 are shown.
    Validating the ics ( shows no errors except for missing PRODID, but this is how Lotus outputs the file. I checked the file with an online viewer (, which displays all the recurring events fine.
    The funny thing is that when importing the file with the Samsung calendar app, the calendar shows those recurring items, so I could save them to the local calendar. However, I would very much prefer using ICSx5 to clearly distinguish between imported and local events.

    I would be very glad if you could take a look at the file and see whether ICSx5 has an issue here. I have changed the GUIDs to make sure they don’t collide with my already imported events in the local calendar (my workflow prior to ICSx5), but that did not help.
    Any assistance with this issue is highly appreciated.

    Test file:

  • developer

    @cx Hi,

    Thanks for your report. But I am confused because I don’t see an RRULE or RDATE. So where is there a recurring event?

    RECURRENCE-ID doesn’t work without RRULE or RDATE.

  • @rfc2822 said in Recurring events not displayed for local ics file:

    RECURRENCE-ID doesn’t work without RRULE or RDATE.

    Hi, thanks for taking a look at the file and finding out what might be the issue.

    I’m not sure why Notes does not export RRULE or RDATE. A possible explanation is the fact that I’m exporting by date range instead of the whole database, so it might be that they don’t want to “rewrite” the rule to an event within the range when the rule was specified on an event outside that range, so they just export individual items (if that makes any sense technically, I’m no expert considering the finer details of the ical spec).
    If the validator I linked is any good however, the resulting file is not invalid in itself, but just seems to have an uncommon/unexpected combination of fields.

    Please understand that I don’t expect ICSx5 to work out the recurrence. I simply mentioned this in my title as this was the pattern I saw of items that fail to display.

    I would be totally happy if for an event that has a recurrence-ID but no RRULE or RDATE, ICSx5 would fall back to importing a normal, non-recurring event for every “recurrence” found in the file.
    At least an option would be nice for this behavior.
    It seems most other ICS implementations do just that. I tested my file in Thunderbird, Samsung Calendar App, and a couple of online tools and the events showed up in all of them.

    As a minimum, I would expect ICSx5 informing me that 6 events could not be imported, so that I know my calendar is incomplete. At the moment, I have no indication that something is missing and I might double book or miss an appointment. I know Notes might not be the most frequent source for ICS files, but I think it’s still used frequently enough that a workaround makes sense.

    I will try to fix the issue on the export side, but I doubt that other than exporting everything will solve the issue, as my export code is just using the Notes NotesCalendar.readRange() method, which has very little options. I can try to post-process the data after fetching the summary, but I don’t know yet whether this will give me the RRULE or RDATE fields.

    Anyway, thanks for taking a look and keep up the great work you’ve done with this tool.
    I hope that some kind of failsafe is easily implemented in ICSx5, since silently missing some items is a very unfortunate outcome for a calendar import/sync process.

    Kind regards, Chris

  • developer

    @cx said in Recurring events not displayed for local ics file:

    If the validator I linked is any good however, the resulting file is not invalid in itself, but just seems to have an uncommon/unexpected combination of fields.

    As I understand RFC 5545, all entries but the one without RECURRENCE-ID are invalid. Those validators check only the most common problems, often only in the syntax (not semantics).

    I’m sorry but this is clearly a problem of the iCalendar file. There is no recurring event, but only

    • one single event (which is shown by ICSx⁵) and
    • loose exceptions of a recurring event that doesn’t exist.

  • Hi @rfc2822,

    thanks for providing your knowledge of RFC 5545.

    Here’s another update on Notes scriptable export capabilities:
    I learned that using the NotesCalendar.getEntries() method, I can get a more complete list of event fields, including RRULE. However, there is another shortcoming of this method that prevents ICSx5 from directly consuming the result:
    Each entry I get is contained within its own VCALENDAR (probably to include VTIMEZONE), and there is no exposed interface to merge these entries.
    A naive concatenation approach to get an ics file from that (that is mentioned at various places online) looks like this:
    Only the VEVENT in the last VCALENDAR is imported by ICSx5.

    This is, however, a better starting point than readRange.
    Using some dirty string processing, I was able to construct a Notes Agent that creates a file that works for ICSx5.

    I’m putting it here for reference, but it needs some major improvements to be considered production ready. It is, however IMHO better than most of the examples out there that ignore the issues uncovered in this thread and pretend you can feed the concatenated output of getEntries() or that of readRange() directly to the client.
    LotusNotes_ICS_Ical_Agent_ICSx5 (Java 1.5)

    Thanks again for your support.
    Kind regards, Chris

  • Google Calendar also produces ICS files that exhibits this behaviour.

    Steps to reproduce

    1. Create a calendar in Google Calendar.
    2. Add an event that repeats every week.
    3. Set the calendar to “Make available to public” and “Show only free/busy (hide details)”.
    4. Load calendar in ICSx5 (which I did via HTTP)

    ICSx5 displays an event every week.

    ICSx5 display no events.

    I have attached the ICS file. basic.ics

    It’d be great if ICSx5 were liberal in the input it accepts! I can look into this if desired.

    The relevant code in ical4android appears to be . All the events in exceptions that have no parent in mainEvents will be unprocessed, and thus not added events.

    RFC 5545 appears to be ambiguous as to how to handle this situation. I was unable to find anything that stated that events with a RECURRENCE-ID must have an RRULE or RDATE.

  • developer

    @caltom Thanks for the report and especially the steps to reproduce. I can reproduce the problem here, and it only occurs with the “Show only free/busy” setting. When the full event details are available, RRULE is used as I would expect it.

    I have never seen such events (list of events with same UID and all events have RECURRENCE-ID) and I don’t think this is valid. RFC 5545 Recurrence ID says:

    Purpose: This property is used in conjunction with the “UID” and “SEQUENCE” properties to identify a specific instance of a recurring “VEVENT”, “VTODO”, or “VJOURNAL” calendar component. The property value is the original value of the “DTSTART” property of the recurrence instance.

    So without a main event with DTSTART, RECURRENCE-ID doesn’t make sense. Also, I don’t know how to process those events; after all, they have the same UID, so storing them as different events could cause problems (different events must not have the same UID).

    I will further investigate. Did you already have a look in the Google Calendar issue tracker?

  • developer

    As I understand it, this is clearly a Google Calendar problem. We could introduce ugly and cumbersome workarounds (like faking a new main event with RDATEs for all instances) for this; but these events as given are not valid. The same behavior would at the latest with CalDAV and r/w calendars cause problems and unsyncable events. Also, I have never seen it from any other client or server.

    Do you know whether other iCalendar clients (like Thunderbird, Evolution, Outlook…) can understand these events?

    Do you know where to report Google Calendar problems?

Similar topics