fix(import): make .ics import survive events the provider rejects (#225)
importEvents inserted every event in one unguarded loop, so a single row the provider refused — it throws on a malformed RRULE straight out of insert — aborted the batch and left the user with "couldn't read this file" and nothing imported. Each event is now isolated and rejects are counted into IcsImportSummary.failed and shown. sanitizeRrule drops empty and malformed rule parts before the write. Alongside that, several things a foreign file carries that we dropped: VTODO components (silently lost, now imported as events), EXDATE, the CATEGORIES calendar name, and colours — X-FOSSIFY-EVENT-COLOR / COLOR / the category colour plus the X-SMT-* legacy spellings, snapped in Oklab to the nearest key a palette account publishes since those reject a raw EVENT_COLOR. Two correctness fixes on our side: an all-day event may no longer end at or before it starts (the provider expands a zero-length series into no instances, so it just disappears), and imported all-day reminders now go through the same encoding as hand-created ones instead of firing at UTC midnight. A VALARM trigger pointing after the start is read as a time of day rather than clamped to zero. Note for later: their all-day DTEND is RFC-correct — endTS anchors at noon of the last day and the exporter's +12h rounds it to the following midnight. Do not "fix" it by sniffing PRODID; the holiday files bundled in Fossify are conformant and name Fossify in theirs. One is kept as a fixture. Refs #225
This commit is contained in:
@@ -693,11 +693,15 @@
|
||||
<string name="import_done_dedup_note">Events already in the calendar were skipped.</string>
|
||||
<string name="import_done_added_label">Added</string>
|
||||
<string name="import_done_skipped_label">Duplicates</string>
|
||||
<string name="import_done_failed_label">Not added</string>
|
||||
<string name="import_done_failed_note">Some events couldn\'t be added and were left out.</string>
|
||||
<string name="import_close">Close</string>
|
||||
<string name="import_warning_recurrence">Some changed occurrences of recurring events were skipped.</string>
|
||||
<string name="import_warning_no_start">An event without a start time was skipped.</string>
|
||||
<string name="import_warning_attendees">Guest lists weren\'t imported.</string>
|
||||
<string name="import_warning_timezone">An unknown time zone fell back to your device\'s.</string>
|
||||
<string name="import_warning_tasks">Tasks in this file were added as events.</string>
|
||||
<string name="import_warning_recurrence_repaired">A faulty repeat rule was repaired.</string>
|
||||
<string name="import_button">Import</string>
|
||||
<plurals name="import_title_count">
|
||||
<item quantity="one">Importing %d event</item>
|
||||
@@ -719,6 +723,10 @@
|
||||
<item quantity="one">Skipped %d already in this calendar.</item>
|
||||
<item quantity="other">Skipped %d already in this calendar.</item>
|
||||
</plurals>
|
||||
<plurals name="import_done_failed">
|
||||
<item quantity="one">%d event couldn\'t be added.</item>
|
||||
<item quantity="other">%d events couldn\'t be added.</item>
|
||||
</plurals>
|
||||
<!-- Launcher long-press shortcuts -->
|
||||
<string name="shortcut_new_event_short">New event</string>
|
||||
<string name="shortcut_new_event_long">Create a new event</string>
|
||||
|
||||
Reference in New Issue
Block a user