Search code examples
google-calendar-apiicalendarrfc5545

UID issue: only last event submitted


Ok guys, here's the nasty business: I made a batch file that make an .ics file that I should "upload" in my Google calendar daily. Now, the batch works just fine, the problem is the behaviour that I'm having with the result.

Long story short, if I put the UID into the VEVENT happens that only the last event is submitted to the calendar.

Example:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//prodvam v0.3//EN
METHOD:PUBLISH
BEGIN:VEVENT
UID:prod
STATUS:CONFIRMED
SEQUENCE:0
DTSTART;VALUE=DATE:20141112
SUMMARY:SUMMARY1
END:VEVENT
BEGIN:VEVENT
UID:prod
STATUS:CONFIRMED
SEQUENCE:0
DTSTART;VALUE=DATE:20141112
SUMMARY:SUMMARY2
END:VEVENT
END:VCALENDAR

This, will only submit an event called SUMMARY2 dated 12 of november...

I know that the UID isn't necessary in order to submit an event, but it is a must if I want to delete the event later [and I need it, so i can't just erase that line of "code"].

I can erase events, create the .ics files and everything, only, I just can't understand why the UID would make only the last event to be submitted!

I tried adding/subbing various things, even the nosense-ones, like the comments of the events...

I am doing something wrong? Any Tip?


Solution

  • luc gives a valid answer to your problem, however you are at risk of not having a globally unique ID.

    UID means Unique Identifier "Unique ID" which is a persistent, globally unique identifier for the calendar component. To ensure global uniqueness, RFC (See https://www.rfc-editor.org/rfc/rfc5545#section-3.8.4.7 ) gives guidelines on how to ensure they are globally unique :

    A good method to assure uniqueness is to put the domain name or a domain literal IP address of the host on which the identifier was created on the right-hand side of an "@", and on the left-hand side, put a combination of the current calendar date and time of day (i.e., formatted in as a DATE-TIME value) along with some other currently unique (perhaps sequential) identifier available on the system (for example, a process id number)

    BEGIN:VCALENDAR
    VERSION:2.0
    PRODID:-//ingrossod//Compagnia VAM v0.3//EN
    METHOD:PUBLISH
    BEGIN:VEVENT
    UID:20141112_SUMMARY1@ingrossod
    STATUS:CONFIRMED
    SEQUENCE:0
    DTSTART;VALUE=DATE:20141112
    SUMMARY:SUMMARY1
    END:VEVENT
    BEGIN:VEVENT
    UID:20141112_SUMMARY2@ingrossod
    STATUS:CONFIRMED
    SEQUENCE:0
    DTSTART;VALUE=DATE:20141112
    SUMMARY:SUMMARY2
    END:VEVENT
    END:VCALENDAR