Compare commits

..
166 Commits
Author SHA1 Message Date
Francis Lachapelle daf3898674 Update ChangeLog 2016-11-23 11:34:37 -05:00
Francis Lachapelle 1d7af945da (js/css) Update generated files 2016-11-23 11:30:05 -05:00
Francis Lachapelle 5223fa9171 Preparation for release 3.2.2 2016-11-23 11:26:46 -05:00
Francis Lachapelle 3137e4cdbb Respect mailbox administration rights of user 2016-11-23 11:16:13 -05:00
Francis Lachapelle 85f842fbaf (i18n) Update translations 2016-11-23 10:01:15 -05:00
Francis Lachapelle 33e8169955 Formatting of SOGoDefaults.plist 2016-11-23 09:13:52 -05:00
InverseBot 3bbc625564 (js/css) Update generated files 2016-11-23 02:19:41 -05:00
Francis Lachapelle 8f805c97d9 (doc) Modification to counter bug with asciidoctor 2016-11-22 14:42:20 -05:00
Francis Lachapelle 5211e339fb (js,html) Use md-switch in Calendars list 2016-11-22 09:57:39 -05:00
Francis Lachapelle badab13cec (css) Improve folder subscription dialog 2016-11-22 09:56:55 -05:00
InverseBot 79a493b1ae (js/css) Update generated files 2016-11-22 02:03:25 -05:00
Francis Lachapelle 99b00254c5 (js) Persistent state of center list in Calendars
Fixes #3861
2016-11-21 16:24:54 -05:00
Francis Lachapelle 909b18bddf (js) More precaution in mail composer 2016-11-21 14:02:16 -05:00
InverseBot ac94c21e2a (js/css) Update generated files 2016-11-21 10:55:17 -05:00
Ludovic Marcotte f7c4486370 (feat) relaxed permission requirements for subscription synchronizations (fixes #3118 and #3180) 2016-11-21 10:46:13 -05:00
Francis Lachapelle 961b2226f0 (js) Disable submit button while saving a contact 2016-11-21 10:43:45 -05:00
Francis Lachapelle d032945bb4 Code cleanup in UIxMailFolderActions.m 2016-11-21 10:43:45 -05:00
Ludovic Marcotte b34f38f7fc (feat) added content "touching" capability (for developers) 2016-11-21 09:57:58 -05:00
Francis Lachapelle a09e6dee06 Merge pull request #225 from andryyy/patch-3
Disable auto-correct on iOS for username
2016-11-20 16:45:41 -05:00
André Peters 56c9f9d288 Disable auto-correct on iOS for username 2016-11-20 11:16:29 +01:00
InverseBot b425632318 (js/css) Update generated files 2016-11-18 01:22:20 -05:00
Francis Lachapelle ceb626638e (js) Improve tooltips of calendars list (sidenav) 2016-11-17 15:52:21 -05:00
Francis Lachapelle 40fc4bd231 (js) Improve sgAvatarImage (cont'd) 2016-11-17 15:47:06 -05:00
Francis Lachapelle 2f69c018be (css,js) Update md to v1.1.1-master-d774b76 2016-11-17 15:42:14 -05:00
Francis Lachapelle de209f5b95 (css) Fix display of top toolbar on Safari for iOS 2016-11-17 14:48:45 -05:00
InverseBot 9e6825e741 (js/css) Update generated files 2016-11-17 12:39:05 -05:00
Francis Lachapelle 0705f8f365 (html) Can't export a calendar subscription 2016-11-17 12:09:57 -05:00
Francis Lachapelle baf1d44548 Fix support for SOGoSieveFolderEncoding defaults
Fixed the following bugs in the mail filter editor:

1. Sieve folder encoding not respecting the SOGoSieveFolderEncoding
system defaults;
2. Conditions are still displayed when rule affects all messages;
3. Missing custom mail labels to "flag with" action.
2016-11-17 09:41:15 -05:00
InverseBot 5f70555975 (js/css) Update generated files 2016-11-17 01:12:02 -05:00
Ludovic Marcotte e4213c0077 Updated NEWS 2016-11-15 14:24:03 -05:00
Ludovic Marcotte bf42f225cb (fix) fixed broken string initializations (fixes #3899) 2016-11-15 14:18:57 -05:00
Francis Lachapelle 8ad0432e89 (i18n) Add missing string on login page 2016-11-15 10:09:17 -05:00
InverseBot 5b119f73b6 (js/css) Update generated files 2016-11-15 01:20:01 -05:00
Francis Lachapelle efbf0cc5a5 Fix required rights to move a calendar component
Fixes #3889
2016-11-14 17:26:28 -05:00
InverseBot 8436b0c9af (js/css) Update generated files 2016-11-12 01:21:26 -05:00
Francis Lachapelle 3bbd61cfd2 (js) Improve sgAvatarImage 2016-11-11 16:46:55 -05:00
Francis Lachapelle 0a75f5c4f7 Use md-colors in Administration module 2016-11-11 15:44:41 -05:00
Ludovic Marcotte 5df85fa31a (fix) fixed method usage 2016-11-11 09:48:38 -05:00
Ludovic Marcotte c9e9bb19d8 (fix) fix EAS download of attachments on iOS 10 2016-11-11 08:33:50 -05:00
InverseBot 3558eb1964 (js/css) Update generated files 2016-11-11 01:17:46 -05:00
Francis Lachapelle 6e48734504 Allow to hide center column on large screens 2016-11-10 16:04:29 -05:00
Ludovic Marcotte 5b02685d2b (feat) added sha256-crypt and sha512-crypt support 2016-11-10 10:53:07 -05:00
Francis Lachapelle c42507dbe4 (js) Add basic range selection with shift key 2016-11-10 10:42:23 -05:00
Francis Lachapelle 5961117208 (js) Fix uploading same attachment after removal
Fixes #3876
2016-11-10 10:21:33 -05:00
Francis Lachapelle a78621add4 (css,html) Improve display of mailboxes list
(cont'd)
2016-11-10 09:42:28 -05:00
InverseBot 8be2b0d254 (js/css) Update generated files 2016-11-10 01:21:45 -05:00
Francis Lachapelle bafb082abf (js) Improve sg-ripple-click directive 2016-11-09 16:26:31 -05:00
Francis Lachapelle bc10e0983a Fix Sieve activation with vacation start date
Fixes #3885
2016-11-09 16:25:16 -05:00
Francis Lachapelle 839384f77e (js) Zoomable custom avatar in card view 2016-11-09 11:22:17 -05:00
Francis Lachapelle fecbd49541 (js) Fix creation of note on existing card
Fixes #3886
2016-11-09 10:37:28 -05:00
Francis Lachapelle c596bacccb (css,html) Improve display of mailboxes list 2016-11-09 10:18:12 -05:00
InverseBot 7f2dabc30c (js/css) Update generated files 2016-11-09 01:17:32 -05:00
Francis Lachapelle c98ebb5f44 Update time zones to version 2016i 2016-11-08 15:29:54 -05:00
Francis Lachapelle 62a3057633 (js, html) Fix IMAP folder subscriptions manager
Fixes #3865
2016-11-08 15:20:41 -05:00
Francis Lachapelle ea64046df2 Fix links to newly added addressbook 2016-11-08 12:24:56 -05:00
Francis Lachapelle 8e33794400 (js) Fix links to newly subscribed calendar 2016-11-08 11:44:10 -05:00
Francis Lachapelle de9e3ed0b3 (html) Fix list avatar in users folders search 2016-11-08 11:42:28 -05:00
Ludovic Marcotte bc98c31f9e Updated NEWS 2016-11-08 10:31:33 -05:00
Ludovic Marcotte 0cdc6c9cd7 (fix) we now always use utf8 when sending IMIP messages 2016-11-08 08:49:23 -05:00
InverseBot 6a759553e5 (js/css) Update generated files 2016-11-08 01:17:57 -05:00
Francis Lachapelle f4580c8920 (js) Fix computation of week number 2016-11-07 15:01:09 -05:00
Francis Lachapelle 4a6e53934b (js) Mark multiple messages as seen
Fixes #3873
2016-11-07 12:14:00 -05:00
InverseBot 836e2ee275 (js/css) Update generated files 2016-11-05 01:17:43 -04:00
Francis Lachapelle 168a2ddd18 Fix handling of weekly recurrence rule with count
This fixes some corner cases when computing the freebusy and therefore
when verifying for resource conflicts.
2016-11-04 16:44:14 -04:00
Francis Lachapelle c35e074842 (js) Mark form as dirty when removing an attendee 2016-11-04 14:37:23 -04:00
Francis Lachapelle 963e3f4587 Update NEWS file 2016-11-04 14:36:50 -04:00
Francis Lachapelle 7c02b4bf88 (js) Disable submit btn while saving event or task
Fixes #3880
2016-11-04 14:29:54 -04:00
Ludovic Marcotte fb7a83f44a (fix) don't update c_nextalarm in quick table for email alarms 2016-11-04 08:41:47 -04:00
InverseBot a45d8c68f8 (js/css) Update generated files 2016-11-04 01:06:39 -04:00
Ludovic Marcotte 3d36a6dd23 (fix) reverted change for display alarms 2016-11-03 16:17:27 -04:00
Francis Lachapelle aff6a8b7c9 Untabify + indent 2016-11-03 16:02:51 -04:00
Francis Lachapelle e6b129c8eb Fix condition in weekly recurrence calculator 2016-11-03 15:26:38 -04:00
Ludovic Marcotte 70f5d748f2 Updated NEWS 2016-11-03 13:51:44 -04:00
Ludovic Marcotte 70b3ff4b5c (feat) we now also search on the send for EAS Search ops 2016-11-03 13:50:03 -04:00
Francis Lachapelle 21dd03eb81 (js) Improve reset of a reccurent component 2016-11-03 11:48:48 -04:00
Francis Lachapelle 57a4286cd5 Set default relation to START in alarm description 2016-11-03 11:48:17 -04:00
Francis Lachapelle c02c4aa834 Avoid mail notifications on superfluous changes
(cont'd)

Fixes #3790
2016-11-03 11:47:21 -04:00
InverseBot 42597abf8d (js/css) Update generated files 2016-11-03 01:17:54 -04:00
Ludovic Marcotte 78045b14be (feat) first pass at support for recurring events/tasks email alarms (fixes #1053) 2016-11-02 18:16:45 -04:00
Francis Lachapelle 8cadf5cbbd (js) Fix mail settings persistence of sorting 2016-11-02 15:11:01 -04:00
Francis Lachapelle 0a515d66bd Update ChangeLog 2016-11-02 12:29:35 -04:00
Francis Lachapelle 79d48dfc7c Preparation for release 3.2.1 2016-11-02 12:29:13 -04:00
Francis Lachapelle 7704b2c3cc (js/css) Update generated files 2016-11-02 12:25:47 -04:00
Francis Lachapelle 17e65da618 (js) Add CKEditor pastefromexcel plugin
Fixes #3854
2016-11-02 12:19:00 -04:00
Francis Lachapelle fd57625c54 Update comment 2016-11-02 12:02:57 -04:00
Francis Lachapelle 45c6c537f5 (html) Respect SOGoSearchMinimumWordLength 2016-11-02 12:01:22 -04:00
Francis Lachapelle 9fd42fdaa9 Update time zones to version 2016h 2016-11-02 11:59:21 -04:00
Francis Lachapelle 4179c88fa4 (i18n) Update translations 2016-11-02 11:30:57 -04:00
InverseBot 1aa2702a24 (js/css) Update generated files 2016-11-02 01:17:20 -04:00
Francis Lachapelle 81ff9e7f04 (css,js) Update md to v1.1.1-master-70cecda 2016-11-01 15:54:56 -04:00
Francis Lachapelle 651a1c3910 Avoid mail notifications on superfluous changes
Fixes #3790
2016-11-01 15:26:59 -04:00
Francis Lachapelle 1ee7693432 Fix support for recurrent tasks (cont'd)
Fixes #3864
2016-11-01 14:52:18 -04:00
Ludovic Marcotte 188dd986d2 (fix) cosmetic changes 2016-11-01 14:20:59 -04:00
Francis Lachapelle 1c689719ac (html) Add missing options to subscribed calendars
Fixes #3863
2016-11-01 12:09:08 -04:00
Francis Lachapelle 613d21b0c5 (i18n) Update translations 2016-11-01 12:06:15 -04:00
Francis Lachapelle 0e0f53cd98 Allow a mailbox to be deleted immediately
Fixes #3875
2016-11-01 11:40:59 -04:00
Francis Lachapelle 5c7147cccc (js) Restore immediate deletion of messages 2016-11-01 10:35:00 -04:00
Francis Lachapelle 67f566ec9d Minor cleanup to event/task editors 2016-11-01 09:27:16 -04:00
InverseBot 89fdbeee6b (js/css) Update generated files 2016-11-01 01:20:13 -04:00
Francis Lachapelle 1ccf5e369f (js) Move "ACLs saved" toast of admin to bottom 2016-10-31 15:19:03 -04:00
Francis Lachapelle 0b99dbfc99 Fix SOGoLoginModule when set to "Last used" 2016-10-31 15:19:03 -04:00
Ludovic Marcotte 067934026b Updated NEWS 2016-10-31 10:25:43 -04:00
Ludovic Marcotte 6200a5dbd7 (fix) support replied/forwarded flags using EAS (fixes #3796) 2016-10-31 10:24:16 -04:00
Ludovic Marcotte 90fcd572c3 (feat) initial support for EAS recurring tasks 2016-10-31 10:22:27 -04:00
InverseBot 5e27437b25 (js/css) Update generated files 2016-10-31 01:18:28 -04:00
InverseBot 81db98784b (js/css) Update generated files 2016-10-29 01:16:28 -04:00
Francis Lachapelle 5208e46d10 (js) Fix Resource conflict error handling 2016-10-28 11:47:40 -04:00
InverseBot f25c26b7bd (js/css) Update generated files 2016-10-27 01:17:26 -04:00
Francis Lachapelle ad5fc5b91f Add missing options to subscribed addressbooks
Fixes #3850
2016-10-26 17:27:25 -04:00
Francis Lachapelle 7310834ac6 (js) Fix auto-completion of list members
Fixes #3870
2016-10-26 15:48:40 -04:00
Francis Lachapelle 1d09a980da (js) Add minimumSearchLength to sgSettings value 2016-10-26 15:44:43 -04:00
Francis Lachapelle b44bf86164 Improve validation of mail account delegators 2016-10-26 15:42:50 -04:00
Francis Lachapelle 65a653ac0c (i18n) Update translations 2016-10-26 08:27:44 -04:00
InverseBot a30a4c34ba (js/css) Update generated files 2016-10-26 01:15:49 -04:00
Francis Lachapelle 3095bdb86c Cleanup UIxCalDayTable.wox 2016-10-25 17:34:21 -04:00
Francis Lachapelle 79a34f1e36 (js) Update sg-timepicker following md changes 2016-10-25 17:34:21 -04:00
Francis Lachapelle 524a481340 (js) Cleanup sg-search directive 2016-10-25 17:34:20 -04:00
Ludovic Marcotte 2949bef902 (fix) make sure consider non-void GUID 2016-10-25 11:18:49 -04:00
Francis Lachapelle c709b9c04b (js) Fix initialization of a new Card's note 2016-10-25 09:27:57 -04:00
Francis Lachapelle 4d0dcc4978 Fix support for recurrent tasks 2016-10-24 16:31:59 -04:00
Francis Lachapelle d779657fdf Fix tasks sorting by priority 2016-10-24 09:32:52 -04:00
InverseBot 0cbf5cca8d (js/css) Update generated files 2016-10-22 01:18:34 -04:00
Francis Lachapelle 36c5f72317 Fix some unlocalized strings
Fixes #3858
2016-10-21 10:55:59 -04:00
Francis Lachapelle 24e4c60baa Improve Preferences module and Mail account editor 2016-10-21 10:49:09 -04:00
Francis Lachapelle 6d695e813b (js) Fix addContactCategory of Preferences ctrl
Fixes #3859
2016-10-21 08:59:04 -04:00
InverseBot 8eebf6be00 (js/css) Update generated files 2016-10-21 01:58:06 -04:00
Francis Lachapelle 9ee271c278 (js) Improve toast of event alarm 2016-10-20 21:40:45 -04:00
Francis Lachapelle b301c5ec4c (js) Improve sg-ripple-click directive 2016-10-20 21:15:50 -04:00
Francis Lachapelle f326ca5ae5 Fix saving the note of a card
Fixes #3849
2016-10-20 18:28:58 -04:00
Francis Lachapelle 03661eef9e (js) Improve initialization of "vacation" dates 2016-10-20 18:08:32 -04:00
Ludovic Marcotte e6b1589e5f (fix) make sure we unencode @ signs before storing them in the ACL table 2016-10-20 10:27:26 -04:00
InverseBot c703a00659 (js/css) Update generated files 2016-10-20 01:17:32 -04:00
Francis Lachapelle 58ee225e6b (js) Improve dates constraints of vacation reply
Fixes #3841
2016-10-19 16:14:27 -04:00
Ludovic Marcotte 7ef245edc3 Updated NEWS file 2016-10-19 15:17:13 -04:00
Ludovic Marcotte 85ad17ad36 (fix) We never send IMIP reply when the "initiator" is Outlook 2013/2016 over 2016-10-19 15:13:28 -04:00
Ludovic Marcotte c1c2b3e849 (fix) only show the organizer field of an IMIP REPLY if one is defined 2016-10-19 10:08:34 -04:00
Ludovic Marcotte 6a47b61800 Fixed broken commits
d491a3fa49 and bda3be1c2d
2016-10-19 10:06:19 -04:00
InverseBot c57ffb4268 (js/css) Update generated files 2016-10-19 01:19:20 -04:00
Ludovic Marcotte d491a3fa49 (fix) more fixes with sogo-tool manage-eas + single store mode 2016-10-18 19:43:49 -04:00
Ludovic Marcotte bda3be1c2d (fix) improve handling of email folders without a parent 2016-10-18 11:22:22 -04:00
Ludovic Marcotte 21896929ad Updated NEWS 2016-10-18 11:19:39 -04:00
Ludovic Marcotte 1b63068b6c (fix) make sogo-tool manageeas work with single instance store 2016-10-18 11:18:44 -04:00
Francis Lachapelle 6f14696e0a (js) Improve dates constraints of vacation reply
Fixes #3846
2016-10-18 09:22:32 -04:00
InverseBot 6454cdb95f (js/css) Update generated files 2016-10-18 01:17:31 -04:00
Francis Lachapelle f902b90348 Fix vCard generation for tags with no type
Fixes #3826
2016-10-17 16:36:21 -04:00
Francis Lachapelle 1c0c7ab256 (js) Improve hotkeys cheat sheet
Add mapping for '*' character code and remove hotkeys from cheat sheet
when no callback is registered.
2016-10-17 15:38:13 -04:00
Francis Lachapelle 9a050620f0 (js) New hotkeys for message controller
Fixes #3834
2016-10-17 15:37:40 -04:00
Francis Lachapelle aa124d3273 (js) Improve ckEditor directive
Fixes #3839
2016-10-17 13:44:16 -04:00
Francis Lachapelle 37089e15c1 (html) Fix progress indicators of import dialogs 2016-10-17 12:06:13 -04:00
Ludovic Marcotte 069ea4142e Updated NEWS 2016-10-17 11:41:45 -04:00
Ludovic Marcotte b40d5e24d1 (fix) only consider SMTP proxyAddresses for AD (fixes #3842) 2016-10-17 11:41:07 -04:00
Ludovic Marcotte 8d6e0342ec (fix) improve memory usage when importing very large address books 2016-10-17 08:54:24 -04:00
InverseBot 984677796c (js/css) Update generated files 2016-10-16 01:57:59 -04:00
Francis Lachapelle 3e501be5a9 (js) Respect SearchMinWordLength in list editor
More precisely, the domain default is named SOGoSearchMinimumWordLength.
2016-10-14 16:35:57 -04:00
Francis Lachapelle 56283668d0 (js) Add constraints to dates of vacation reply
Fixes #3841
2016-10-14 11:49:23 -04:00
InverseBot fd55403ebd (js/css) Update generated files 2016-10-13 01:15:56 -04:00
Francis Lachapelle c50c3763b1 (js) Add automatic refresh of calendar view
We were only refreshing the selected component list, we now also refresh
the calendar view.
2016-10-12 11:01:59 -04:00
InverseBot e20d2281db (js/css) Update generated files 2016-10-12 02:08:16 -04:00
Francis Lachapelle 0f1eeae7bb (js) Update Angular to branch 1.5.x 2016-10-11 09:56:00 -04:00
InverseBot 7aec556a51 (js/css) Update generated files 2016-10-11 01:15:42 -04:00
Francis Lachapelle 292432df12 Don't remove the "c_component" condition in search
This will fix a bug when we'll support recurrent tasks!
2016-10-07 12:19:19 -04:00
Francis Lachapelle c3d349e3c6 Fix tasks list when some weekdays are disabled 2016-10-07 12:08:40 -04:00
InverseBot 75326e0194 (js/css) Update generated files 2016-10-06 01:22:48 -04:00
Francis Lachapelle 84412cc538 Improve NSArray comparison in Contacts module 2016-10-05 15:38:54 -04:00
Francis Lachapelle 64434bbfad Fix sort by email with LDAP sources 2016-10-05 15:25:57 -04:00
InverseBot cc77f5aa16 (js/css) Update generated files 2016-10-04 00:22:40 -04:00
689 changed files with 23057 additions and 13711 deletions

No files matched your search

+194 -45
View File
@@ -51,6 +51,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <SOGo/SOGoSystemDefaults.h>
#import <SOGo/SOGoUser.h>
#import <SOGo/SOGoCacheGCSObject.h>
#import <SOGo/SOGoPermissions.h>
#import <Appointments/iCalEntityObject+SOGo.h>
#import <Appointments/SOGoAppointmentObject.h>
@@ -272,7 +273,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
NSMutableDictionary *folderMetadata, *dateCache, *syncCache, *uidCache, *allValues;
NSString *clientId, *serverId, *easId;
NSArray *additions;
NSArray *additions, *roles;
id anAddition, sogoObject, o;
BOOL is_new;
@@ -296,6 +297,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
serverId = [NSString stringWithFormat: @"%@.vcf", [theCollection globallyUniqueObjectId]];
sogoObject = [[SOGoContactGCSEntry alloc] initWithName: serverId
inContainer: theCollection];
[sogoObject autorelease];
o = [sogoObject vCard];
}
break;
@@ -319,6 +321,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
sogoObject = [[SOGoAppointmentObject alloc] initWithName: [serverId sanitizedServerIdWithType: theFolderType]
inContainer: theCollection];
[sogoObject autorelease];
o = [sogoObject component: YES secure: NO];
}
else
@@ -333,6 +336,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
serverId = [NSString stringWithFormat: @"%@.ics", [theCollection globallyUniqueObjectId]];
sogoObject = [[SOGoTaskObject alloc] initWithName: serverId
inContainer: theCollection];
[sogoObject autorelease];
o = [sogoObject component: YES secure: NO];
}
break;
@@ -344,11 +348,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
abort();
}
}
[o takeActiveSyncValues: allValues inContext: context];
[sogoObject setIsNew: is_new];
[sogoObject saveComponent: o];
roles = [theCollection aclsForUser: [[context activeUser] login]];
if (![roles containsObject: SOGoRole_ObjectCreator] && ![[sogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]])
{
// This will trigger a delete-command to remove the component without proper permission.
// FIXME: ultimately, we need to find a better way to create a phantom object in the user's calendar
// and delete it to keep the transactional process in shape. We could also create a deleted one right way
// We strip any attendees from the values as we don't want to send bogus invitation emails
[allValues removeObjectForKey: @"Attendees"];
[o takeActiveSyncValues: allValues inContext: context];
[sogoObject setIsNew: YES];
[sogoObject saveComponent: o];
[sogoObject delete];
}
else
{
[o takeActiveSyncValues: allValues inContext: context];
[sogoObject setIsNew: is_new];
[sogoObject saveComponent: o];
}
// Update syncCache
folderMetadata = [self _folderMetadataForKey: [self _getNameInCache: theCollection withType: theFolderType]];
@@ -388,6 +409,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[syncCache setObject: [NSString stringWithFormat:@"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId];
[dateCache setObject: [NSCalendarDate date] forKey: serverId];
// make sure to pickup the delete immediately if we don't have proper permission to add
if (![roles containsObject: SOGoRole_ObjectCreator] && ![[sogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]])
[folderMetadata setObject: [NSNumber numberWithBool: YES] forKey: @"MoreAvailable"];
[self _setFolderMetadata: folderMetadata forKey: [self _getNameInCache: theCollection withType: theFolderType]];
// Everything is fine, lets generate our response
@@ -444,7 +469,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
NSDictionary *allChanges;
NSString *serverId, *easId, *origServerId, *mergedFolder;
NSArray *changes, *a;
NSArray *changes, *a, *roles;
id aChange, o, sogoObject;
NSMutableDictionary *folderMetadata, *syncCache, *uidCache;
@@ -495,7 +520,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
if (debugOn)
[self logWithFormat: @"EAS - Found serverId: %@ for easId: %@", serverId, easId];
}
else
serverId = easId;
@@ -519,32 +543,60 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
case ActiveSyncContactFolder:
{
o = [sogoObject vCard];
[o takeActiveSyncValues: allChanges inContext: context];
[sogoObject saveComponent: o];
roles = [sogoObject aclsForUser:[[context activeUser] login]];
o = [sogoObject vCard];
if ([syncCache objectForKey: serverId])
[syncCache setObject: [NSString stringWithFormat:@"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId];
// Don't update the component without proper permission
if (([roles containsObject: SOGoRole_ObjectEditor] || [[sogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]]))
{
[o takeActiveSyncValues: allChanges inContext: context];
[sogoObject saveComponent: o];
if ([syncCache objectForKey: serverId])
[syncCache setObject: [NSString stringWithFormat: @"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId];
}
// Trigger a change-command to override client changes since we don't have permissions
else
[sogoObject touch];
}
break;
case ActiveSyncEventFolder:
case ActiveSyncTaskFolder:
{
roles = [sogoObject aclsForUser:[[context activeUser] login]];
o = [sogoObject component: NO secure: NO];
if (theFolderType == ActiveSyncEventFolder &&
[(iCalEvent *)o userIsAttendee: [context activeUser]])
{
[o changeParticipationStatus: allChanges inContext: context component: sogoObject];
// Don't update the component without proper permission
if ([roles containsObject: SOGoCalendarRole_ComponentResponder] || [[sogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]])
{
[o changeParticipationStatus: allChanges inContext: context component: sogoObject];
if ([syncCache objectForKey: serverId])
[syncCache setObject: [NSString stringWithFormat: @"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId];
}
// Trigger a change-command to override client changes since we don't have permissions
else
[sogoObject touch];
}
else
{
[o takeActiveSyncValues: allChanges inContext: context];
[sogoObject saveComponent: o];
}
// Don't update the component without proper permission
if ([roles containsObject: SOGoCalendarRole_ComponentModifier] || [[sogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]])
{
[o takeActiveSyncValues: allChanges inContext: context];
[sogoObject saveComponent: o];
if ([syncCache objectForKey: serverId])
[syncCache setObject: [NSString stringWithFormat:@"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId];
if ([syncCache objectForKey: serverId])
[syncCache setObject: [NSString stringWithFormat: @"%f", [[sogoObject lastModified] timeIntervalSince1970]] forKey: serverId];
}
// Trigger a change-command to override client changes since we don't have permissions
else
[sogoObject touch];
}
}
break;
case ActiveSyncMailFolder:
@@ -559,13 +611,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
modseq = [[[result objectForKey: @"RawResponse"] objectForKey: @"fetch"] objectForKey: @"modseq"];
if (modseq && [syncCache objectForKey: serverId])
[syncCache setObject: [modseq stringValue] forKey: serverId];
[syncCache setObject: [modseq stringValue] forKey: serverId];
}
}
[self _setFolderMetadata: folderMetadata forKey: [self _getNameInCache: theCollection withType: theFolderType]];
[theBuffer appendString: @"<Change>"];
[theBuffer appendFormat: @"<ServerId>%@</ServerId>", origServerId];
[theBuffer appendFormat: @"<Status>%d</Status>", 1];
@@ -604,10 +655,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
withType: (SOGoMicrosoftActiveSyncFolderType) theFolderType
inBuffer: (NSMutableString *) theBuffer
{
id aDelete, sogoObject, value;
NSArray *deletions, *a;
NSString *serverId, *easId, *origServerId, *mergedFolder;
NSArray *deletions, *a, *roles;
id aDelete, sogoObject, value;
BOOL deletesAsMoves, useTrash;
int i;
@@ -616,11 +666,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if ([deletions count])
{
NSMutableDictionary *folderMetadata, *dateCache, *syncCache, *uidCache;
NSMutableDictionary *folderMetadata, *uidCache;
folderMetadata = [self _folderMetadataForKey: [self _getNameInCache: theCollection withType: theFolderType]];
syncCache = [folderMetadata objectForKey: @"SyncCache"];
dateCache = [folderMetadata objectForKey: @"DateCache"];
uidCache = [folderMetadata objectForKey: @"UidCache"];
// From the documention, if DeletesAsMoves is missing, we must assume it's a YES.
@@ -677,22 +725,44 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if (![sogoObject isKindOfClass: [NSException class]])
{
// FIXME: handle errors here
if (deletesAsMoves && theFolderType == ActiveSyncMailFolder)
[(SOGoMailFolder *)[sogoObject container] deleteUIDs: [NSArray arrayWithObjects: serverId, nil] useTrashFolder: &useTrash inContext: context];
else if (theFolderType == ActiveSyncEventFolder || theFolderType == ActiveSyncTaskFolder)
{
[sogoObject prepareDelete];
[sogoObject delete];
}
else
[sogoObject delete];
// Remove the cache entry. If the delete fails due to permission issues we do a fake update to trigger
// an add-command.
NSMutableDictionary *folderMetadata, *dateCache, *syncCache;
folderMetadata = [self _folderMetadataForKey: [self _getNameInCache: theCollection withType: theFolderType]];
syncCache = [folderMetadata objectForKey: @"SyncCache"];
dateCache = [folderMetadata objectForKey: @"DateCache"];
[syncCache removeObjectForKey: serverId];
[dateCache removeObjectForKey: serverId];
//[uidCache removeObjectForKey: serverId];
[self _setFolderMetadata: folderMetadata forKey: [self _getNameInCache: theCollection withType: theFolderType]];
// FIXME: handle errors here
if (deletesAsMoves && theFolderType == ActiveSyncMailFolder)
{
[(SOGoMailFolder *)[sogoObject container] deleteUIDs: [NSArray arrayWithObjects: serverId, nil] useTrashFolder: &useTrash inContext: context];
}
else if (theFolderType == ActiveSyncEventFolder || theFolderType == ActiveSyncTaskFolder || theFolderType == ActiveSyncContactFolder)
{
roles = [theCollection aclsForUser:[[context activeUser] login]];
// We check ACLs on the collection and not on the SOGo object itself, as the add/delete rights are on the collection itself
if (![roles containsObject: SOGoRole_ObjectEraser] || ![[sogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]])
{
// This will trigger an add-command to re-add the component to the client
[sogoObject touch];
}
else
{
if (!(theFolderType == ActiveSyncContactFolder))
[sogoObject prepareDelete];
[sogoObject delete];
}
}
else
[sogoObject delete];
[theBuffer appendString: @"<Delete>"];
[theBuffer appendFormat: @"<ServerId>%@</ServerId>", origServerId];
[theBuffer appendFormat: @"<Status>%d</Status>", 1];
@@ -991,7 +1061,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
}
}
}
} // if (cleanup_needed) ...
return_count = 0;
component = nil;
@@ -1084,8 +1154,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
continue;
}
return_count++;
sogoObject = [theCollection lookupName: [uid sanitizedServerIdWithType: theFolderType]
inContext: context
acquire: 0];
@@ -1093,10 +1161,34 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if (theFolderType == ActiveSyncContactFolder)
componentObject = [sogoObject vCard];
else
componentObject = [sogoObject component: NO secure: NO];
componentObject = [sogoObject component: NO secure: YES];
[syncCache setObject: [component objectForKey: @"c_lastmodified"] forKey: uid];
// We have got a null componentObject, i.e. we have no permission to view the calendar entry.
// For updated calendar entries we have to remove it from the client and for new entries we just ignore them.
if (!componentObject)
{
if (updated)
{
[s appendString: @"<Delete xmlns=\"AirSync:\">"];
if (![[theCollection nameInContainer] isEqualToString: @"personal"] && theMergeFolder)
[s appendFormat: @"<ServerId xmlns=\"AirSync:\">%@{+}%@</ServerId>", [theCollection nameInContainer], easId];
else
[s appendFormat: @"<ServerId xmlns=\"AirSync:\">%@</ServerId>", easId];
[s appendString: @"</Delete>"];
[syncCache removeObjectForKey: uid];
[dateCache removeObjectForKey: uid];
return_count++;
}
DESTROY(pool);
continue;
}
// No need to set dateCache for Contacts
if ((theFolderType == ActiveSyncEventFolder || theFolderType == ActiveSyncTaskFolder))
{
@@ -1703,6 +1795,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
first_sync = NO;
// We check if the folder permissions have changed since the last sync. If so, we simply clear the cached data
// and a "full sync" will be issued by the EAS client as it'll repull all elements from the collection.
// We don't need to check for contact folder. Either it has View_object or it will be removed by FolderSync.
if ((folderType == ActiveSyncEventFolder || folderType == ActiveSyncTaskFolder) && ![[collection ownerInContext: context] isEqualToString: [[context activeUser] login]])
{
NSArray *folderRoles, *folderRolesInCache;
folderRoles = [collection aclsForUser: [[context activeUser] login]];
folderRolesInCache = [folderMetadata objectForKey: @"FolderPermissions"];
if (![folderRoles isEqualToArray: folderRolesInCache])
{
if (debugOn)
[self logWithFormat: @"EAS - Folder permission change: %@ (%@ <> %@). Refresh folder", [collection nameInContainer], folderRoles, folderRolesInCache];
// Cleanup metadata
[folderMetadata removeObjectForKey: @"SyncKey"];
[folderMetadata removeObjectForKey: @"SyncCache"];
[folderMetadata removeObjectForKey: @"DateCache"];
[folderMetadata removeObjectForKey: @"MoreAvailable"];
[folderMetadata setObject: folderRoles forKey: @"FolderPermissions"];
[self _setFolderMetadata: folderMetadata forKey: folderKey];
}
}
if ([syncKey isEqualToString: @"0"])
{
davCollectionTag = @"-1";
@@ -1841,7 +1958,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Windows phones don't like empty Responses tags - such as: <Responses></Responses>.
// We only generate this tag when there is a response
if (processed && [s length])
[commandsBuffer appendFormat: @"<Responses>%@</Responses>", s];
{
[commandsBuffer appendFormat: @"<Responses>%@</Responses>", s];
getChanges = NO;
}
}
@@ -1984,7 +2104,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if (!(mfCollection && [mfCollection synchronize]))
{
if (debugOn)
[self logWithFormat: @"EAS - Folder %@ not found. Reset peronal folder to cleanup", folderName];
[self logWithFormat: @"EAS - Folder %@ not found. Reset personal folder to cleanup", folderName];
davCollectionTag = @"0";
*changeDetected = YES;
@@ -2002,6 +2122,35 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
break;
}
// Here we don't need to check for contact folder. Either it has View_object or it will be removed by folersync.
if ((folderType == ActiveSyncEventFolder || folderType == ActiveSyncTaskFolder) && ![[mfCollection ownerInContext: context] isEqualToString: [[context activeUser] login]])
{
NSArray *folderRoles, *folderRolesInCache;
folderRoles = [mfCollection aclsForUser: [[context activeUser] login]];
folderRolesInCache = [folderMetadata objectForKey: @"FolderPermissions"];
if (![folderRoles isEqualToArray: folderRolesInCache])
{
if (debugOn)
[self logWithFormat: @"EAS - Folder permission change: %@ (%@ <> %@). Refresh folder", [collection nameInContainer], folderRoles, folderRolesInCache];
davCollectionTag = @"0";
*changeDetected = YES;
status = 3;
// Cleanup metadata
[folderMetadata removeObjectForKey: @"SyncKey"];
[folderMetadata removeObjectForKey: @"SyncCache"];
[folderMetadata removeObjectForKey: @"DateCache"];
[folderMetadata removeObjectForKey: @"MoreAvailable"];
[folderMetadata setObject: folderRoles forKey: @"FolderPermissions"];
[self _setFolderMetadata: folderMetadata forKey: folderKey];
break;
}
}
if (debugOn)
[self logWithFormat: @"EAS - Merging folder %@ into personal folder", folderName];
@@ -2062,7 +2211,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cacheUpdateNeeded = YES;
}
}
} // end if
} // if (![changeBuffer length]) ...
if (*changeDetected || cacheUpdateNeeded)
[self _setFolderMetadata: folderMetadata forKey: folderKey];
+156 -110
View File
@@ -82,6 +82,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <SOGo/WORequest+SOGo.h>
#import <SOGo/NSArray+Utilities.h>
#import <SOGo/NSString+Utilities.h>
#import <SOGo/SOGoPermissions.h>
#import <Appointments/SOGoAppointmentFolder.h>
#import <Appointments/SOGoAppointmentFolders.h>
@@ -138,7 +139,7 @@ void handle_eas_terminate(int signum)
- (void) _setFolderMetadata: (NSDictionary *) theFolderMetadata forKey: (NSString *) theFolderKey;
- (void) _setOrUnsetSyncRequest: (BOOL) set
collections: (NSArray *) collections;
- (NSString *) _getNameInCache: (id) theCollection withType: (SOGoMicrosoftActiveSyncFolderType) theFolderType;
@end
@@ -718,8 +719,8 @@ void handle_eas_terminate(int signum)
- (void) _flattenFolders: (NSArray *) theFolders
into: (NSMutableArray *) theTarget
parent: (NSString *) theParent
parentType: (NSString *) theParentType
parent: (NSDictionary *) theParent
existingParent: (NSString *) theExistingParent
{
NSArray *o;
int i;
@@ -728,16 +729,30 @@ void handle_eas_terminate(int signum)
for (i = 0; i < [theFolders count]; i++)
{
if (theParent && ![theParentType isEqualToString: @"additional"])
[[theFolders objectAtIndex: i] setObject: theParent forKey: @"parent"];
if ([theParentType isEqualToString: @"additional"])
[[theFolders objectAtIndex: i] setObject: [[theFolders objectAtIndex: i] objectForKey: @"path"] forKey: @"name"];
if ([theParent objectForKey: @"path"] && ![[theParent objectForKey: @"type"] isEqualToString: @"additional"])
{
[[theFolders objectAtIndex: i] setObject: [theParent objectForKey: @"path"] forKey: @"parent"];
theExistingParent = [theParent objectForKey: @"path"];
}
else if (theExistingParent)
{
[[theFolders objectAtIndex: i] setObject: theExistingParent forKey: @"parent"];
[[theFolders objectAtIndex: i] setObject:
[[[[theFolders objectAtIndex: i] objectForKey: @"path"] substringFromIndex: [theExistingParent length]+1]stringByReplacingOccurrencesOfString:@"/" withString:@"."]
forKey: @"name"];
}
else if (![[[theFolders objectAtIndex: i] objectForKey: @"type"] isEqualToString: @"otherUsers"] &&
![[[theFolders objectAtIndex: i] objectForKey: @"type"] isEqualToString: @"shared"])
{
[[theFolders objectAtIndex: i] setObject:
[[[theFolders objectAtIndex: i] objectForKey: @"path"] stringByReplacingOccurrencesOfString:@"/" withString:@"."]
forKey: @"name"];
}
o = [[theFolders objectAtIndex: i] objectForKey: @"children"];
if (o)
[self _flattenFolders: o into: theTarget parent: [[theFolders objectAtIndex: i] objectForKey: @"path"] parentType: [[theFolders objectAtIndex: i] objectForKey: @"type"]];
[self _flattenFolders: o into: theTarget parent: [theFolders objectAtIndex: i] existingParent: theExistingParent];
}
}
@@ -759,19 +774,18 @@ void handle_eas_terminate(int signum)
SOGoMailAccount *accountFolder;
NSMutableString *s, *commands;
SOGoUserFolder *userFolder;
SoSecurityManager *sm;
NSArray *allKeys, *roles;
SOGoCacheGCSObject *o;
NSArray *allKeys;
id currentFolder;
NSData *d;
int status, command_count, i, type, fi, count;
BOOL first_sync;
sm = [SoSecurityManager sharedSecurityManager];
metadata = [self globalMetadataForDevice];
syncKey = [[(id)[theDocumentElement getElementsByTagName: @"SyncKey"] lastObject] textValue];
s = [NSMutableString string];
personalFolderName = [[[context activeUser] personalCalendarFolderInContext: context] nameInContainer];
first_sync = NO;
status = 1;
@@ -811,7 +825,7 @@ void handle_eas_terminate(int signum)
}
allFoldersMetadata = [NSMutableArray array];
[self _flattenFolders: [accountFolder allFoldersMetadata: SOGoMailStandardListing] into: allFoldersMetadata parent: nil parentType: nil];
[self _flattenFolders: [accountFolder allFoldersMetadata: SOGoMailStandardListing] into: allFoldersMetadata parent: nil existingParent: nil];
// Get GUIDs of folder (IMAP)
// e.g. {folderINBOX = folder6b93c528176f1151c7260000aef6df92}
@@ -922,15 +936,8 @@ void handle_eas_terminate(int signum)
[o save];
}
// Remove the folder from device if it doesn't exist, we don't want to sync it, or it doesn't have the proper permissions
if (!currentFolder ||
![currentFolder synchronize] ||
[sm validatePermission: SoPerm_DeleteObjects
onObject: currentFolder
inContext: context] ||
[sm validatePermission: SoPerm_AddDocumentsImagesAndFiles
onObject: currentFolder
inContext: context])
// Remove the folder from device if it doesn't exist, or don't want to sync it.
if (!currentFolder || !([currentFolder synchronize]))
{
// Don't send a delete when MergedFoler is set, we have done it above.
// Windows Phones don't like when a <Delete>-folder is sent twice.
@@ -942,6 +949,22 @@ void handle_eas_terminate(int signum)
[o destroy];
}
// Remove the folder from device if it is a contact folder and we have no SOGoRole_ObjectViewer.
if ([currentFolder isKindOfClass: [SOGoContactGCSFolder class]] && ![[currentFolder ownerInContext: context] isEqualToString: [[context activeUser] login]])
{
roles = [currentFolder aclsForUser: [[context activeUser] login]];
if (![roles containsObject: SOGoRole_ObjectViewer])
{
// Don't send a delete when MergedFoler is set, we have done it above.
// Windows Phones don't like when a <Delete>-folder is sent twice.
if (![[[o properties] objectForKey: @"MergedFolder"] isEqualToString: @"2"])
{
[commands appendFormat: @"<Delete><ServerId>%@</ServerId></Delete>", [cKey stringByEscapingURL] ];
command_count++;
}
[o destroy];
}
}
}
}
}
@@ -1049,16 +1072,17 @@ void handle_eas_terminate(int signum)
command_count++;
}
}
}
personalFolderName = [[[context activeUser] personalCalendarFolderInContext: context] nameInContainer];
folders = [[[[[context activeUser] homeFolderInContext: context] lookupName: @"Calendar" inContext: context acquire: NO] subFolders] mutableCopy];
[folders autorelease];
// We get the list of subscribed calendars
folders = [[[[[context activeUser] homeFolderInContext: context] lookupName: @"Calendar" inContext: context acquire: NO] subFolders] mutableCopy];
[folders autorelease];
[folders addObjectsFromArray: [[[[context activeUser] homeFolderInContext: context] lookupName: @"Contacts" inContext: context acquire: NO] subFolders]];
// We get the list of subscribed address books
[folders addObjectsFromArray: [[[[context activeUser] homeFolderInContext: context] lookupName: @"Contacts" inContext: context acquire: NO] subFolders]];
// We remove all the folders that aren't GCS-ones, that we don't want to synchronize and
// the ones without write/delete permissions.
// contact folder without SOGoRole_ObjectViewer.
count = [folders count]-1;
for (; count >= 0; count--)
{
@@ -1070,26 +1094,28 @@ void handle_eas_terminate(int signum)
continue;
if (![currentFolder isKindOfClass: [SOGoGCSFolder class]] ||
![currentFolder synchronize] ||
[sm validatePermission: SoPerm_DeleteObjects
onObject: currentFolder
inContext: context] ||
[sm validatePermission: SoPerm_AddDocumentsImagesAndFiles
onObject: currentFolder
inContext: context])
![currentFolder synchronize])
{
[folders removeObjectAtIndex: count];
}
// Remove the folder from the device if it is a contact folder and we have no SOGoRole_ObjectViewer access right.
if ([currentFolder isKindOfClass: [SOGoContactGCSFolder class]] && ![[currentFolder ownerInContext: context] isEqualToString: [[context activeUser] login]])
{
roles = [currentFolder aclsForUser: [[context activeUser] login]];
if (![roles containsObject: SOGoRole_ObjectViewer])
[folders removeObjectAtIndex: count];
}
}
count = [folders count]-1;
for (fi = 0; fi <= count ; fi++)
{
if ([[folders objectAtIndex:fi] isKindOfClass: [SOGoAppointmentFolder class]])
name = [NSString stringWithFormat: @"vevent/%@", [[folders objectAtIndex:fi] nameInContainer]];
if ([[folders objectAtIndex: fi] isKindOfClass: [SOGoAppointmentFolder class]])
name = [NSString stringWithFormat: @"vevent/%@", [[folders objectAtIndex: fi] nameInContainer]];
else
name = [NSString stringWithFormat: @"vcard/%@", [[folders objectAtIndex:fi] nameInContainer]];
name = [NSString stringWithFormat: @"vcard/%@", [[folders objectAtIndex: fi] nameInContainer]];
key = [NSString stringWithFormat: @"%@+%@", [context objectForKey: @"DeviceId"], name];
o = [SOGoCacheGCSObject objectWithName: key inContainer: nil];
@@ -1098,9 +1124,9 @@ void handle_eas_terminate(int signum)
[o reloadIfNeeded];
// Decide between add and change
if (![[o properties ] objectForKey: @"displayName"] || first_sync)
if (![[o properties ] objectForKey: @"displayName"] || first_sync)
operation = @"Add";
else if (![[[o properties ] objectForKey: @"displayName"] isEqualToString: [[folders objectAtIndex:fi] displayName]])
else if (![[[o properties ] objectForKey: @"displayName"] isEqualToString: [[folders objectAtIndex:fi] displayName]])
operation = @"Update";
else
operation = nil;
@@ -1115,7 +1141,7 @@ void handle_eas_terminate(int signum)
command_count++;
[[o properties ] setObject: [[folders objectAtIndex:fi] displayName] forKey: @"displayName"];
[[o properties ] setObject: [[folders objectAtIndex:fi] displayName] forKey: @"displayName"];
[o save];
name = [NSString stringWithFormat: @"vtodo/%@", [[folders objectAtIndex:fi] nameInContainer]];
@@ -1495,6 +1521,7 @@ void handle_eas_terminate(int signum)
if ([[theResponse headerForKey: @"Content-Type"] isEqualToString:@"application/vnd.ms-sync.multipart"])
{
NSData *d;
d = [currentBodyPart fetchBLOBWithPeek: YES];
[s appendFormat: @"<Part>%d</Part>", i+1];
@@ -1504,9 +1531,15 @@ void handle_eas_terminate(int signum)
else
{
NSString *a;
a = [[currentBodyPart fetchBLOBWithPeek: YES] activeSyncRepresentationInContext: context];
[s appendFormat: @"<Range>0-%d</Range>", [a length]-1];
// Don't send Range when not included in the request. Sending it will cause issue on iOS 10
// when downloading attachments. iOS 10 will first report an error upon the first download
// and then, it'll work. This makes it work the first time the attachment is downlaoded.
if ([[[(id)[aFetch getElementsByTagName: @"Range"] lastObject] textValue] length])
[s appendFormat: @"<Range>0-%d</Range>", [a length]-1];
[s appendFormat: @"<Data>%@</Data>", a];
}
}
@@ -1874,7 +1907,6 @@ void handle_eas_terminate(int signum)
SOGoMicrosoftActiveSyncFolderType srcFolderType, dstFolderType;
id <DOMElement> aMoveOperation;
NSArray *moveOperations;
SoSecurityManager *sm;
NSMutableString *s;
NSData *d;
int i;
@@ -2030,14 +2062,13 @@ void handle_eas_terminate(int signum)
// Save dstMessageId in cache - it will help to recover if the request fails before the response can be sent to client
[newSuccessfulMoveItemsOps setObject: dstMessageId forKey: srcMessageId];
}
}
else
{
id srcCollection, dstCollection, srcSogoObject, dstSogoObject;
NSArray *elements;
NSArray *elements, *srcObjectRoles, *dstObjectRoles;
NSString *newUID, *origSrcMessageId;
NSMutableDictionary *srcUidCache, *dstUidCache, *dstSyncCache;
NSMutableDictionary *srcUidCache, *dstUidCache, *srcSyncCache, *srcDateCache, *dstSyncCache;
NSException *ex;
unsigned int count, max;
@@ -2077,81 +2108,92 @@ void handle_eas_terminate(int signum)
inContext: context
acquire: NO];
sm = [SoSecurityManager sharedSecurityManager];
if (![sm validatePermission: SoPerm_DeleteObjects
onObject: srcCollection
inContext: context] &&
![srcSogoObject isKindOfClass: [NSException class]])
if (![srcSogoObject isKindOfClass: [NSException class]])
{
if (![sm validatePermission: SoPerm_AddDocumentsImagesAndFiles
onObject: dstCollection
inContext: context])
newUID = [srcSogoObject globallyUniqueObjectId];
dstSogoObject = [[SOGoAppointmentObject alloc] initWithName: [newUID sanitizedServerIdWithType: srcFolderType]
inContainer: dstCollection];
dstObjectRoles = [dstSogoObject aclsForUser: [[context activeUser] login]];
srcObjectRoles = [srcSogoObject aclsForUser: [[context activeUser] login]];
if (([dstObjectRoles containsObject: SOGoRole_ObjectCreator] || [[dstSogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]]) &&
([srcObjectRoles containsObject: SOGoRole_ObjectEraser] || [[srcSogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]]))
{
newUID = [srcSogoObject globallyUniqueObjectId];
dstSogoObject = [[SOGoAppointmentObject alloc] initWithName: [newUID sanitizedServerIdWithType: srcFolderType]
inContainer: dstCollection];
elements = [[srcSogoObject calendar: NO secure: NO] allObjects];
max = [elements count];
for (count = 0; count < max; count++)
[[elements objectAtIndex: count] setUid: newUID];
ex = [dstSogoObject saveCalendar: [srcSogoObject calendar: NO secure: NO]];
if (!ex)
{
ex = [srcSogoObject delete];
if (dstUidCache)
{
[dstUidCache setObject: newUID forKey: newUID];
if (debugOn)
[self logWithFormat: @"EAS - Saved new easId: %@ for serverId: %@", newUID, newUID];
}
[dstSyncCache setObject: [dstFolderMetadata objectForKey: @"SyncKey"] forKey: newUID];
[s appendFormat: @"<SrcMsgId>%@</SrcMsgId>", origSrcMessageId];
[s appendFormat: @"<DstMsgId>%@</DstMsgId>", newUID];
[s appendFormat: @"<Status>%d</Status>", 3];
// Save dstMessageId in cache - it will help to recover if the request fails before the response can be sent to client
[newSuccessfulMoveItemsOps setObject: newUID forKey: srcMessageId];
}
else
{
if ([prevSuccessfulMoveItemsOps objectForKey: srcMessageId])
{
// Move failed but we can recover the dstMessageId from previous request
[s appendFormat: @"<SrcMsgId>%@</SrcMsgId>", origSrcMessageId];
[s appendFormat: @"<DstMsgId>%@</DstMsgId>", [prevSuccessfulMoveItemsOps objectForKey: srcMessageId] ];
[s appendFormat: @"<Status>%d</Status>", 3];
[newSuccessfulMoveItemsOps setObject: [prevSuccessfulMoveItemsOps objectForKey: srcMessageId] forKey: srcMessageId];
if (dstUidCache)
{
[dstUidCache setObject: newUID forKey: newUID];
if (debugOn)
[self logWithFormat: @"EAS - Saved new easId: %@ for serverId: %@", newUID, newUID];
}
}
else
{
[s appendFormat: @"<SrcMsgId>%@</SrcMsgId>", origSrcMessageId];
[s appendFormat: @"<Status>%d</Status>", 1];
}
}
}
}
else
{
[s appendFormat: @"<SrcMsgId>%@</SrcMsgId>", origSrcMessageId];
[s appendFormat: @"<Status>%d</Status>", 2];
if (debugOn)
[self logWithFormat: @"EAS - MoveItem failed due to missing permissions: srcMessageId: %@ dstMessageId: %@", srcMessageId, newUID];
// Make sure that the entry gets re-added to the source folder.
srcSyncCache = [srcFolderMetadata objectForKey: @"SyncCache"];
srcDateCache = [srcFolderMetadata objectForKey: @"DateCache"];
[srcSyncCache removeObjectForKey: srcMessageId];
[srcDateCache removeObjectForKey: srcMessageId];
// Make sure that the entry gets removed from the destination folder.
[dstSyncCache setObject: [dstFolderMetadata objectForKey: @"SyncKey"] forKey: newUID];
ex = [dstSogoObject saveCalendar: [srcSogoObject calendar: NO secure: YES]];
ex = [dstSogoObject delete];
}
}
if (!ex && ![srcSogoObject isKindOfClass: [NSException class]])
{
if (([dstObjectRoles containsObject: SOGoRole_ObjectCreator] || [[dstSogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]]) &&
([srcObjectRoles containsObject: SOGoRole_ObjectEraser] || [[srcSogoObject ownerInContext: context] isEqualToString: [[context activeUser] login]]))
ex = [srcSogoObject delete];
else
ex = [srcSogoObject touch]; // make sure to include the object in next sync.
if (dstUidCache)
{
[dstUidCache setObject: newUID forKey: newUID];
if (debugOn)
[self logWithFormat: @"EAS - Saved new easId: %@ for serverId: %@", newUID, newUID];
}
[dstSyncCache setObject: [dstFolderMetadata objectForKey: @"SyncKey"] forKey: newUID];
[s appendFormat: @"<SrcMsgId>%@</SrcMsgId>", origSrcMessageId];
[s appendFormat: @"<DstMsgId>%@</DstMsgId>", newUID];
[s appendFormat: @"<Status>%d</Status>", 3];
// Save dstMessageId in cache - it will help to recover if the request fails before the response can be sent to client
[newSuccessfulMoveItemsOps setObject: newUID forKey: srcMessageId];
}
else
{
[s appendFormat: @"<SrcMsgId>%@</SrcMsgId>", origSrcMessageId];
[s appendFormat: @"<Status>%d</Status>", 1];
if ([prevSuccessfulMoveItemsOps objectForKey: srcMessageId])
{
// Move failed but we can recover the dstMessageId from previous request
[s appendFormat: @"<SrcMsgId>%@</SrcMsgId>", origSrcMessageId];
[s appendFormat: @"<DstMsgId>%@</DstMsgId>", [prevSuccessfulMoveItemsOps objectForKey: srcMessageId] ];
[s appendFormat: @"<Status>%d</Status>", 3];
[newSuccessfulMoveItemsOps setObject: [prevSuccessfulMoveItemsOps objectForKey: srcMessageId] forKey: srcMessageId];
if (dstUidCache)
{
[dstUidCache setObject: newUID forKey: newUID];
if (debugOn)
[self logWithFormat: @"EAS - Saved new easId: %@ for serverId: %@", newUID, newUID];
}
}
else
{
[s appendFormat: @"<SrcMsgId>%@</SrcMsgId>", origSrcMessageId];
[s appendFormat: @"<Status>%d</Status>", 1];
}
}
}
@@ -2834,7 +2876,7 @@ void handle_eas_terminate(int signum)
andElement = [(id)[theDocumentElement getElementsByTagName: @"And"] lastObject];
if (andElement)
{
EOQualifier *qualifier, *fetchQualifier, *notDeleted, *greaterThanQualifier;
EOQualifier *subjectQualifier, *senderQualifier, *fetchQualifier, *notDeleted, *greaterThanQualifier, *orQualifier;
NSString *query;
id o;
@@ -2856,8 +2898,12 @@ void handle_eas_terminate(int signum)
}
notDeleted = [EOQualifier qualifierWithQualifierFormat: @"(not (flags = %@))", @"deleted"];
qualifier = [EOQualifier qualifierWithQualifierFormat: [NSString stringWithFormat: @"(%@ doesContain: '%@')", @"subject", query]];
fetchQualifier = [[EOAndQualifier alloc] initWithQualifiers: notDeleted, qualifier, greaterThanQualifier, nil];
subjectQualifier = [EOQualifier qualifierWithQualifierFormat: [NSString stringWithFormat: @"(%@ doesContain: '%@')", @"subject", query]];
senderQualifier = [EOQualifier qualifierWithQualifierFormat: [NSString stringWithFormat: @"(%@ doesContain: '%@')", @"from", query]];
orQualifier = [[EOOrQualifier alloc] initWithQualifiers: subjectQualifier, senderQualifier, nil];
fetchQualifier = [[EOAndQualifier alloc] initWithQualifiers: notDeleted, orQualifier, greaterThanQualifier, nil];
return [fetchQualifier autorelease];
}
+7
View File
@@ -1291,6 +1291,13 @@ struct GlobalObjectId {
[s appendFormat: @"<ConversationId xmlns=\"Email2:\">%@</ConversationId>", [[[self inReplyTo] dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]];
else if ([[self messageId] length] > 0)
[s appendFormat: @"<ConversationId xmlns=\"Email2:\">%@</ConversationId>", [[[self messageId] dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]];
if ([self replied])
[s appendFormat: @"<LastVerbExecuted xmlns=\"Email2:\">%d</LastVerbExecuted>", 1];
else if ([self forwarded])
[s appendFormat: @"<LastVerbExecuted xmlns=\"Email2:\">%d</LastVerbExecuted>", 3];
else
[s appendFormat: @"<LastVerbExecuted xmlns=\"Email2:\">%d</LastVerbExecuted>", 0];
}
// FIXME - support these in the future
+31 -24
View File
@@ -35,6 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <Foundation/NSString.h>
#import <NGCards/iCalEvent.h>
#import <NGCards/iCalToDo.h>
#import <NGCards/iCalByDayMask.h>
#import <NGCards/iCalDateTime.h>
@@ -59,11 +60,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- (NSString *) activeSyncRepresentationInContext: (WOContext *) context
{
NSMutableString *s;
NSString *t;
int type;
s = [NSMutableString string];
[s appendString: @"<Recurrence xmlns=\"Calendar:\">"];
if ([[self parent] isKindOfClass: [iCalToDo class]])
t = @"Tasks";
else
t = @"Calendar";
[s appendFormat: @"<Recurrence xmlns=\"%@:\">", t];
// 0 -> daily, 1 -> weekly, 2 -> montly, 5 -> yearly
type = 0;
@@ -75,11 +82,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// 1 -> sunday, 2 -> monday, 4 -> tuesday, 8 -> wednesday, 16 -> thursday, 32 -> friday, 64 -> saturday, 127 -> last day of month (montly or yearl recurrences only)
if ([[self byDayMask] isWeekDays])
{
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"Calendar:\">%d</Recurrence_DayOfWeek>", (2|4|8|16|32)];
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"%@:\">%d</Recurrence_DayOfWeek>", t, (2|4|8|16|32)];
}
else
{
[s appendFormat: @"<Recurrence_Interval xmlns=\"Calendar:\">%d</Recurrence_Interval>", [self repeatInterval]];
[s appendFormat: @"<Recurrence_Interval xmlns=\"%@:\">%d</Recurrence_Interval>", t, [self repeatInterval]];
}
}
else if ([self frequency] == iCalRecurrenceFrequenceWeekly)
@@ -107,8 +114,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
v = (1 << [[self _adjustedStartDate] dayOfWeek]);
}
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"Calendar:\">%d</Recurrence_DayOfWeek>", v];
[s appendFormat: @"<Recurrence_Interval xmlns=\"Calendar:\">%d</Recurrence_Interval>", [self repeatInterval]];
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"%@:\">%d</Recurrence_DayOfWeek>", t, v];
[s appendFormat: @"<Recurrence_Interval xmlns=\"%@:\">%d</Recurrence_Interval>", t, [self repeatInterval]];
}
else if ([self frequency] == iCalRecurrenceFrequenceMonthly)
{
@@ -125,8 +132,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if (firstOccurrence < 0)
firstOccurrence = 5;
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"Calendar:\">%d</Recurrence_DayOfWeek>", (1 << [dm firstDay])];
[s appendFormat: @"<Recurrence_WeekOfMonth xmlns=\"Calendar:\">%d</Recurrence_WeekOfMonth>", firstOccurrence];
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"%@:\">%d</Recurrence_DayOfWeek>", t, (1 << [dm firstDay])];
[s appendFormat: @"<Recurrence_WeekOfMonth xmlns=\"%@:\">%d</Recurrence_WeekOfMonth>", t, firstOccurrence];
}
else if ([[self byMonthDay] count])
{
@@ -140,8 +147,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
iCalByDayMask *dm;
dm = [self byDayMask];
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"Calendar:\">%d</Recurrence_DayOfWeek>", (1 << [dm firstDay])];
[s appendFormat: @"<Recurrence_WeekOfMonth xmlns=\"Calendar:\">%d</Recurrence_WeekOfMonth>", 5];
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"%@:\">%d</Recurrence_DayOfWeek>", t, (1 << [dm firstDay])];
[s appendFormat: @"<Recurrence_WeekOfMonth xmlns=\"%@:\">%d</Recurrence_WeekOfMonth>", t, 5];
}
else
{
@@ -153,7 +160,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
// Simple reccurrence rule of type "Monthly"
type = 2;
[s appendFormat: @"<Recurrence_DayOfMonth xmlns=\"Calendar:\">%d</Recurrence_DayOfMonth>", [[self _adjustedStartDate] dayOfMonth]];
[s appendFormat: @"<Recurrence_DayOfMonth xmlns=\"%@:\">%d</Recurrence_DayOfMonth>", t, [[self _adjustedStartDate] dayOfMonth]];
}
}
else if ([self frequency] == iCalRecurrenceFrequenceYearly)
@@ -172,38 +179,39 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if (firstOccurrence < 0)
firstOccurrence = 5;
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"Calendar:\">%d</Recurrence_DayOfWeek>", (1 << [dm firstDay])];
[s appendFormat: @"<Recurrence_WeekOfMonth xmlns=\"Calendar:\">%d</Recurrence_WeekOfMonth>", firstOccurrence];
[s appendFormat: @"<Recurrence_MonthOfYear xmlns=\"Calendar:\">%@</Recurrence_MonthOfYear>",
[s appendFormat: @"<Recurrence_DayOfWeek xmlns=\"%@:\">%d</Recurrence_DayOfWeek>", t, (1 << [dm firstDay])];
[s appendFormat: @"<Recurrence_WeekOfMonth xmlns=\"%@:\">%d</Recurrence_WeekOfMonth>", t, firstOccurrence];
[s appendFormat: @"<Recurrence_MonthOfYear xmlns=\"%@:\">%@</Recurrence_MonthOfYear>", t,
[self flattenedValuesForKey: @"bymonth"]];
}
else
{
type = 5; // Yearly
[s appendFormat: @"<Recurrence_DayOfMonth xmlns=\"Calendar:\">%@</Recurrence_DayOfMonth>",
[s appendFormat: @"<Recurrence_DayOfMonth xmlns=\"%@:\">%@</Recurrence_DayOfMonth>", t,
[self flattenedValuesForKey: @"bymonthday"]];
[s appendFormat: @"<Recurrence_MonthOfYear xmlns=\"Calendar:\">%@</Recurrence_MonthOfYear>",
[s appendFormat: @"<Recurrence_MonthOfYear xmlns=\"%@:\">%@</Recurrence_MonthOfYear>", t,
[self flattenedValuesForKey: @"bymonth"]];
}
}
else
{
type = 5;
[s appendFormat: @"<Recurrence_DayOfMonth xmlns=\"Calendar:\">%d</Recurrence_DayOfMonth>", [[self _adjustedStartDate] dayOfMonth]];
[s appendFormat: @"<Recurrence_MonthOfYear xmlns=\"Calendar:\">%d</Recurrence_MonthOfYear>", [[self _adjustedStartDate] monthOfYear]];
[s appendFormat: @"<Recurrence_DayOfMonth xmlns=\"%@:\">%d</Recurrence_DayOfMonth>", t, [[self _adjustedStartDate] dayOfMonth]];
[s appendFormat: @"<Recurrence_MonthOfYear xmlns=\"%@:\">%d</Recurrence_MonthOfYear>", t, [[self _adjustedStartDate] monthOfYear]];
}
}
[s appendFormat: @"<Recurrence_Type xmlns=\"Calendar:\">%d</Recurrence_Type>", type];
[s appendFormat: @"<Recurrence_Type xmlns=\"%@:\">%d</Recurrence_Type>", t, type];
if ([[self parent] isKindOfClass: [iCalToDo class]])
[s appendFormat: @"<Recurrence_Start xmlns=\"%@:\">%@</Recurrence_Start>", t, [[[self parent] startDate] activeSyncRepresentationInContext: context]];
// Occurrences / Until
//[s appendFormat: @"<Recurrence_Occurrences xmlns=\"Calendar:\">%d</Recurrence_Occurrences>", 5];
if ([self repeatCount])
{
[s appendFormat: @"<Recurrence_Occurrences xmlns=\"Calendar:\">%@</Recurrence_Occurrences>",
[s appendFormat: @"<Recurrence_Occurrences xmlns=\"%@:\">%@</Recurrence_Occurrences>", t,
[self flattenedValuesForKey: @"count"]];
}
else if ([self untilDate])
@@ -214,11 +222,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//ud = [[context activeUser] userDefaults];
//[date setTimeZone: [ud timeZone]];
[s appendFormat: @"<Recurrence_Until xmlns=\"Calendar:\">%@</Recurrence_Until>",
[s appendFormat: @"<Recurrence_Until xmlns=\"%@:\">%@</Recurrence_Until>", t,
[date activeSyncRepresentationWithoutSeparatorsInContext: context]];
}
[s appendString: @"</Recurrence>"];
return s;
+28 -1
View File
@@ -45,7 +45,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "NSDate+ActiveSync.h"
#include "NSString+ActiveSync.h"
#include "iCalRecurrenceRule+ActiveSync.h"
@implementation iCalToDo (ActiveSync)
@@ -80,6 +80,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[s appendFormat: @"<DueDate xmlns=\"Tasks:\">%@</DueDate>", [o activeSyncRepresentationInContext: context]];
[s appendFormat: @"<UTCDueDate xmlns=\"Tasks:\">%@</UTCDueDate>", [o activeSyncRepresentationInContext: context]];
}
// Recurrence rules
if ([self isRecurrent])
[s appendString: [[[self recurrenceRules] lastObject] activeSyncRepresentationInContext: context]];
// Importance
o = [self priority];
@@ -247,6 +251,29 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
}
// Recurrence
if ((o = [theValues objectForKey: @"Recurrence"]) && !([[o objectForKey: @"Recurrence_DeadOccur"] intValue]))
{
iCalRecurrenceRule *rule;
rule = [[iCalRecurrenceRule alloc] init];
[self setRecurrenceRules: [NSArray arrayWithObject: rule]];
RELEASE(rule);
[rule takeActiveSyncValues: o inContext: context];
if (!([theValues objectForKey: @"StartDate"]))
{
iCalDateTime *start;
start = (iCalDateTime *) [self uniqueChildWithTag: @"dtstart"];
[start setTimeZone: tz];
[start setDate: [[o objectForKey: @"Recurrence_Start"] calendarDate]];
}
}
}
@end
+2350
View File
File diff suppressed because it is too large. Load diff
+7 -4
View File
@@ -1048,9 +1048,9 @@ be specified as a LDAP Extension in the LDAP URL (e.g.
without Password Policies enabled.
Possible values are: `none`, `plain`, `crypt`, `md5`, `md5-crypt`,
`smd5`, `cram-md5` and `sha`, `sha256`, `sha512` and its ssha (e.g.
`ssha` or `ssha256`) variants (plus setting of the encoding with `.b64`
or `.hex`).
`sha256-crypt` and `sha512-crypt`, `smd5`, `cram-md5` and `sha`, `sha256`,
`sha512` and its ssha (e.g. `ssha` or `ssha256`) variants
(plus setting of the encoding with `.b64` or `.hex`).
For a more detailed description see
http://wiki.dovecot.org/Authentication/PasswordSchemes.
@@ -1059,6 +1059,9 @@ Note that `cram-md5` is not actually using cram-md5 (due to the lack of
challenge-response mechanism), its just saving the intermediate MD5
context as Dovecot stores in its database.
Also note that `sha256-crypt` and `sha512-crypt` requires that your
operating system supports glibc 2.7 or more recent.
|canAuthenticate
|If set to `YES`, this LDAP source is used for authentication
@@ -2482,7 +2485,7 @@ as keys for the the `domains` dictionary.
|Parameter used to set domains visible among themselves. This parameter
is an array of arrays.
Example: `SOGoDomainsVisibility = ((acme, coyote));`
Example: `SOGoDomainsVisibility = ( (acme, coyote) );`
Defaults to an empty array, which means domains are isolated from each
other.
+3 -3
View File
@@ -1,7 +1,7 @@
<!-- TODO have the build system take care of this -->
<releaseinfo>Version 3.2.0 - October 2016</releaseinfo>
<subtitle>for version 3.2.0</subtitle>
<date>2016-10-03</date>
<releaseinfo>Version 3.2.2 - November 2016</releaseinfo>
<subtitle>for version 3.2.2</subtitle>
<date>2016-11-23</date>
<legalnotice>
<para>Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".</para>
@@ -13,6 +13,6 @@
// TODO have the build system take care of this
:release_version: 3.2.0
:release_version: 3.2.2
// vim: set syntax=asciidoc tabstop=2 shiftwidth=2 expandtab:
+1 -4
View File
@@ -1,8 +1,6 @@
/* SOGo+DAV.h - this file is part of SOGo
*
* Copyright (C) 2010 Inverse inc.
*
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
* Copyright (C) 2010-2016 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -31,7 +29,6 @@
@interface SOGo (SOGoWebDAVExtensions)
- (WOResponse *) davPrincipalMatch: (WOContext *) localContext;
// - (WOResponse *) davPrincipalPropertySearch: (WOContext *) localContext;
- (WOResponse *) davPrincipalSearchPropertySet: (WOContext *) localContext;
@end
+3 -4
View File
@@ -1,6 +1,6 @@
/* SOGo+DAV.m - this file is part of SOGo
*
* Copyright (C) 2010-2013 Inverse inc.
* Copyright (C) 2010-2016 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -179,9 +179,8 @@
[hrefs addObject: [self davURLAsString]];
}
- (NSDictionary *)
_handlePrincipalMatchPrincipalProperty: (id <DOMElement>) child
inContext: (WOContext *) localContext
- (NSDictionary *) _handlePrincipalMatchPrincipalProperty: (id <DOMElement>) child
inContext: (WOContext *) localContext
{
NSMutableArray *hrefs;
NSDictionary *response;
+65
View File
@@ -1,3 +1,68 @@
3.2.2 (2016-11-23)
------------------
New features
- [core] support repetitive email alarms on tasks and events (#1053)
- [web] allow to hide center column on large screens (#3861)
- [eas] relaxed permission requirements for subscription synchronizations (#3118 and #3180)
Enhancements
- [core] added sha256-crypt and sha512-crypt password support
- [core] updated time zones to version 2016i
- [eas] now also search on senders when using EAS Search ops
- [web] allow multiple messages to be marked as seen (#3873)
- [web] use switches instead of checkboxes in Calendars module
Bug fixes
- [core] fixed condition in weekly recurrence calculator
- [core] always send IMIP messages using UTF-8
- [web] fixed mail settings persistence when sorting by arrival date
- [web] disable submit button while saving an event or a task (#3880)
- [web] disable submit button while saving a contact
- [web] fixed computation of week number
- [web] fixed and improved IMAP folder subscriptions manager (#3865)
- [web] fixed Sieve script activation when vacation start date is in the future (#3885)
- [web] fixed moving a component without the proper rights (#3889)
- [web] restored Sieve folder encoding support (#3904)
- [web] allow edition of a mailbox rights when user can administer mailbox
3.2.1 (2016-11-02)
------------------
Enhancements
- [web] add constraints to start/end dates of automatic responder (#3841)
- [web] allow a mailbox to be deleted immediately (#3875)
- [web] updated Angular to version 1.5.8
- [eas] initial support for recurring tasks EAS
- [eas] now support replied/forwarded flags using EAS (#3796)
- [core] updated time zones to version 2016h
Bug fixes
- [web] fixed tasks list when some weekdays are disabled
- [web] fixed automatic refresh of calendar view
- [web] respect SOGoSearchMinimumWordLength in contacts list editor
- [web] improved memory usage when importing very large address books
- [web] fixed progress indicator while importing cards or events and tasks
- [web] improved detection of changes in CKEditor (#3839)
- [web] fixed vCard generation for tags with no type (#3826)
- [web] only show the organizer field of an IMIP REPLY if one is defined
- [web] fixed saving the note of a card (#3849)
- [web] fixed support for recurrent tasks (#3864)
- [web] restored support for alarms in tasks
- [web] improved validation of mail account delegators
- [web] fixed auto-completion of list members (#3870)
- [web] added missing options to subscribed addressbooks (#3850)
- [web] added missing options to subscribed calendars (#3863)
- [web] fixed resource conflict error handling (403 vs 409 HTTP code) (#3837)
- [web] restored immediate deletion of messages (without moving them to the trash)
- [web] avoid mail notifications on superfluous event changes (#3790)
- [web] CKEditor: added the pastefromexcel plugin (#3854)
- [eas] improve handling of email folders without a parent
- [eas] never send IMIP reply when the "initiator" is Outlook 2013/2016
- [core] only consider SMTP addresses for AD's proxyAddresses (#3842)
- [core] sogo-tool manage-eas now works with single store mode
3.2.0 (2016-10-03)
------------------
+1 -5
View File
@@ -1,8 +1,6 @@
/* GCSAlarmsFolder.h - this file is part of $PROJECT_NAME_HERE$
*
* Copyright (C) 2010 Inverse inc.
*
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
* Copyright (C) 2010-2016 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -60,8 +58,6 @@
- (void) deleteRecordForEntryWithCName: (NSString *) cname
inCalendarAtPath: (NSString *) path;
- (void) deleteRecordsForEntriesUntilDate: (NSCalendarDate *) date;
@end
#endif /* GCSALARMSFOLDER_H */
+1 -33
View File
@@ -1,6 +1,6 @@
/* GCSAlarmsFolder.m - this file is part of SOGo
*
* Copyright (C) 2010-2014 Inverse inc.
* Copyright (C) 2010-2016 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -409,36 +409,4 @@ static NSString *alarmsFolderURLString = nil;
}
}
- (void) deleteRecordsForEntriesUntilDate: (NSCalendarDate *) date
{
EOAdaptorChannel *tc;
EOAdaptorContext *context;
EOEntity *entity;
EOSQLQualifier *qualifier;
NSException *error;
tc = [self _acquireStoreChannel];
if (tc)
{
context = [tc adaptorContext];
entity = [self _storeTableEntityForChannel: tc];
qualifier = [[EOSQLQualifier alloc] initWithEntity: entity
qualifierFormat:
@"c_alarm_date <= %d",
(int) [date timeIntervalSince1970]];
[qualifier autorelease];
[context beginTransaction];
error = [tc deleteRowsDescribedByQualifierX: qualifier];
if (error)
{
[context rollbackTransaction];
[self errorWithFormat:@"%s: cannot delete record: %@",
__PRETTY_FUNCTION__, error];
}
else
[context commitTransaction];
[self _releaseChannel: tc];
}
}
@end
+1
View File
@@ -123,6 +123,7 @@
- (NSException *) deleteContentWithName: (NSString *) _name;
- (NSException *) deleteAllContent;
- (NSException *) touchContentWithName: (NSString *) _name;
- (NSException *) deleteFolder;
+68 -3
View File
@@ -1017,7 +1017,21 @@ andAttribute: (EOAttribute *)_attribute
|| *_baseVersion == [storedVersion unsignedIntValue])
{
/* extract quick info */
quickRow = [theComponent performSelector: @selector(quickRecordFromContent:container:) withObject: _content withObject: theContainer];
NSMethodSignature *aSignature;
NSInvocation *anInvocation;
SEL aSelector;
aSelector = @selector(quickRecordFromContent:container:nameInContainer:);
aSignature = [[theComponent class] instanceMethodSignatureForSelector: aSelector];
anInvocation = [NSInvocation invocationWithMethodSignature:aSignature];
[anInvocation setSelector: aSelector];
[anInvocation setTarget: theComponent];
[anInvocation setArgument:&_content atIndex: 2];
[anInvocation setArgument:&theContainer atIndex: 3];
[anInvocation setArgument:&_name atIndex: 4];
[anInvocation invoke];
[anInvocation getReturnValue: &quickRow];
if (quickRow)
{
[quickRow setObject:_name forKey:@"c_name"];
@@ -1173,7 +1187,7 @@ andAttribute: (EOAttribute *)_attribute
return error;
}
- (NSException *)deleteContentWithName:(NSString *)_name {
- (NSException *) deleteContentWithName:(NSString *)_name {
EOAdaptorChannel *storeChannel, *quickChannel;
EOAdaptorContext *adaptorCtx;
NSException *error;
@@ -1181,7 +1195,6 @@ andAttribute: (EOAttribute *)_attribute
NSCalendarDate *nowDate;
/* check preconditions */
if (_name == nil) {
return [NSException exceptionWithName:@"GCSDeleteException"
reason:@"no content filename was provided"
@@ -1320,6 +1333,58 @@ andAttribute: (EOAttribute *)_attribute
return error;
}
- (NSException *) touchContentWithName: (NSString *) _name
{
NSString *touchSql, *table;
EOAdaptorContext *adaptorCtx;
EOAdaptorChannel *channel;
EOAttribute *attribute;
NSCalendarDate *nowDate;
if (_name == nil)
return [NSException exceptionWithName: @"GCSDeleteException"
reason: @"no content filename was provided"
userInfo: nil];
channel = [self acquireStoreChannel];
if ((channel = [self acquireStoreChannel]) == nil)
{
[self errorWithFormat:@"could not open storage channel!"];
return nil;
}
adaptorCtx = [channel adaptorContext];
[adaptorCtx beginTransaction];
table = [self storeTableName];
attribute = [self _attributeForColumn: @"c_name"];
nowDate = [NSCalendarDate date];
if ([GCSFolderManager singleStoreMode])
touchSql = [NSString stringWithFormat: @"UPDATE %@ SET c_lastmodified = %u WHERE c_name = %@ AND c_folder_id = %@",
table,
(unsigned int) [nowDate timeIntervalSince1970],
[self _formatRowValue: _name
withAdaptor: [adaptorCtx adaptor]
andAttribute: attribute],
folderId];
else
touchSql = [NSString stringWithFormat: @"UPDATE %@ SET c_lastmodified = %u WHERE c_name = %@",
table,
(unsigned int) [nowDate timeIntervalSince1970],
[self _formatRowValue: _name
withAdaptor: [adaptorCtx adaptor]
andAttribute: attribute]];
[channel evaluateExpressionX: touchSql];
[[channel adaptorContext] commitTransaction];
[self releaseChannel: channel];
return nil;
}
- (NSException *)deleteFolder {
EOAdaptorChannel *channel;
NSString *delsql;
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Abidjan
X-LIC-LOCATION:Africa/Abidjan
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Abidjan
X-LIC-LOCATION:Africa/Abidjan
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Accra
X-LIC-LOCATION:Africa/Accra
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Accra
X-LIC-LOCATION:Africa/Accra
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Addis_Ababa
X-LIC-LOCATION:Africa/Addis_Ababa
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Addis_Ababa
X-LIC-LOCATION:Africa/Addis_Ababa
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Algiers
X-LIC-LOCATION:Africa/Algiers
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Algiers
X-LIC-LOCATION:Africa/Algiers
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Asmara
X-LIC-LOCATION:Africa/Asmara
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Asmara
X-LIC-LOCATION:Africa/Asmara
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bamako
X-LIC-LOCATION:Africa/Bamako
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bamako
X-LIC-LOCATION:Africa/Bamako
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bangui
X-LIC-LOCATION:Africa/Bangui
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bangui
X-LIC-LOCATION:Africa/Bangui
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Banjul
X-LIC-LOCATION:Africa/Banjul
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Banjul
X-LIC-LOCATION:Africa/Banjul
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bissau
X-LIC-LOCATION:Africa/Bissau
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bissau
X-LIC-LOCATION:Africa/Bissau
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Blantyre
X-LIC-LOCATION:Africa/Blantyre
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Blantyre
X-LIC-LOCATION:Africa/Blantyre
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Brazzaville
X-LIC-LOCATION:Africa/Brazzaville
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Brazzaville
X-LIC-LOCATION:Africa/Brazzaville
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bujumbura
X-LIC-LOCATION:Africa/Bujumbura
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bujumbura
X-LIC-LOCATION:Africa/Bujumbura
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -22
View File
@@ -1,22 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Cairo
X-LIC-LOCATION:Africa/Cairo
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:19700924T235959
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EEST
DTSTART:19700424T010000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1FR
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Cairo
X-LIC-LOCATION:Africa/Cairo
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Casablanca
X-LIC-LOCATION:Africa/Casablanca
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Casablanca
X-LIC-LOCATION:Africa/Casablanca
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ceuta
X-LIC-LOCATION:Africa/Ceuta
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ceuta
X-LIC-LOCATION:Africa/Ceuta
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Conakry
X-LIC-LOCATION:Africa/Conakry
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Conakry
X-LIC-LOCATION:Africa/Conakry
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Dakar
X-LIC-LOCATION:Africa/Dakar
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Dakar
X-LIC-LOCATION:Africa/Dakar
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Dar_es_Salaam
X-LIC-LOCATION:Africa/Dar_es_Salaam
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Dar_es_Salaam
X-LIC-LOCATION:Africa/Dar_es_Salaam
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Djibouti
X-LIC-LOCATION:Africa/Djibouti
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Djibouti
X-LIC-LOCATION:Africa/Djibouti
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Douala
X-LIC-LOCATION:Africa/Douala
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Douala
X-LIC-LOCATION:Africa/Douala
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/El_Aaiun
X-LIC-LOCATION:Africa/El_Aaiun
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/El_Aaiun
X-LIC-LOCATION:Africa/El_Aaiun
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Freetown
X-LIC-LOCATION:Africa/Freetown
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Freetown
X-LIC-LOCATION:Africa/Freetown
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Gaborone
X-LIC-LOCATION:Africa/Gaborone
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Gaborone
X-LIC-LOCATION:Africa/Gaborone
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Harare
X-LIC-LOCATION:Africa/Harare
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Harare
X-LIC-LOCATION:Africa/Harare
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Johannesburg
X-LIC-LOCATION:Africa/Johannesburg
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:SAST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Johannesburg
X-LIC-LOCATION:Africa/Johannesburg
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:SAST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Juba
X-LIC-LOCATION:Africa/Juba
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Juba
X-LIC-LOCATION:Africa/Juba
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kampala
X-LIC-LOCATION:Africa/Kampala
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kampala
X-LIC-LOCATION:Africa/Kampala
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Khartoum
X-LIC-LOCATION:Africa/Khartoum
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Khartoum
X-LIC-LOCATION:Africa/Khartoum
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kigali
X-LIC-LOCATION:Africa/Kigali
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kigali
X-LIC-LOCATION:Africa/Kigali
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kinshasa
X-LIC-LOCATION:Africa/Kinshasa
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kinshasa
X-LIC-LOCATION:Africa/Kinshasa
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lagos
X-LIC-LOCATION:Africa/Lagos
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lagos
X-LIC-LOCATION:Africa/Lagos
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Libreville
X-LIC-LOCATION:Africa/Libreville
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Libreville
X-LIC-LOCATION:Africa/Libreville
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lome
X-LIC-LOCATION:Africa/Lome
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lome
X-LIC-LOCATION:Africa/Lome
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Luanda
X-LIC-LOCATION:Africa/Luanda
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Luanda
X-LIC-LOCATION:Africa/Luanda
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lubumbashi
X-LIC-LOCATION:Africa/Lubumbashi
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lubumbashi
X-LIC-LOCATION:Africa/Lubumbashi
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lusaka
X-LIC-LOCATION:Africa/Lusaka
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lusaka
X-LIC-LOCATION:Africa/Lusaka
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Malabo
X-LIC-LOCATION:Africa/Malabo
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Malabo
X-LIC-LOCATION:Africa/Malabo
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Maputo
X-LIC-LOCATION:Africa/Maputo
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Maputo
X-LIC-LOCATION:Africa/Maputo
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Maseru
X-LIC-LOCATION:Africa/Maseru
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:SAST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Maseru
X-LIC-LOCATION:Africa/Maseru
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:SAST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Mbabane
X-LIC-LOCATION:Africa/Mbabane
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:SAST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Mbabane
X-LIC-LOCATION:Africa/Mbabane
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:SAST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Mogadishu
X-LIC-LOCATION:Africa/Mogadishu
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Mogadishu
X-LIC-LOCATION:Africa/Mogadishu
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Monrovia
X-LIC-LOCATION:Africa/Monrovia
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Monrovia
X-LIC-LOCATION:Africa/Monrovia
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Nairobi
X-LIC-LOCATION:Africa/Nairobi
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Nairobi
X-LIC-LOCATION:Africa/Nairobi
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ndjamena
X-LIC-LOCATION:Africa/Ndjamena
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ndjamena
X-LIC-LOCATION:Africa/Ndjamena
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Niamey
X-LIC-LOCATION:Africa/Niamey
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Niamey
X-LIC-LOCATION:Africa/Niamey
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Nouakchott
X-LIC-LOCATION:Africa/Nouakchott
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Nouakchott
X-LIC-LOCATION:Africa/Nouakchott
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ouagadougou
X-LIC-LOCATION:Africa/Ouagadougou
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ouagadougou
X-LIC-LOCATION:Africa/Ouagadougou
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Porto-Novo
X-LIC-LOCATION:Africa/Porto-Novo
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Porto-Novo
X-LIC-LOCATION:Africa/Porto-Novo
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Sao_Tome
X-LIC-LOCATION:Africa/Sao_Tome
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Sao_Tome
X-LIC-LOCATION:Africa/Sao_Tome
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tripoli
X-LIC-LOCATION:Africa/Tripoli
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tripoli
X-LIC-LOCATION:Africa/Tripoli
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tunis
X-LIC-LOCATION:Africa/Tunis
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tunis
X-LIC-LOCATION:Africa/Tunis
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Windhoek
X-LIC-LOCATION:Africa/Windhoek
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:WAST
DTSTART:19700906T020000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700405T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Windhoek
X-LIC-LOCATION:Africa/Windhoek
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:WAST
DTSTART:19700906T020000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19700405T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Adak
X-LIC-LOCATION:America/Adak
BEGIN:DAYLIGHT
TZOFFSETFROM:-1000
TZOFFSETTO:-0900
TZNAME:HADT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0900
TZOFFSETTO:-1000
TZNAME:HAST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Adak
X-LIC-LOCATION:America/Adak
BEGIN:DAYLIGHT
TZOFFSETFROM:-1000
TZOFFSETTO:-0900
TZNAME:HDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0900
TZOFFSETTO:-1000
TZNAME:HST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Anchorage
X-LIC-LOCATION:America/Anchorage
BEGIN:DAYLIGHT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
TZNAME:AKDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0800
TZOFFSETTO:-0900
TZNAME:AKST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Anchorage
X-LIC-LOCATION:America/Anchorage
BEGIN:DAYLIGHT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
TZNAME:AKDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0800
TZOFFSETTO:-0900
TZNAME:AKST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Anguilla
X-LIC-LOCATION:America/Anguilla
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Anguilla
X-LIC-LOCATION:America/Anguilla
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Antigua
X-LIC-LOCATION:America/Antigua
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Antigua
X-LIC-LOCATION:America/Antigua
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Araguaina
X-LIC-LOCATION:America/Araguaina
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:BRT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Araguaina
X-LIC-LOCATION:America/Araguaina
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:BRT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Buenos_Aires
X-LIC-LOCATION:America/Argentina/Buenos_Aires
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Buenos_Aires
X-LIC-LOCATION:America/Argentina/Buenos_Aires
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Catamarca
X-LIC-LOCATION:America/Argentina/Catamarca
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Catamarca
X-LIC-LOCATION:America/Argentina/Catamarca
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Cordoba
X-LIC-LOCATION:America/Argentina/Cordoba
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Cordoba
X-LIC-LOCATION:America/Argentina/Cordoba
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Jujuy
X-LIC-LOCATION:America/Argentina/Jujuy
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Jujuy
X-LIC-LOCATION:America/Argentina/Jujuy
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/La_Rioja
X-LIC-LOCATION:America/Argentina/La_Rioja
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/La_Rioja
X-LIC-LOCATION:America/Argentina/La_Rioja
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Mendoza
X-LIC-LOCATION:America/Argentina/Mendoza
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Mendoza
X-LIC-LOCATION:America/Argentina/Mendoza
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Rio_Gallegos
X-LIC-LOCATION:America/Argentina/Rio_Gallegos
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Rio_Gallegos
X-LIC-LOCATION:America/Argentina/Rio_Gallegos
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Salta
X-LIC-LOCATION:America/Argentina/Salta
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Salta
X-LIC-LOCATION:America/Argentina/Salta
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Juan
X-LIC-LOCATION:America/Argentina/San_Juan
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Juan
X-LIC-LOCATION:America/Argentina/San_Juan
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Luis
X-LIC-LOCATION:America/Argentina/San_Luis
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Luis
X-LIC-LOCATION:America/Argentina/San_Luis
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Tucuman
X-LIC-LOCATION:America/Argentina/Tucuman
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Tucuman
X-LIC-LOCATION:America/Argentina/Tucuman
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Ushuaia
X-LIC-LOCATION:America/Argentina/Ushuaia
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Ushuaia
X-LIC-LOCATION:America/Argentina/Ushuaia
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:ART
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Aruba
X-LIC-LOCATION:America/Aruba
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Aruba
X-LIC-LOCATION:America/Aruba
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Asuncion
X-LIC-LOCATION:America/Asuncion
BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
TZNAME:PYST
DTSTART:19701004T000000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
TZNAME:PYT
DTSTART:19700322T000000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Asuncion
X-LIC-LOCATION:America/Asuncion
BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
TZNAME:PYST
DTSTART:19701004T000000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
TZNAME:PYT
DTSTART:19700322T000000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Atikokan
X-LIC-LOCATION:America/Atikokan
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Atikokan
X-LIC-LOCATION:America/Atikokan
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia
X-LIC-LOCATION:America/Bahia
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:BRT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia
X-LIC-LOCATION:America/Bahia
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:BRT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia_Banderas
X-LIC-LOCATION:America/Bahia_Banderas
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
TZNAME:CST
DTSTART:19701025T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
TZNAME:CDT
DTSTART:19700405T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia_Banderas
X-LIC-LOCATION:America/Bahia_Banderas
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
TZNAME:CST
DTSTART:19701025T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
TZNAME:CDT
DTSTART:19700405T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Barbados
X-LIC-LOCATION:America/Barbados
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Barbados
X-LIC-LOCATION:America/Barbados
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belem
X-LIC-LOCATION:America/Belem
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:BRT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belem
X-LIC-LOCATION:America/Belem
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:BRT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belize
X-LIC-LOCATION:America/Belize
BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
TZNAME:CST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belize
X-LIC-LOCATION:America/Belize
BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
TZNAME:CST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Blanc-Sablon
X-LIC-LOCATION:America/Blanc-Sablon
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Blanc-Sablon
X-LIC-LOCATION:America/Blanc-Sablon
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boa_Vista
X-LIC-LOCATION:America/Boa_Vista
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boa_Vista
X-LIC-LOCATION:America/Boa_Vista
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AMT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -14
View File
@@ -1,14 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bogota
X-LIC-LOCATION:America/Bogota
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
TZNAME:COT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bogota
X-LIC-LOCATION:America/Bogota
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
TZNAME:COT
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boise
X-LIC-LOCATION:America/Boise
BEGIN:DAYLIGHT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
TZNAME:MDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
TZNAME:MST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boise
X-LIC-LOCATION:America/Boise
BEGIN:DAYLIGHT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
TZNAME:MDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
TZNAME:MST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cambridge_Bay
X-LIC-LOCATION:America/Cambridge_Bay
BEGIN:DAYLIGHT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
TZNAME:MDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
TZNAME:MST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cambridge_Bay
X-LIC-LOCATION:America/Cambridge_Bay
BEGIN:DAYLIGHT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
TZNAME:MDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
TZNAME:MST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+22 -22
View File
@@ -1,22 +1,22 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Campo_Grande
X-LIC-LOCATION:America/Campo_Grande
BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
TZNAME:AMST
DTSTART:19701018T000000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AMT
DTSTART:19700215T000000
RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Campo_Grande
X-LIC-LOCATION:America/Campo_Grande
BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
TZNAME:AMST
DTSTART:19701018T000000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
TZNAME:AMT
DTSTART:19700215T000000
RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+14 -22
View File
@@ -1,22 +1,14 @@
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cancun
X-LIC-LOCATION:America/Cancun
BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
TZNAME:CDT
DTSTART:19700405T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
TZNAME:CST
DTSTART:19701025T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
BEGIN:VCALENDAR
PRODID:-//Inverse inc.//NONSGML IANA 2016h//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cancun
X-LIC-LOCATION:America/Cancun
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Loaded 100 of 689 files, more files were not shown because too many files have changed in this diff. Show more