Google calendar api 在什么情况下,iCal VEVENT最终会出现重复的UID?

Google calendar api 在什么情况下,iCal VEVENT最终会出现重复的UID?,google-calendar-api,icalendar,Google Calendar Api,Icalendar,我似乎不明白为什么这些谷歌iCal活动有一些非唯一的UID。但是谷歌日历返回了一些重复的内容 ➜ 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

我似乎不明白为什么这些谷歌iCal活动有一些非唯一的UID。但是谷歌日历返回了一些重复的内容

➜ 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,都有一个“parent”
VEVENT
,其中列出了定期规则,还有一个“child”
VEVENT
表示该序列中的单个实例。在一种情况下,有两个实例和一个“父”共享相同的UID

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


这只是一个持久性的bug,还是存在一种合法的情况,在这种情况下,可能需要使用重复的UID(即使它不在规范中)?

在日历流中使用具有相同UID的多个VEVEVENT是合法的。一个是主循环事件(它具有RRUle或RDATE属性),而另一个具有循环ID,do对应于仅对该实例进行更改的循环事件实例(例如位置更改)


请参见示例

正确。如果存在RECURRENCE-ID,则它是与主事件分开修改的定期事件的单个实例(异常)。您可能会看到重复UID的另一个原因是事件本身已被修改(某些字段)。然后你还将有一个序列。这是有道理的,但我本来希望看到更多这些重复的ID。该日历中有很多重复发生的事件,活动的和过期的,但这四个UID是该日历中唯一的重复事件。您知道为什么它可能会复制某些实例的UID,而不会复制其他实例的UID吗?这取决于您正在使用的客户端类型以及在修改重复事件时您自己的使用模式:一些客户端提供修改“仅该实例”或“所有实例”或“所有未来实例”等功能。。。而其他人只是修改主循环事件,而没有询问。如果使用后者,或者如果您在修改此类事件时经常选择“所有实例”,那么最终将出现很少的重复事件(只有例外)。