在什么情况下 iCal VEVENT 会以重复的 UID 结束?

In what situations could an iCal VEVENT end up with a duplicated UID?

我似乎无法弄清楚为什么这些 Google iCal 事件有一些非唯一的 UID。 spec says that event UIDs "MUST" be unique,但 Google 日历返回了一些重复项。

➜ grep 'UID:' testcal.ics | wc -l
744

➜ grep 'UID:' testcal.ics | uniq -c
738

➜ grep 'UID:' testcal.ics | uniq -d
UID:p7gllqg6177dj05omcc3cejl9o@google.com
UID:u64e5o1fm802dt5s4fn71perho@google.com
UID:q09i2hjd7nfavjc2j65e7o29qk@google.com
UID:6baas9neong05nrfca8lein2kl@google.com

testcal.ics 是我的个人日历之一的导出,可以追溯到大约 10 年前。日历有数百个各种类型的事件。我创建的重复活动、我受邀参加的活动、透明活动、多日活动等等等等

上面列出的四个UID都对应着周期性的事件。对于每个重复的 UID,都有一个“父”VEVENT 列出重复规则和一个“子”VEVENT 来表示该序列中的单个实例。在一种情况下,有两个实例和一个“父”都共享相同的 UID。

除了都是重复发生的事件之外,它们似乎没有任何相关性。他们在重复中有 >=1 个实例 确实 获得了唯一的 UID。同样,还有数百个其他重复发生的事件不受此影响。这四个发生在非常不同的时间(2013 年、2015 年、2018 年和 2020 年),因此 device/app 管理它们的时间每次都会非常不同。

这只是一个持续存在的错误,还是存在重复 UID 可能合适的合法情况(即使它不在规范中)?

在一个日历流中有多个具有相同 UID 的 VEVENT 是合法的。一个是主循环事件(它具有 RRUle 或 RDATE 属性),而其他事件具有 RECURRENCE-ID 并且对应于仅对该实例进行更改的循环事件的实例(例如,更改 LOCATION) .

参见示例https://www.rfc-editor.org/rfc/rfc5546#section-4.4.8