I'm running a sabre CalDAV server and I'm using iCal on Yosemite as a client. Now, I create an allday recurring event in iCal and use the Charles Proxy to check the body of the request, that is sent from iCal. Creating the event it sends correct data:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.10.1//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
CREATED:20160404T203206Z
UID:14C144D6-A872-4D24-91C0-783A9979BB9E
RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=1
DTEND;VALUE=DATE:20160409
TRANSP:TRANSPARENT
SUMMARY:Repeat
DTSTART;VALUE=DATE:20160404
DTSTAMP:20160404T203206Z
SEQUENCE:0
BEGIN:VALARM
X-WR-ALARMUID:A807798B-DE16-4E62-86E9-C204A2B80F76
UID:A807798B-DE16-4E62-86E9-C204A2B80F76
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
ACTION:NONE
END:VALARM
END:VEVENT
END:VCALENDAR
The response:
HTTP/1.1 201 Created
Date: Mon, 04 Apr 2016 20:32:19 GMT
Server: Apache/2.4.10 (Unix) OpenSSL/1.0.1j PHP/5.6.3 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.6.3
X-Sabre-Version: 3.0.8
Content-Length: 0
ETag: "55c6a353f278653fdd61387395c274df"
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
But if I change a single occurrence of the repeating event and choose to only apply the changes to this occurrence, iCal sends the old calendar-data back to the server without any changes. If I apply the changes to all occurrences, the correct data is sent. If I choose to only apply the changes to future events, it correctly alters the old event and creates a new event for the future occurrences. But then again, no changes on a single occurrence are sent to the server.
This is only happening for allday events. Timed events are working just fine. It also doesn't matter if I create the rrule with "count" or by "until".
If I change a single occurrence and export my calendar from iCal I also get the correct calendar-data, although this data is not sent to the server (different event):
BEGIN:VCALENDAR
METHOD:PUBLISH
VERSION:2.0
X-WR-CALNAME:XXX
X-WR-CALDESC:
X-APPLE-CALENDAR-COLOR:#FF9500
X-WR-TIMEZONE:Europe/Berlin
CALSCALE:GREGORIAN
BEGIN:VEVENT
CREATED:20160405T063102Z
UID:68C23C1E-371C-4799-9139-04F0F8FE6F88
RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=4
DTEND;VALUE=DATE:20160409
TRANSP:TRANSPARENTSUMMARY:hhhhh
DTSTART;VALUE=DATE:20160404
DTSTAMP:20160405T063102Z
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
CREATED:20160405T063102Z
UID:68C23C1E-371C-4799-9139-04F0F8FE6F88
DTEND;VALUE=DATE:20160421
TRANSP:TRANSPARENT
SUMMARY:hhhhh
DTSTART;VALUE=DATE:20160418
DTSTAMP:20160405T063102Z
SEQUENCE:0
RECURRENCE-ID;VALUE=DATE:20160418
END:VEVENT
END:VCALENDAR
There, I can finally see the vevent with a correct recurrence-id.
Any ideas? Anyone else ran into a similar problem? I have no idea, what could be causing this...
Thanks in advance!
Okay, this must have been a calendar bug. After enabling debugging I found this error:
Apr 6 12:20:11 XXX.local CalendarAgent[229]: [com.apple.calendar.store.log.ICS] [CaliCalTranslator: Event 97323C3B-753D-46E5-830E-E182BEAA5E0D has invalid instance on date 2016-04-11 00:00:00 +0000. Filtering]
I updated calendar from Version 8.0 (2026) to Version 8.0 (2034.9) and now everything is working as expected.
Related
I am trying to edit a file that a transport company sent me which automatically set my trip information in my calendar . I want to edit this file so that it can reminds me other events but, when i change the date and send it to myself or another email adress, it doesn't set the event automatically anymore. What is the problem?
Even sending the same file, not even changing the date, gives the same problem.
i tried to read this guide https://www.rfc-editor.org/rfc/rfc5545#page-165 but have not found anything...
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
UID:d0b7191f-b3af-419b-af93-b795f0dde86
PRIORITY:1
DTSTART:20190830T142500
DTEND:20190830T173800
LOCATION:Torino Porta Nuova
DESCRIPTION:Torino Porta Nuova-Albenga;
Treno: Regionale Veloce 10113, pa
rtenza da Torino Porta Nuova Ore: 14:25; arrivo a Albenga
Ore: 17:38
Codi
ce Biglietto: 120303025;
ORGANIZER:CN=ORGANIZER:mailto:webmaster#trenitalia.it
SUMMARY:Viaggio Torino Porta Nuova-Albenga, Treno Regionale
Veloce 10113,
Codice Biglietto 120303025 ,
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=BUYER:mailto:MY_EMAIL_ADRESS_REMOVED_FOR_PRIVACY
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=TRAVELLER:MY_EMAIL_ADRESS_REMOVED_FOR_PRIVACY
END:VEVENT
END:VCALENDAR
I would really appreciate some help.
SOLVED!! the voice "organizer" must be the mail who send the event and you have to write the mail of the receivers to the "attedee" voice (i don't know yet if this is strictly necessary)
Outlook 2016 or Outlook 365 is not recognizing attached ics file. The rsvp buttons are not showing in the email body but it does display correctly in gmail. I am able to download the ics file and import it into outlook.
BEGIN:VCALENDAR
PRODID:-//AroFlo PtyLtd
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
UID:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY2hlZHVsZV9pZCI6MCwic2NoZWRUe
XBlIjoiZXZlbnQiLCJncm91cGlkIjoxLCJvcmdfaWQiOjEzNywiU1ZBUk1DT05UUk9MSUQiOjM
xMTQ5LCJ1c2VyX2lkIjo3MTk1LCJ3b3JrcmVxdWVzdF9pZCI6MCwiZXZlbnRfaWQiOjU3MTUsI
mFsbG9jYXRpb25faWQiOjAsImNvbnRyb2xsaW5nb3JnaWQiOjEzNywidGVtcGxhdGVfaWQiOjA
sInRzX2dyb3VwX2lkIjowfQ.lVNWzJe1VbKsxdRJ2kCpLFUo2Wb1CqJ5Eom1nTgyewc
DTSTAMP:20180513T230757Z
DTSTART:20180514T050000Z
DTEND:20180514T073000Z
ORGANIZER;CN=Bri-Tech:mailto:test#email.com
CREATED:20180513T230757Z
LAST-MODIFIED:20180513T230757Z
SEQUENCE:0
SUMMARY:test event
DESCRIPTION:
X-ALT-DESC;FMTTYPE=text/html:
STATUS:CONFIRMED
TRANSP:OPAQUE
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP
=TRUE;CN=test user;X-NUM-GUESTS=0:mailto:test1#test.com
PRIORITY:5
CLASS:PUBLIC
CATEGORIES:AroFlo, event
END:VEVENT
END:VCALENDAR
Here is how the MIME email type is constructed
var m = new mail();
m.setSubject( 'event' );
m.setTo( test#email.com );
m.setFrom( "noreply#email.com" );
m.addPart( type="text/calendar", body="#icalFile#");
m.addParam( type="text/calendar", file="invite.ics", content="#icalFile#");
m.send();
Turns out the email MIME type wasn't added correctly. The code below now displays the RSVP buttons correctly.
In ColdFusion addParam() type can set more than one parameter.
m.addParam( type="text/calendar; charset=utf-8; method=REQUEST;"
, file="invite.ics"
, content="#icalFile#");
i create event on google calendar using ics file successfully but when i'm trying to delete/cancel this event using ics file its not working.
---Create Ics----
BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST
PRODID:-//ClaryIcon/NONSGML OneScreen//EN
BEGIN:VEVENT
DTSTART:20180222T145000Z
DTEND:20180222T145000Z
SUMMARY:testttt
DESCRIPTION:Meeting Invite from OneScreen Hype\nMeeting Owner: ali\nSip Address: Not Supported\nDail in: \n\n
UID:5a8d8747eebadc109c908e11
DTSTAMP:20180221T145048Z
ORGANIZER;CN=ali:mailto:noreply-hype#onescreensolutions.com
END:VEVENT
END:VCALENDAR
---Cancel Ics----
BEGIN:VCALENDAR
VERSION:2.0
METHOD:CANCEL
PRODID:-//ClaryIcon/NONSGML OneScreen//EN
BEGIN:VEVENT
DTSTART:20180221T145152Z
DTEND:20180221T145152Z
SUMMARY:testttt
DESCRIPTION:
UID:5a8d8747eebadc109c908e11
DTSTAMP:20180221T145152Z
ORGANIZER;CN=ali:mailto:noreply-hype#onescreensolutions.com
END:VEVENT
END:VCALENDAR
mainly i use uid to identity specific event
Try adding status:cancelled as per the RFC5545 spec
https://www.rfc-editor.org/rfc/rfc5545#page-93
Not sure but you may also need a SEQUENCE (check spec for exact syntax ) to indicate which is latest modification.
I am facing several issues related to the creation of an ICS file which has to be compatible with several clients, especially iOS, Gmail, Outlook, Android and Windows Phone. Googling around, I found out the proposed standard from 2009, aka RFC5546. I read through this document and found a point which is very interesting and could potentially solve my issue. Section Methods for VEVENT Calendar Components explains the distinctions between methods REQUEST and PUBLISH. But, there are a couple of points which are not really clear to me:
What should PUBLISH do? Should it add a new calendar? Should it create a new calendar (like in Outlook or iOS) or should add the event in the existing user calendar (like in Gmail or Lightning)? EDIT: note the calendar as a file attached to an e-mail.
Can PUBLISH contain more than one event? From the document and logically, yes, but Gmail then adds only the first event of the list. Lightning adds only one event and then gives a 804a0004 error.
How should REQUEST work? The document states: VEVENT | 1+ | All components MUST have the same UID. which means a calendar may have more than 1 VEVENT but they must have the same UID. Then, how can I client distinguish between those events? And in fact no client I tried is able to distinguish the events generated with the same UID, but they add only the one with highest SEQUENCE. Logically, I don't want to send more than one event per invitation, but the RFC allows me to do that (and in my case study I want to), so how?
With REQUEST, forgetting the statement VEVENT | 1+ | All components MUST have the same UID., so providing a unique UID to each event in the ICS file, Gmail and iOS add all the events contained in the file, while Lightning and Outlook add only the first one. Is there a way to pursue this path or since it should not be allowed I should find another way?
Basically, how do you suggest to proceed to add more events with a single ICS file to the users' calendar for the platforms I mentioned?
Sample ICS for PUBLISH:
BEGIN:VCALENDAR
PRODID:-//prodid//product//IT
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:uid1
DTSTAMP:20130515T121437Z
DTSTART:20130619T205000
DTEND:20130619T215000
DESCRIPTION:Desc 1
SUMMARY:Sum 1
LOCATION:location
ORGANIZER:mailto:organizer#somedomain
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
UID:uid2
DTSTAMP:20130515T121437Z
DTSTART:20130719T205000
DTEND:20130719T215000
DESCRIPTION:Desc 2
SUMMARY:Sum 2
LOCATION:location
ORGANIZER:mailto:organizer#somedomain
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR
Sample for REQUEST:
BEGIN:VCALENDAR
PRODID:-//prodid//product//IT
VERSION:2.0
METHOD:REQUEST
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:uid1
DTSTAMP:20130515T121437Z
DTSTART:20130619T205000
DTEND:20130619T215000
DESCRIPTION:Desc 1
SUMMARY:Sum 1
LOCATION:location
ORGANIZER:mailto:organizer#somedomain
ATTENDEE;RSVP=TRUE;CN=attendee cn:mailto:attendee#email
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
UID:uid2
DTSTAMP:20130515T121437Z
DTSTART:20130719T205000
DTEND:20130719T215000
DESCRIPTION:Desc 2
SUMMARY:Sum 2
LOCATION:location
ORGANIZER:mailto:organizer#somedomain
ATTENDEE;RSVP=TRUE;CN=attendee cn:mailto:attendee#email
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR
About 1) it is not clear how you communicate the events to the client: is it via iMIP (email) or through an HTTP URL ? In any case, there is no right answer to your question: iTIP is about transport of iCalendar data.
About 2) yes, you can have multiple events in a PUBLISH stream
About 3):
iCalendar has a notion of exception for recurring meetings. Those exceptions are represented by a VEVENT with the same UID and a RECURRENCE-ID indicating the particular instance that shall be considered an exception.
As a consequence, a REQUEST can only be used to transmit a single event (only one UID) but this event itself might be expressed as a set of VEVENT: one for the master (e.g. meeting every friday at 10:00) and one for each exception (e.g. except on Friday 12/12 where it will take place at 09:00).
See for example the last event in https://www.rfc-editor.org/rfc/rfc5546#section-4.4.8
I am wondering how to determine the age of a web site (not the age of the host / domain registration) in a robust and universal way.
Take this site as an example:
Most of the times, the age / date (December 21, 2011, in this case) appears on the site, but AFAIK there is no universal way of getting this information from the page (could be on the page, in the META-tag, header...)
If you google the headline, Google will show the age (first result; gray; so Google extracted this information somehow):
http://i.stack.imgur.com/BcXwo.png [I don't have privileges to embedd this as an image]
Alongside, there are other sites with the same news (i guess it's from a press agency) and Google shows the age for those as well, but not for the last one, despite its occurrence in the text (First line; Wednesday, December 21, 2011).
Q1) How to determine the age in a universal way?
Q2) How does Google do it? Is it just the time the URL showed up in the index? Why isn't there a date then for the last result?
Q3) If there is no other way then actually getting it from Google, how can that be done automatically for a couple of domains? After a number of automated requests, Google will block / prevent you from sending more requests. I had a look in the Google Custom Search API, but the data does not show up in the results there.
Thanks!
If the server supports it you can use the Last-Modified Header part of the HTTP-Request.
try: curl -I http://online.wsj.com/article/SB10001424052970204058404577110380555673036.html
to get only the HTTP-Header of the Reply and have a look at the output
HTTP/1.1 200 OK
Date: Wed, 09 May 2012 12:40:10 GMT
Server: Apache/2.2.15 (CentOS)
...
FastDynaPage-ServerInfo: secj2kentwap07 - Wed 05/09/12 - 08:40:10 EDT
Last-Modified: Wed, 09 May 2012 12:40:10 GMT
Content-Type: text/html; charset=UTF-8
Actually I haven't found a proper way to get the date from the URL. So I took another approach: I try to find a feed (either from the site itself or through Google) that contains that URL as an item.
Then there is a good chance that I'll either get a pubDate or dc:date which contains the date of publication. This is then usable.
Thanks for all the input.