Compare commits

..
423 Commits
Author SHA1 Message Date
Francis Lachapelle c4bc215a47 Merge to 2.0.7 2013-07-23 10:02:39 -04:00
Francis Lachapelle bd776152db Update ChangeLog 2013-07-23 10:02:13 -04:00
Ludovic Marcotte c6374b52ec Merge branch 'master' of https://github.com/inverse-inc/sogo 2013-07-23 09:26:55 -04:00
Ludovic Marcotte 734c164ae0 Reverted broken patch in #2360 and tried to fix it cleanly 2013-07-23 09:25:24 -04:00
Francis Lachapelle c9936d7ecf Merge to 2.0.7 2013-07-23 08:38:44 -04:00
Francis Lachapelle 9f381e768d Update ChangeLog 2013-07-23 08:38:09 -04:00
Ludovic Marcotte b531b6160c Fixed compilation ordering to avoid bug in gnustep-make 2013-07-23 08:31:38 -04:00
Francis Lachapelle 885e59a2af Merge to 2.0.7 2013-07-19 13:46:37 -04:00
Francis Lachapelle 8a041860a0 Update ChangeLog 2013-07-19 13:40:33 -04:00
Francis Lachapelle d5f76ac832 Improve CSS print media 2013-07-19 13:39:18 -04:00
Francis Lachapelle 12b7fea825 Documentation - bump version to 2.0.7 2013-07-19 13:37:13 -04:00
Francis Lachapelle 1c82af8842 Updated pt_BR, cs, nl, de, pl and ru translations 2013-07-19 11:29:10 -04:00
Francis Lachapelle 6cef5245e1 Bump version to 2.0.7 2013-07-19 11:27:17 -04:00
Francis Lachapelle 0069a4200b Handle possible jQuery error with DnD of contacts 2013-07-19 10:51:41 -04:00
Ludovic Marcotte e24c20c48a Reverted patch 2013-07-19 10:11:08 -04:00
Ludovic Marcotte 256b679798 Bug fix for #2366 2013-07-18 11:46:49 -04:00
Francis Lachapelle b85ed0db1c Fix blur of active element on click on a draggable
This bug has yet to be officially part of jQuery UI, therefore this
commit updates jquery-ui to version 1.10.3 patched with commit fcd1caf:

https://github.com/jquery/jquery-ui/commit/fcd1cafac8afe3a947676ec018e844eeada5b9de
2013-07-18 11:32:29 -04:00
Ludovic Marcotte 048bae2fc5 Applied patch from bug #2235 2013-07-18 10:52:37 -04:00
Ludovic Marcotte 19e542396b Applied patch from bug #2360 2013-07-18 10:25:39 -04:00
Francis Lachapelle 249a1fcf14 Bubble box of event should not overlap event cell 2013-07-17 14:57:07 -04:00
Ludovic Marcotte 7dad5ad84e Updated for v2.0.7 2013-07-16 15:20:26 -04:00
Ludovic Marcotte 16105d37b8 Properly handle RFC2231 everywhere 2013-07-16 15:18:04 -04:00
Ludovic Marcotte e08ebd2390 Fix for bugs #2368 and #2369 2013-07-16 11:31:08 -04:00
Francis Lachapelle 03553980fd Update NEWS file and add missing image 2013-07-11 13:55:03 -04:00
Francis Lachapelle 33fd60efb3 Calendar: print gridlines to 15-minute intervals 2013-07-11 13:50:44 -04:00
Francis Lachapelle b8e2255a07 Set the events/tasks list collapsable 2013-07-11 13:46:38 -04:00
Ludovic Marcotte e687dbf155 If the organizer's name is non-existent, use the email address 2013-07-04 13:11:02 -04:00
Jean Raby bf398889bf Merge to 2.0.6b 2013-06-27 11:36:30 -04:00
Jean Raby f42d52743d bump version to 2.0.6b 2013-06-27 11:35:17 -04:00
Jean Raby 70cd64a626 Update ChangeLog 2013-06-27 11:34:06 -04:00
Jean Raby 4359b05da8 updated NEWS 2013-06-27 11:33:44 -04:00
Ludovic Marcotte e26e3d7307 Revert "Properly escape the foldername to avoid XSS issues"
This reverts commit 045b275b27.
2013-06-27 11:15:41 -04:00
Ludovic Marcotte 25dbd4849d Properly escape the foldername to avoid XSS issues 2013-06-27 11:14:50 -04:00
Ludovic Marcotte 045b275b27 Properly escape the foldername to avoid XSS issues 2013-06-27 11:06:07 -04:00
Jean Raby a2a89e8720 Fix loading of MSExchangeFreeBusySOAPResponseMap 2013-06-26 16:55:39 -04:00
Jean Raby 7ec1973e0f Merge to 2.0.6a 2013-06-25 09:22:35 -04:00
Jean Raby 2581f6c568 Update for 2.0.6a 2013-06-25 09:19:37 -04:00
Jean Raby 20369631c9 Update ChangeLog 2013-06-25 09:17:03 -04:00
Jean Raby 1221da2443 Add CASLogoutRequestMap.plist 2013-06-25 09:12:27 -04:00
Jean Raby f27b8b6a54 Document SOGoCASLogoutEnabled 2013-06-25 09:06:28 -04:00
Ludovic Marcotte a79a9c4eff Merge to 2.0.6
Conflicts:
	Documentation/SOGo Installation Guide.odt
2013-06-21 12:44:35 -04:00
Ludovic Marcotte a6b393c2c1 Update ChangeLog 2013-06-21 11:26:42 -04:00
Ludovic Marcotte faf228022a Updated for the release 2013-06-21 11:25:55 -04:00
Ludovic Marcotte 3e87ba92db Updated french translation 2013-06-21 10:45:03 -04:00
Jean Raby 0a87ff97b6 cosmetic fix, no functional change
added a POST payload to test this code
2013-06-21 09:36:54 -04:00
Ludovic Marcotte 031cd210f7 Better description 2013-06-20 20:29:16 -04:00
Ludovic Marcotte 9d9a434fdc Avoid crashing when reading fcs crap. 2013-06-20 15:44:35 -04:00
Jean Raby 41ed498d65 Add support for CAS LogoutRequests
Fixes #2346
This changes the serviceURL sent by SOGo to the CAS server:
  /SOGo/so/ -> /SOGo/so/index
2013-06-20 14:32:14 -04:00
Ludovic Marcotte d28482557f Fix for bug 2285 2013-06-20 13:43:45 -04:00
Ludovic Marcotte 4c97d54939 Fix for bug #2119 2013-06-20 09:10:09 -04:00
Ludovic Marcotte c08263d1c3 Updated patch 2013-06-19 17:36:43 -04:00
Ludovic Marcotte dc96466462 Updated for the release 2013-06-19 16:06:12 -04:00
Ludovic Marcotte 1734b387a3 Fix for bug #2237 2013-06-19 15:45:40 -04:00
Ludovic Marcotte 871115e349 Fixed bug #2294 2013-06-19 15:07:19 -04:00
Ludovic Marcotte a764286879 Fix for bug #2313 2013-06-19 14:09:20 -04:00
Ludovic Marcotte 5304461e4c now possible to see who created a event/task in a delegated calendar 2013-06-19 10:23:47 -04:00
Jean Raby 6b25f08943 Use domainDefaults to get imapCASServiceName 2013-06-18 19:33:36 -04:00
Jean Raby a0022e06f7 New preference: SOGoIMAPCASServiceName
Reworked CAS section a bit and add some information regarding casifying sieve.
2013-06-18 17:57:17 -04:00
Jean Raby f24e65b6d8 Merge branch 'fix/cas-service-names' 2013-06-18 16:44:05 -04:00
Jean Raby 0fb006c19f New domain preference: SOGoIMAPCASServiceName
Set this to the service name expected by the CAS server if it differs
from SOGoIMAPServer. This is useful to request a CAS ticket for service
imap://imap.domain.com while connecting through imapproxy on imap://127.0.0.1:1143

SOGoDAVAuthenticator is not updated since it doesn't really use the imap code.
2013-06-18 16:36:11 -04:00
Ludovic Marcotte 47a3f1a19d toggle to send or not notifications 2013-06-18 14:14:42 -04:00
Ludovic Marcotte f25344182d Rewrote escapedForCards so it's 10 times faster. 2013-06-14 14:58:16 -04:00
Jean Raby f24e3a0a31 whitespace fixes. tabkill 2013-06-12 02:36:50 -04:00
Ludovic Marcotte afb7bc309c Added message submissions rate-limiting support 2013-06-11 11:21:58 -04:00
Ludovic Marcotte cfee5aa3f4 Added new failed login rate-limiting options 2013-06-11 09:41:17 -04:00
Francis Lachapelle 2a51f6f385 Update CKEditor to version 4.1.2
Also added the blockquote plugin.
2013-06-10 21:07:52 -04:00
Jean Raby 4cffea43eb French translation of Sync Issues 2013-06-07 15:16:12 -04:00
Jean Raby cafce5753d update description of MultipleBookingsFieldName 2013-06-06 16:04:47 -04:00
Francis Lachapelle 5d6a5f5d5e Update CKEditor to version 4.1.1 2013-06-06 13:21:26 -04:00
Francis Lachapelle 8e5a26dfb1 Remove unicode separators from JSON
Fixes #2309
2013-06-05 15:55:52 -04:00
Ludovic Marcotte 4cb0facd72 Fixed bug #2206 2013-06-04 08:51:38 -04:00
Francis Lachapelle 854bce28fb Fix condition in UIxMailPartHTMLViewer 2013-06-03 12:07:18 -04:00
Francis Lachapelle 49e964c529 Fix decoding charset parameter
To avoid a libxml bug/limitation, we were already stripping the charset
parameter, but we were not considering the single quote as valid
delimiter.
2013-06-03 11:47:48 -04:00
Jean Raby 3281cea2a2 Add bindFields to the sample configuration file 2013-05-31 15:54:22 -04:00
Jean Raby 82253e91d2 don't use -M when creating the sogo user on debian
-M was not available in lenny. It is not actually needed since useradd
won't create the homedir when adding a system user (-r)
2013-05-24 15:00:05 -04:00
Jean Raby 1d1ed9a031 Update ldap filter description, example and syntax 2013-05-15 14:51:15 -04:00
Francis Lachapelle 2bd8a2935f Change default value of SOGoMailSpoolPath
Set the spool path to /var/spool/sogo and modified the installation
guide to point to the tmpwatch cronjob when changing SOGoMailSpoolPath.
2013-05-09 08:12:27 -04:00
Francis Lachapelle 8a25e38827 Add indent group to ckeditor toolbar 2013-05-02 09:07:17 -04:00
Ludovic Marcotte 4ec19d46fa Removed left-over code that would cause the logic from bug #2035 to not work. 2013-04-25 14:46:00 -04:00
Jean Raby d46a39e252 TOC links 2013-04-22 13:22:16 -04:00
Jean Raby 23e10d30be Added ldap attribute mapping table 2013-04-22 12:31:18 -04:00
Jean Raby f049e2430a Added ldap attribute mapping table 2013-04-22 12:25:22 -04:00
Jean Raby a53c66e8a4 Install openchange_user_cleanup in usr/sbin/
Instead of usr/share/doc/sogo/
2013-04-18 14:35:56 -04:00
Jean Raby 4fb3492ea8 openchange_cleanup.py -> openchange_user_cleanup 2013-04-18 14:28:55 -04:00
Jean Raby 353f40ac3e try to cleanup under INBOX too (altnamespace = no) 2013-04-18 14:15:35 -04:00
Jean Raby 96c831f726 Use separator sent by the imap server, not '/' 2013-04-18 14:11:36 -04:00
Jean Raby 59b3219f2d Merge to 2.05a 2013-04-16 15:20:19 -04:00
Jean Raby d7fdfc6cb2 Update NEWS + bump version 2013-04-16 15:16:54 -04:00
Jean Raby d02f58b3cd Update ChangeLog 2013-04-16 15:12:29 -04:00
Ludovic Marcotte 62fee93d86 Fix for bug #2287 2013-04-16 14:33:57 -04:00
Jean Raby 139c14d9e1 save: memCtx
Same fix as for MAPIStoreContactMessage
2013-04-16 12:06:17 -04:00
Francis Lachapelle 8ee15c6f77 Update Installation Guide
Improved the description of the parameters IMAPHostFieldName and
SieveHostFieldName.
2013-04-16 08:34:10 -04:00
Jean Raby 5d17414018 [MAPIStoreContactsMessage save] needs memCtx
From extrafu
2013-04-15 14:13:07 -04:00
Francis Lachapelle 3cd91846a6 Fix CSS color refresh of calendars 2013-04-11 16:32:17 -04:00
Francis Lachapelle e9eb8bdc86 Merge to 2.0.5 2013-04-11 12:56:34 -04:00
Francis Lachapelle 3739cb1536 Update ChangeLog 2013-04-11 12:55:11 -04:00
Francis Lachapelle 30f10ee8f0 Update translations 2013-04-11 11:30:23 -04:00
Jean Raby dfb8788270 don't build SAML support on debian yet 2013-04-11 10:37:34 -04:00
Jean Raby 3810833e1b remove unrtf leftovers 2013-04-11 10:22:28 -04:00
Francis Lachapelle 29e05c7c81 Bump version to 2.0.5 2013-04-11 10:20:10 -04:00
Jean Raby 0a08285fac Add note regarding precedence of .GNUstepDefaults 2013-04-11 10:09:02 -04:00
Jean Raby 01f20a42ad packaging fixups 2013-04-11 09:18:43 -04:00
Francis Lachapelle 3a61a2566b Updated installation guide: version 2.0.5 2013-04-10 18:24:03 -04:00
Jean Raby d2dda86529 ... dir fixup again 2013-04-10 16:30:16 -04:00
Jean Raby cc125d2192 directory fixup 2013-04-10 16:27:03 -04:00
Jean Raby 4da1e41d93 deb: install a sample sogo.conf in /etc/sogo
While there, replace mkdir + cp combo with 'install'
2013-04-10 16:20:47 -04:00
Jean Raby e24eb10c4f rpm: install a sample sogo.conf in /etc/sogo 2013-04-10 16:20:16 -04:00
Jean Raby dd9e51fd16 sogo.conf - new example configuration file 2013-04-10 16:16:30 -04:00
Jean Raby 9932d1413b update NEWS 2013-04-10 12:29:48 -04:00
Jean Raby ff13c49540 updated NEWS 2013-04-10 12:16:26 -04:00
Jean Raby 1e33b4bf26 Add notes regarding UIDField: value must be unique 2013-04-10 12:05:44 -04:00
Francis Lachapelle e23a7df125 Update NEWS file 2013-04-10 11:33:41 -04:00
Ludovic Marcotte 4ca476db9e Updated NEWS file 2013-04-10 11:30:40 -04:00
Ludovic Marcotte 33840c71cd Changed noop by unselect/select. 2013-04-10 10:48:25 -04:00
Ludovic Marcotte 1b983ef691 Fixed a potential timing issue with Dovecot when getting the modseq 2013-04-10 09:56:23 -04:00
Ludovic Marcotte eec8c07d4f Avoid appending the domain if already present. 2013-04-09 11:35:53 -04:00
Ludovic Marcotte 84ba93fc0a Now set ForceAuthn to false by default 2013-04-08 13:58:55 -04:00
Francis Lachapelle 37a6f82659 Initial Arabic translation 2013-04-08 11:05:45 -04:00
Ludovic Marcotte b4aaa68d85 Also consider the "mail" attribute in order to get the user's login 2013-04-05 10:26:17 -04:00
Ludovic Marcotte 5487f34b9e Disable hint verification for now. 2013-04-05 08:57:47 -04:00
Jean Raby e07734fa5f Filter sql source entries based on the user domain
When using dynamic domains with SQL sources (DomainFieldName),
let WebUI and dav lookups return entries from current domain
and other domains visible from the originating domain.

Fixes #2269

SQLSource.m: _visibleDomainsQualifierFromDomain:
  returns a EOQualifier OR'ing all visible domains from specified domain
  (including specified domain)

SQLSource.m: allEntryIDsVisibleFromDomain
  Replacement for allEntryIDs.
  Instead of returning all entries from the sql source,
  only return the entries visible from the specified domain.

SoObjects/SOGo/SQLSource.m: allEntryIDs
  Changed to call allEntryIDsVisibleFromDomain with an empty domain.

SQLSource.m fetchContactsMatching:inDomain:
  Use _visibleDomainsQualifierFromDomain to filter entries

LDAPSource.m: allEntryIDsVisibleFromDomain
  Simply call allEntryIDs, discarding the domain.
  LDAP does need to do the extra domain filtering

SOGoContactSourceFolder.m: toOneRelationshipKeys
   Call new method: allEntryIDsVisibleFromDomain
2013-03-29 10:38:52 -04:00
Ludovic Marcotte 6a8e6cd762 Fixed the GNUmakfile and const's for charset tables. 2013-03-28 08:32:00 -04:00
Ludovic Marcotte 663351029a Replaced unrtf by our own RTF to HTML converter.
Faster, thread safe, a hell lot cleaner.
2013-03-26 19:32:08 -04:00
Jean Raby c26e5fa7fe semi-colon 2013-03-26 14:01:04 -04:00
Jean Raby 74c01dc448 gen-charset-table.py: script to import ms charmaps
For example: http://msdn.microsoft.com/en-us/goglobal/cc305147
2013-03-26 13:42:22 -04:00
Ludovic Marcotte a009c71034 Fixed table initialization. 2013-03-25 15:58:36 -04:00
Jean Raby b4ebc90dd0 replace subprocess.check_output with Popen magic
check_output isn't available in py 2.6...
2013-03-25 14:12:12 -04:00
Jean Raby 95dc134ca6 Revamped openchange_cleanup.py
This is now usable again.

  - Don't delete password files in mapistoreCleanup()
  - reworked the ldb cleanup and enabled it
  - sql cleanup should now be able to figure out the db info from the config
    regardless of the format used (xml, plist, sogo.conf or GNUstepDefaults)
    (We really need a python plist parser.. the current solution is not elegant)
  - Inform user of missing python packages
2013-03-22 15:13:39 -04:00
Jean Raby 9c4b7d8481 Add notes regarding html mails and mod_reqtimeout 2013-03-21 15:39:02 -04:00
Jean Raby 9fb9f2cae6 Enable saml2 support on squeeze (temporary fix) 2013-03-20 11:51:37 -04:00
Francis Lachapelle 15f9b7d22e Fix comments in UIxContactFolderActions.* 2013-03-15 11:23:27 -04:00
Francis Lachapelle 5f179ed6b0 Activate the menu option "Mark Folder Read"
Fixes #1473
2013-03-15 11:06:26 -04:00
Ludovic Marcotte 93f9a7273e Now handle mem context when saving messages and removed useless debugging. 2013-03-13 15:04:11 -04:00
Jean Raby 15e082896c Update sogo-tool expire-autoreply syntax in cron 2013-03-12 09:08:19 -04:00
Jean Raby 63ff9751d7 Add ics_compare and use it in _testRespondTo()
This new class uses vobject.ics_diff() to compare 2 VCALENDAR components.
We should use this instead of textually comparing events for equality
in future tests.
2013-03-11 11:37:59 -04:00
Francis Lachapelle d12c651d59 New system default SOGoEncryptionKey
To be used to encrypt the passwords of remote Web calendars when
SOGoTrustProxyAuthentication is enabled.
2013-03-11 09:34:36 -04:00
Jean Raby 41a6c02aa3 Rework web services section
State that HTTPS is mandatory for autodiscovery services.
Add example named config for SRV record.
2013-03-08 16:20:27 -05:00
Jean Raby a026e75c0e Removed note about linefeed in password files
This is handled by the code now
2013-03-08 15:57:10 -05:00
Ludovic Marcotte 46815042c9 Fixed bug when modifying/deleting exceptions of recurring events. 2013-03-07 09:29:56 -05:00
Jean Raby c79af52b67 Fix BSONCodec.m includes
include objc.h instead of runtime.h so that it works on older gcc objc runtime
2013-03-06 11:03:19 -05:00
Jean Raby e882dedac9 Update News 2013-03-05 11:01:51 -05:00
Jean Raby 13277bbdb9 c_content TEXT to LONGTEXT for OpenChange tables
Add an script to update existing tables.
Note that if a row already have 65535 char in it,
the data is most likely broken.
2013-03-05 10:47:09 -05:00
Francis Lachapelle 7e8a83aefb Fix Slovak templates for mail reply/forward 2013-03-05 10:22:20 -05:00
Jean Raby f1846191d5 Use an autorelease pool in member expansion
Otherwise, we would hold one ldap connection for each member of a group.
And close them all later. With large groups, we could hit the open file limit
(or the open file limit of the ldap server).

Fixes #2256
2013-03-01 16:24:16 -05:00
Jean Raby a7c3f33447 Whitespace 2013-03-01 01:26:15 -05:00
Ludovic Marcotte a8d67edb44 Merge branch 'master' of https://github.com/inverse-inc/sogo 2013-02-20 12:11:17 -05:00
Ludovic Marcotte 89766b2e7e Temporary fix for unsigned long long values. 2013-02-20 12:10:34 -05:00
Jean Raby 7d65d808f6 Strip newline characters from user password files
Makes it easier to create those files with a regular editor.
2013-02-20 10:50:58 -05:00
Ludovic Marcotte fa5e99d58d Much better fix over previous commit. 2013-02-19 15:54:52 -05:00
Ludovic Marcotte 67c2d508ea Added rationale around previous commit. 2013-02-19 15:42:05 -05:00
Ludovic Marcotte 19923d10db Also handle date-strings as date objects.
Dates are stored as string in BSON - might change in the future.
2013-02-19 15:30:29 -05:00
Ludovic Marcotte e57b6835e6 Fix for objective-c runtimes. 2013-02-18 16:50:54 -05:00
Ludovic Marcotte bcab7e7dc9 C99 style fixes. 2013-02-18 16:42:59 -05:00
Ludovic Marcotte 2572eedd89 Added BSON encoder/decoder for Outlook cache files. 2013-02-18 16:28:06 -05:00
Francis Lachapelle efb45bfba6 Fix issue with exceptions in repeating events
Fixed the display of an exception when its recurrence id is outside the
current view.
2013-02-15 15:17:08 -05:00
Ludovic Marcotte 4f38b5cf3f Alse use hex-formatted keys for deleted mails. 2013-02-14 15:59:19 -05:00
Ludovic Marcotte 71b9772546 Ensure we hit the cache with hex-formatted keys. 2013-02-14 15:22:48 -05:00
Francis Lachapelle c13c389ae5 Update Danish translation 2013-02-12 08:42:47 -05:00
Jean Raby caf6f0ec6c Add example apache configuration for apple AB 2013-02-11 10:41:50 -05:00
Jean Raby 4952ff7914 Use SOGoSystemDefaults in all tools
sogo-ealarms-notify and sogo-slapd-sockd will now be able to use sogo.conf
Fixes #2226
2013-02-08 16:22:14 -05:00
Francis Lachapelle 8981dcd645 Fix segfault in SOGoSieveManager.m 2013-02-08 09:42:31 -05:00
Jean Raby 470a53a548 Add example configuration for fail2ban
From Arnd Brandes. (#2229)
2013-02-07 13:00:27 -05:00
Francis Lachapelle 7b65b7400e Update Finnish translation 2013-02-07 09:00:16 -05:00
Francis Lachapelle 90c61abdb6 Update Polish translation 2013-02-06 15:16:09 -05:00
Jean Raby f8387b90ff Log x-webobjects-remote-host in login process
Most of the time, the remote-host will contain data from the x-forwarded-for header.
Which could have more than one ip in it if the request went through multiple proxies.
eg. x-forwarded-for: real.client.ip, load.balancer.ip
2013-02-06 09:23:47 -05:00
Francis Lachapelle feb02c54b9 Add missing localizable string 2013-02-05 16:13:18 -05:00
Ludovic Marcotte 49a2299414 Avoid going out of bounds for special URL chars ending mail contents. 2013-02-05 16:11:37 -05:00
Jean Raby 43044bf88f Plug sieve connection leak
Fixes #2228
Fix from 'bofhus'
2013-02-05 15:09:55 -05:00
Jean Raby 0532d331a3 whitespace (tabkill) 2013-02-05 15:09:20 -05:00
Jean Raby 70fc05091f Remove x-webobjects-remote-host from apache conf
SOPE now handles this on its own by setting x-webobjects-remote-host
to the content of the x-forward or x-forwarded-for headers if it wasn't defined
2013-02-05 14:27:16 -05:00
Jean Raby 469e5c647e Updated NEWS 2013-02-05 11:52:26 -05:00
Jean Raby 4bfb43a4ad Merge 'tests/authcache' - don't use cache on login 2013-02-05 11:40:47 -05:00
Francis Lachapelle 5e0c7ae4f2 Merge to 2.0.4b 2013-02-04 14:24:46 -05:00
Francis Lachapelle 3daa7e55b7 Update ChangeLog 2013-02-04 14:24:03 -05:00
Francis Lachapelle 6913502810 Bump version to 2.0.4b 2013-02-04 14:22:37 -05:00
Jean Raby 24971070f6 Updated NEWS 2013-02-04 14:03:28 -05:00
Jean Raby 3d90e3a539 Bump userkey length from 64 to 160 bytes
Allows for much longer username@domain:password strings.
Fixes #2212

To bump it further, the database schema will have to be updated
to allow a longer c_value (currently 255 chars)
2013-02-04 13:55:53 -05:00
Francis Lachapelle b5fdaa78cd Add missing strings to mail module
The two columns names of the contacts pane were missing. They have
been copied from the contact module.
2013-02-04 08:58:37 -05:00
Francis Lachapelle f94adb5473 Update NEWS file 2013-02-03 20:42:20 -05:00
Francis Lachapelle e34ba5689c Fix saving prefs with disabled mail module 2013-02-03 20:40:06 -05:00
Jean Raby 7b5da8a2c9 don't use cache for login page 2013-02-01 19:58:25 -05:00
Jean Raby 451c82c815 Don't use user/password cache from the login page
The idea is to always use memcached for credentials to avoid hitting
the authentication backend on every click but to check with the auth backend
for every login requests.

This should fix #2169

While there, fix whitespace (killtab)
2013-02-01 18:35:10 -05:00
Jean Raby 488a76c5e3 Merge branch 'test/userdefaults' 2013-02-01 16:31:56 -05:00
Jean Raby a4bd966cc0 Revisit option handling
Really fix #2166
The previous fix (46b53b3) was wrong since SOPE was able to override
the 'final' config with its defaults.

This now uses a new approach using a volatile domain and a reordering
of the search list :
  *   NSArgumentDomain (command line arguments)
  *   sogodRuntimeDomain (config from all config files)
  *   GSPrimaryDomain
  *   NSGlobalDomain
  *   GSConfigDomain
  *   (languages)
  *   NSRegistrationDomain (SOPE loads its defaults in this one)
2013-02-01 16:26:01 -05:00
Francis Lachapelle ecc36c9025 Fix classification menu in component editor 2013-02-01 14:47:37 -05:00
Francis Lachapelle 716daf027d Fix link to ACL editor for any authenticated user 2013-02-01 14:46:05 -05:00
Jean Raby 0b7c32510b news file update for 2.0.4b 2013-02-01 10:40:59 -05:00
jraby 547dfa0d90 Merge pull request #9 from inverse-inc/fix/2066_options-precedence
Fix/2066 options precedence
2013-01-31 18:42:09 -08:00
Jean Raby 225a28258f Read credential files using dataWithContentsOfFile
Again, to cope with older gnusteps which don't have
stringWithContentsOfFile:encoding:error:
2013-01-31 16:44:14 -05:00
Jean Raby e01b190e57 Fixup handling NSArgumentDomain arguments
would fix #2216
2013-01-31 15:42:48 -05:00
Francis Lachapelle cd7d410262 Fix tooltips in contacts list 2013-01-31 13:55:57 -05:00
Francis Lachapelle 4bcf90c693 Fix "Send Anyway" string wrt localizable strings 2013-01-31 09:44:29 -05:00
Francis Lachapelle 0408415c61 Remove control characters before returning JSON 2013-01-30 15:47:20 -05:00
Francis Lachapelle c1c0c1ab44 Merge to 2.0.4a 2013-01-30 08:54:00 -05:00
Francis Lachapelle 3ea94940c2 Update ChangeLog 2013-01-30 08:52:32 -05:00
Francis Lachapelle 321675ba99 Bump version to 2.0.4a 2013-01-30 08:51:10 -05:00
Francis Lachapelle 9eb1418e36 Update French translation 2013-01-30 08:49:16 -05:00
Francis Lachapelle d8804c699d Format birthday on contact card 2013-01-30 08:43:02 -05:00
Francis Lachapelle 4e9db74e29 Update NEWS file 2013-01-29 15:04:57 -05:00
Francis Lachapelle 7150ebde6b Update updates.php 2013-01-29 15:03:37 -05:00
Francis Lachapelle 6fbd975e00 Update NEWS file 2013-01-29 15:02:51 -05:00
Francis Lachapelle e0a1a47953 Code cleanup in UIxAppointmentEditor.m 2013-01-29 14:53:57 -05:00
Francis Lachapelle da757a19c6 Fix handling of decoding contacts UID
A problem occurs when the contact UID contains a special character that
was HTML encoded (ex: space, &, ").
2013-01-28 22:05:54 -05:00
Jean Raby ea13fd14c9 Use older NSPropertyListSerialization methods
dataWithPropertyList and propertyListWithData didn't exist in gnustep 1.20
which is shipped with debian-squeeze.
2013-01-29 10:31:16 -05:00
Francis Lachapelle 902a5d8f70 Fix saving all-day event in appointment editor 2013-01-28 18:43:45 -05:00
Francis Lachapelle be0090be06 Fix until date in component editor 2013-01-28 16:44:14 -05:00
Francis Lachapelle 2d455bf0ca Fix possible infinite loop in repeataable object 2013-01-28 09:51:42 -05:00
Francis Lachapelle 1d8e72646c Update Czech translation 2013-01-28 08:43:58 -05:00
Ludovic Marcotte c066136a06 Reverted code that was causing issues with groups (#2090) 2013-01-28 08:34:40 -05:00
Francis Lachapelle a59fff785b Merge to 2.0.4 2013-01-25 14:01:10 -05:00
Francis Lachapelle 40facab9a7 Update ChangeLog 2013-01-25 13:59:52 -05:00
Francis Lachapelle 94eec4678e Bump version to 2.0.4 2013-01-25 13:58:17 -05:00
Francis Lachapelle 292ed9cfc8 Fix URL encoding of user id in UIxAclEditor.js 2013-01-25 13:55:22 -05:00
Ludovic Marcotte 663346e8ec Merge branch 'master' of https://github.com/inverse-inc/sogo 2013-01-25 10:21:51 -05:00
Ludovic Marcotte 8f33197c59 Fix for bug #1991. 2013-01-25 10:21:28 -05:00
Jean Raby 46b53b31fd Fix order of precedence for options
Fixes #2066 and #2166
Enforce the following order of precedence for options, first match wins:
  1. Command line arguments
  2. .GNUstepDefaults
  3. /etc/sogo/{debconf,sogo}.conf
  4. SOGoDefaults.plist
2013-01-24 22:43:38 -05:00
Jean Raby 6093c4dd2e Axe handling of sogo 0.9 gnustep domain migration 2013-01-24 20:37:30 -05:00
Jean Raby 61ded01171 whitespace - tabkill 2013-01-24 20:35:03 -05:00
Francis Lachapelle 9ed53cbab3 Make 'show completed tasks' persistent 2013-01-24 18:50:20 -05:00
Francis Lachapelle dfe49ea3b4 Update translations 2013-01-24 14:43:21 -05:00
Francis Lachapelle 147d7f4cf0 Update documentation guides 2013-01-24 13:42:24 -05:00
Jean Raby 794ca2ae8a Merge branch 'fix/1470_sogo-system-user' 2013-01-24 09:39:35 -05:00
Francis Lachapelle 036e535b33 Update Finnish translation 2013-01-23 16:35:12 -05:00
Ludovic Marcotte a1b623b325 We now allow to change the storage format for plists. 2013-01-23 20:21:27 -05:00
Jean Raby 0965fd837a Updated doc for samba 4.0.1 (samta-tool) 2013-01-23 13:08:20 -05:00
Jean Raby 95b193391e Add note about 'requiretty' in sudoers file 2013-01-23 09:10:43 -05:00
Jean Raby 9e38c5060a Plug ldap fd leak in login checks 2013-01-22 18:42:00 -05:00
Jean Raby cfa7402dec NEWS: Add note related to sudo -u sogo usage 2013-01-22 16:03:11 -05:00
Jean Raby 1e4f737a7d test-sogo-tool.py: Use sudo instead of su - 2013-01-22 15:24:21 -05:00
Jean Raby 8d9cfdb3b4 Use 'sogo' group instead of 'adm' in init script
This matches what the package preinst script does.
2013-01-22 13:32:57 -05:00
Jean Raby 884dd7448c Rewrite useradd for debian packages
Add the sogo user as a system user
Create and/or fix the permissions/ownership of various directories when
installing or upgrading the package.
2013-01-22 13:29:30 -05:00
Jean Raby 3cd7beb93d whitespace (tabkill) 2013-01-22 13:29:16 -05:00
Jean Raby 790a0536bc whitespace (tabkill) 2013-01-22 13:27:13 -05:00
Francis Lachapelle 9dded7c86c Update German translation 2013-01-22 11:09:26 -05:00
Francis Lachapelle d85ada6750 Fix localization of recurrence editor 2013-01-22 10:58:11 -05:00
Francis Lachapelle 5b4dd4ecb1 Improve JS regexp for email addresses 2013-01-22 10:53:38 -05:00
Jean Raby 721472d38e spec: sogo user as a system user, perms fixes
Create the sogo user as a system user
Use %attr() to set directory permissions instead of chown/chmod
Use more restrictive permissions for the log and spool directories
2013-01-22 10:16:15 -05:00
Francis Lachapelle d737b2fd9a Merge remote-tracking branch 'origin/master'
y this merge is necessary,
2013-01-21 14:57:13 -05:00
Jean Raby ac5c2b611a rhel: create the sogo user as a system user
Fixes #1470
2013-01-21 15:38:24 -05:00
Francis Lachapelle 502f10cfd4 Update documentation and NEWS file 2013-01-21 14:52:52 -05:00
Francis Lachapelle 5bbb5df2a8 Fix exceptions of recurring all-day events 2013-01-21 14:11:38 -05:00
Francis Lachapelle ddc9a1b3f5 Fix recurrence-id of all-day events
Recurrence-ID of all-day events must be defined as a date (VALUE=DATE).
2013-01-21 13:43:32 -05:00
Francis Lachapelle d835921062 iCalDateTIme: fix all-day entities
When setting an all-day entity (no time), make sure to set the
NSCalendarDate to GMT before formatting the string.
2013-01-21 13:40:11 -05:00
Francis Lachapelle 5c3dc34440 Appointment editor: fix until date timezone
.. and untabify the file!
2013-01-21 13:33:40 -05:00
Francis Lachapelle be459fa946 Fix first day of the week in datepickers
Fixes #2188
2013-01-21 12:12:50 -05:00
Ludovic Marcotte a78d7007d7 Improved the documentation regarding filters in SOGoUserSources 2013-01-18 11:29:02 -05:00
Julien Kerihuel 7e001a05a4 Issue #1829: Fix crash in unrtf library.
Integer overflow in array index leading to unpredictable behavior.
Using correct integer signess and casting fix the problem and turn
negative value into 0. Expected fallback behavior then apply.

Make use of uint8_t since the hash array is a static array of 255 elements.
2013-01-18 10:27:37 -05:00
Francis Lachapelle e6e4616a69 Fix typo in unit test 2013-01-18 09:39:02 -05:00
Francis Lachapelle 58dc0343bb Merge remote-tracking branch 'origin/master' 2013-01-18 09:38:27 -05:00
Ludovic Marcotte 814e2c0556 Fix for bug #2129 2013-01-18 09:18:10 -05:00
Francis Lachapelle d357936c31 Fix DnD of events in Safari 2013-01-17 11:21:48 -05:00
Francis Lachapelle e279db6431 Update Finnish translation 2013-01-17 10:12:26 -05:00
Jean Raby 9897d003be remove leftover foreach loop
these are not supported by earlier versions of gnustep
While there, fixed var definitions
2013-01-16 15:10:21 -05:00
Jean Raby 113bae4638 add updateCPathInFolderInfo: withCPath2 definition 2013-01-16 15:09:25 -05:00
Francis Lachapelle e9b18d4521 Update NEWS file 2013-01-16 11:33:51 -05:00
Francis Lachapelle f85cc4c186 Fix bug #1846 2013-01-16 11:33:00 -05:00
Francis Lachapelle 775a8421d5 Initial Finnish translation 2013-01-16 10:54:16 -05:00
Francis Lachapelle 6c3ec9836c Update ckeditor to version 4.0.1 2013-01-15 17:46:19 -05:00
extrafu 8ce4b89656 Merge pull request #7 from inverse-inc/fix/1955_sogo-tool-passwd-handling
Fix/1955 sogo tool passwd handling
2013-01-15 10:37:14 -08:00
Ludovic Marcotte 4f2183ec07 Merge branch 'master' of https://github.com/inverse-inc/sogo 2013-01-15 13:34:13 -05:00
Ludovic Marcotte 2370ecb089 We now ignore default roles for "public" accesses. 2013-01-15 13:33:45 -05:00
Francis Lachapelle 0216658674 Update translations
- Catalan
- Czech
- Dutch
- Hungarian
- Polish
- Slovak
- SpanishArgentina
- SpanishSpain
2013-01-15 11:11:50 -05:00
Francis Lachapelle 9ac8e9f0e1 Update the timezones definitions files
Update to the latest edition of the Olson database (2012j), generated
without the "--pure" parameter to get rid of RDATES.
2013-01-14 17:39:23 -05:00
Jean Raby 8fc53ea1d7 sanitizedArguments fixes
Various style fixes
Don't use the foreach loop as it might break on old gcc/objc runtimes
Release sanitizedArguments in dealloc
2013-01-14 16:58:19 -05:00
Jean Raby 55ccd0e83f expire-autoreply: style fixes 2013-01-14 16:57:17 -05:00
Ludovic Marcotte 219dfc61c9 Updated the doc for bug #2127. 2013-01-14 15:26:35 -05:00
Ludovic Marcotte d26df456e5 Fix for bug #2123. 2013-01-14 14:24:06 -05:00
Francis Lachapelle bc1edef448 Update French translation 2013-01-14 13:17:48 -05:00
Francis Lachapelle 2993c3a226 Update NEWS file 2013-01-14 11:27:56 -05:00
Francis Lachapelle 0e5a4901db Add missing languages in preferences module 2013-01-11 16:06:02 -05:00
Francis Lachapelle ec0cc29f38 Add missing translation string to UI/Common 2013-01-11 16:04:55 -05:00
Francis Lachapelle 0211a26aba Fix column display for subfolders of draft & sent 2013-01-11 14:47:13 -05:00
Francis Lachapelle c34cca6a16 Fix datepicker arrows for IE7 2013-01-11 13:25:56 -05:00
Francis Lachapelle 630c69d82d Update datepicker CSS 2013-01-11 13:25:13 -05:00
Francis Lachapelle d761a864eb Fix IE error when automatically loading HTML image 2013-01-11 13:23:33 -05:00
Francis Lachapelle 4b18fc108b Update NEWS file 2013-01-11 10:00:28 -05:00
Ludovic Marcotte 9d4f4c3a9c Proper fix for #2163. 2013-01-11 09:55:10 -05:00
Francis Lachapelle 0e0b7728fd Fix until date in event recurrence editor
- fixed date picker
- fixed JavaScript error caused by French translation
- fixed until date definition when timezone of active user was different
  from the system timezone
- fixes #2173, fixes #2175
2013-01-11 09:46:58 -05:00
Ludovic Marcotte c7fbcb0fc4 Fixed bug #1850 2013-01-09 14:08:37 -05:00
Francis Lachapelle 5667bb1b11 Fix CardDAV collections for OS X
Restored the previous behavior: only the personal addressbook is
returned and only the first source directory is returned (now sorted by
id so you can control which of your addressbook sources you want to
return).
2013-01-09 11:39:29 -05:00
Jean Raby ea904f2e05 user-preferences: rewrite + support for creds file
This is related to #1955
Remove support for specifying the user:pass on the CLI
Add support for credential file: -p filename

Rewrite the core of the run function to use a switch case instead
of ... what was there.
Sprinkle so error messages along the way.
2013-01-07 15:07:17 -05:00
Jean Raby a75c797553 expire-autoreply: read sieve creds from a file
to specify the credential file, use: -p filename
The format of the file is:
  username:password
Fixes: 1955

Also, add logging for some error conditions
The program still supports user:password on the cli
since this is run by cron and existing setups would break
2013-01-07 15:01:06 -05:00
Jean Raby 6f8d8394df add sanitizedArguments to SOGoTool
sanitizedArguments are the arguments received on the CLI minus
those that are part of the NSArgumentDomain
For example:
  sogo-tool user-preferences set sogo1  -p /tmp/creds Vacation -f /tmp/json

arguments would contain:
  @"set", @"sogo1", @"-p", @"/tmp/creds", @"Vacation", @"-f", @"/tmp/json"
sanitizedArguments would contain :
  @"set", @"sogo1", @"Vacation"
2013-01-07 14:54:11 -05:00
Jean Raby b838734756 reindent
kill those tabs!
2013-01-03 21:58:00 -05:00
Jean Raby cd0244883d deb pkgs recommends 'memcached'. RPMs requires it
Fixes #2016
This means that memcached will always be installed along with sogo.
(Even if it could run on another machine/cluster like database services)
2013-01-03 15:53:58 -05:00
Francis Lachapelle 39632239f9 Fix partstat of attendee in his calendar
Fixes #2155
2013-01-03 10:15:25 -05:00
Jean Raby 1382fe25fc put back SOGo_VERSION
wasn't unused after all...
2012-12-22 11:24:18 -05:00
Jean Raby 126cd5fdfe Bump version to 2.0.3a 2012-12-21 14:30:12 -05:00
Jean Raby ea26e0cc0a Use string version number where applicable
The goal is to be able to use 'letter' releases such as '2.0.3a'
in the Version file.
SoObjects/Mailer/GNUmakefile.preamble: UIX_MAILER_*_VERSION are now strings
  Can't use SOGoVersion since the etag uses an 'underscore' notation (2_0_3a)
SoObjects/Mailer/*.m: updated format for UIX_MAILER_*_VERSION
SoObjects/SOGo/GNUmakefile: zap SOGo_VERSION, unsused
SoObjects/SOGo/GNUmakefile.preamble: fix defines
UI/MainUI/SOGoRootPage.m: use SOGoVersion
2012-12-21 13:55:03 -05:00
Jean Raby 4971e8d05a Updated documentation regarding LDAP URLs support 2012-12-20 11:52:19 -05:00
Jean Raby 7d24ece7d6 Log ldap exception details + catch tls exceptions
Make sure to catch exceptions raised by _setupEncryption
Reindent due to NS_DURING
Log ldap exceptions details
2012-12-19 18:37:36 -05:00
Jean Raby e253a7429c Fix whitespace - remove tabs 2012-12-19 18:02:32 -05:00
Francis Lachapelle 8db5e6d224 Fix usage of browser's language for the login page 2012-12-13 08:53:50 -05:00
Francis Lachapelle 0124191329 Update NEWS file 2012-12-12 13:45:51 -05:00
Jean Raby d7d6a31837 use fileAttributesAtPath
attributesOfItemAtPath is not available in older GNUstep releases.
Broke build on squeeze and lucid.
2012-12-11 09:34:06 -05:00
Jean Raby bdc5ce7cd9 Add sogo-tool dump-defaults
Add sogo-tool dump-defaults, a tool to convert an existing sogo configuration
in ~sogo/GNUstep/Defaults/.GNUstepDefaults to /etc/sogo/sogo.conf format.
The output will be in OpenStep property list format, which is much
easier to read and edit, at least for humans.

While there, sort the Tools list
2012-12-10 14:10:56 -05:00
Jean Raby a0aef043a8 Don't abort if sogo.conf exists and is empty
This will permit patterns like:
  sogo-tool dump-defaults >/etc/sogo/sogo.conf

Without this, sogo-tool would abort as the shell first creates the file
then executes sogo-tool.
2012-12-10 14:05:11 -05:00
Jean Raby b4822f6c4e Fix subject and character encoding
Add and Modification subject line were reversed
Added missing escapeHTML=NO
2012-12-07 17:57:19 -05:00
Ludovic Marcotte 4804337a01 Now pass the memory context when copying/moving folders. 2012-12-07 13:30:50 -05:00
Jean Raby e2d2212524 Build the updateLink dynamically from SCRIPT_URI 2012-12-07 12:44:36 -05:00
Francis Lachapelle 6a70db80e6 Merge to 2.0.3a 2012-12-07 09:35:03 -05:00
Francis Lachapelle 01e42dce7c Webmail: fix reference of search field 2012-12-07 08:48:12 -05:00
Francis Lachapelle e533eb91a9 Web: reset search when search field is empty 2012-12-07 08:47:32 -05:00
Francis Lachapelle d610630c8d Merge to 2.0.3 (again) 2012-12-06 13:08:47 -05:00
Francis Lachapelle ed8c4a8f54 Update ChangeLog 2012-12-06 13:07:45 -05:00
Francis Lachapelle 99669f2d5c Fix dynamic CSS in IE8
When adding a calendar or subscribing to a calendar, the dynamic CSS was
not properly applied in IE8. This new technique seems to fix all cases.
2012-12-06 13:05:54 -05:00
Francis Lachapelle 128368f66c Fix search when accessing users folders 2012-12-06 13:03:10 -05:00
Francis Lachapelle 7c7989065c prototype.js: Fix handling of opacity in IE 2012-12-06 13:02:06 -05:00
Francis Lachapelle 4dc7790015 Merge to 2.0.3 2012-12-06 10:40:33 -05:00
Francis Lachapelle f141312195 Update ChangeLog 2012-12-06 10:36:11 -05:00
Francis Lachapelle 2a5e0aeaa9 Disable autocompletion of reply-to address 2012-12-06 10:32:31 -05:00
Francis Lachapelle 026ffd8888 Update translations 2012-12-06 10:31:15 -05:00
Francis Lachapelle 4926855f48 Bump version to 2.0.3 2012-12-06 09:39:07 -05:00
Francis Lachapelle 881a725f12 Update NEWS file 2012-12-06 09:06:55 -05:00
Ludovic Marcotte a7722755b7 Fixed length call. 2012-12-06 09:03:17 -05:00
Francis Lachapelle 5e7d2325bb Update documentation guides 2012-12-05 22:16:47 -05:00
Ludovic Marcotte 347434dbff We now fallback properly on the IMAP server if the Sieve server is undefined. 2012-12-05 15:52:50 -05:00
Ludovic Marcotte ca1a3ac06b Fixed the ordering of the memory context. 2012-12-05 14:56:29 -05:00
Francis Lachapelle 8ca79d9a17 Search field for tasks
Fixes #2103
2012-12-05 14:47:28 -05:00
Ludovic Marcotte 3606601c39 Fix for bug #2130 2012-12-05 08:51:55 -05:00
Ludovic Marcotte 988e91a638 We also remove the RSVP in the user's calendar during a PUT. 2012-12-05 08:31:35 -05:00
Ludovic Marcotte f6b5fdacb9 Remaining patches for bug #1866. 2012-12-03 16:49:20 -05:00
Ludovic Marcotte aa7aa6a973 Initial patch from #1866 to fix c_sievehostname. 2012-12-03 16:42:56 -05:00
Ludovic Marcotte d64fd65ea8 Lowercase some value to avoid broken comparaisons. 2012-12-03 16:33:14 -05:00
Ludovic Marcotte ef7c69eda7 Now consider "utf8" crap as "utf-8", coming from bad mailers. 2012-12-03 14:56:11 -05:00
Ludovic Marcotte 2017536beb move_copy_messages now uses the openchange's memory context.
This fixes strange crashes when dealing with invitations and
other stuff. More work will need to be done in this regard. Also
kept the old code just in case for now. Will be cleaned up shortly
after more people test it.
2012-12-03 09:18:17 -05:00
Francis Lachapelle 5500f99312 Remove conditions on RSVP
Fixes #1850
2012-11-30 15:11:03 -05:00
Ludovic Marcotte eed17fd95a Fix for bug #1850 and removed dead code/comments. 2012-11-30 13:57:55 -05:00
Ludovic Marcotte 0e02334fda Updated the doc in preparation for the release and to fix #2101. 2012-11-30 10:31:58 -05:00
Ludovic Marcotte 1993d60683 Merge branch 'master' of https://github.com/inverse-inc/sogo 2012-11-30 10:11:33 -05:00
Ludovic Marcotte 47a9a22bc0 Fix for bug #2082. 2012-11-30 10:11:05 -05:00
Francis Lachapelle b1d3aba1e1 Add missing localizable strings in prefs module 2012-11-29 16:09:53 -05:00
Ludovic Marcotte f0f206b8bb Merge branch 'master' of https://github.com/inverse-inc/sogo 2012-11-29 15:50:07 -05:00
Ludovic Marcotte 73ff981d4f Fixed the method that returns the current-user-principal. 2012-11-29 15:49:32 -05:00
Francis Lachapelle 88550c0d0d Update NEWS file 2012-11-29 14:56:33 -05:00
Francis Lachapelle 440523747d Rollback selection of language on login page
See dfcf0ca and ticket #1798
2012-11-29 14:54:15 -05:00
Francis Lachapelle 93f77c0dd5 Add missing localizable string in calendar module 2012-11-29 14:46:39 -05:00
Francis Lachapelle ce36e80d6b Initial Slovak translation 2012-11-29 14:40:46 -05:00
Francis Lachapelle 96f023d108 Mail: Improve iCal viewer 2012-11-29 14:00:10 -05:00
extrafu f2da438a2b Fixed typo 2012-11-27 21:07:11 -05:00
Francis Lachapelle e1411e7120 Update NEWS file 2012-11-27 16:43:26 -05:00
Francis Lachapelle cbfb6eb9ff Update NEWS file 2012-11-27 16:37:55 -05:00
Francis Lachapelle 14630ce222 Improve memory usage of "sogo-tool restore"
Used an autorelease pool.
2012-11-27 15:53:39 -05:00
Francis Lachapelle e523926ef5 iCalTrigger: fix initialization of variable 2012-11-27 15:14:30 -05:00
Francis Lachapelle 57e4116d7c Cleanup 2012-11-27 10:44:43 -05:00
Francis Lachapelle 1d0eb66781 Place caret at proper position in HTML replies
Removed constraint in preferences module that would limit the reply
placement of HTML mail to be before the quote. We now properly place the
caret at the bottom, before the signature, when the user has chosen to
start her reply bellow the quote in HTML mode.
2012-11-27 10:37:14 -05:00
Francis Lachapelle d75b04c59f Fix JS syntax for IE7 2012-11-27 10:33:06 -05:00
Francis Lachapelle 3e8f7cb29e Fix all-day event display in day/week view
Fixes #2098
2012-11-26 15:07:33 -05:00
Ludovic Marcotte 7c250fad8f Fix for bug #1061. 2012-11-26 13:13:06 -05:00
Jean Raby 6d61e064a5 Fix typos 2012-11-23 10:26:43 -05:00
Francis Lachapelle a5948b420b Simplify JS regexp to handle issue with FireFox 2012-11-22 10:57:21 -05:00
Ludovic Marcotte 1bf2509d1e Fix for bug #2115. 2012-11-21 11:56:24 -05:00
Francis Lachapelle 249bf16e8a Add missing localized string in preferences module 2012-11-21 11:13:17 -05:00
Ludovic Marcotte 7b65c29b1e Fixed \n / <br/> when composing mails and improved preferences UI. 2012-11-21 08:54:32 -05:00
Ludovic Marcotte 28f66c6fd9 We correctly use <br/> instead of \n when handling the signature.
This happens when using HTML composition, instead of plain/text.
2012-11-20 20:29:27 -05:00
Ludovic Marcotte cc98664d13 Fix for bug #2024. 2012-11-20 15:21:49 -05:00
Ludovic Marcotte 1fdcf843f3 Slightly improved previous commit to avoid losing X- elements. 2012-11-20 08:30:41 -05:00
Ludovic Marcotte a1d092cab0 Fix for #2093. 2012-11-19 14:20:13 -05:00
Ludovic Marcotte 2606787dd7 Make sure we handle arrays, and not single-value string objects. 2012-11-19 09:45:48 -05:00
Francis Lachapelle eec99de5d0 Indentation 2012-11-16 19:11:13 -05:00
Ludovic Marcotte 5bf7105982 Fix for bug #1783. 2012-11-18 10:48:58 -05:00
Ludovic Marcotte 0979bd13ae Fix for bug #2006. 2012-11-17 17:16:00 -05:00
Ludovic Marcotte 40d6ce66d0 Small fix over previous commit. 2012-11-17 16:43:49 -05:00
Ludovic Marcotte 8fd0966a23 Correctly loop among calendars. This fixes #2070. 2012-11-17 16:12:23 -05:00
Ludovic Marcotte 3f8d374d63 Fix for bug #2035 2012-11-17 15:38:29 -05:00
Ludovic Marcotte 77e4b3307f Fix for bug #2106 2012-11-17 15:33:07 -05:00
Jean Raby 378eef4082 Use GCSSpecialQueries in sogo-tool rename-user
Fixes #1924
The SQL syntax used by the former query would only work
with postgresql and Oracle.
2012-11-13 17:20:18 -05:00
Francis Lachapelle 8c96f717c0 Update Prototype JS to version 1.7.1
.. and fixed namespace conflict in dtree.js (Node => dtreeNode)
2012-11-13 16:25:20 -05:00
Francis Lachapelle 33bd07a53d Fix user rights editor in calendar module 2012-11-13 16:22:27 -05:00
Francis Lachapelle 0e8aeb5ef5 Merge remote-tracking branch 'origin/master'
this merge is necessary,
2012-11-13 16:17:38 -05:00
Francis Lachapelle fb4b266b3b Improve user rights editor in calendar module 2012-11-13 16:13:56 -05:00
Jean Raby d82ba7cbb9 Reorder VCALENDAR template elements
It must match [iCalCalendar orderOfElements]
2012-11-13 15:01:30 -05:00
Ludovic Marcotte f8a72d4719 Merge branch 'master' of https://github.com/inverse-inc/sogo 2012-11-13 14:01:22 -05:00
Ludovic Marcotte 51192dd533 We now order correctly CardGroups - especially for calendars.
This is to avoid a bug in BlackBerry devices where the METHOD
must be placed BEFORE any vevent/vtimezone objects, otherwise
the invitation objects are never recognized, and rather shown
as a "application/x-rimdevicecalendar" attachment.
2012-11-13 13:58:05 -05:00
Francis Lachapelle b088f6f97f Fix scrolling for calendars/addressbooks lists 2012-11-12 16:36:30 -05:00
Francis Lachapelle e037ca0a49 Fix bug with reply-to header in messages 2012-11-12 15:32:03 -05:00
Jean Raby 48b6cbcf0c Add missing dependency on lasso and lasso-devel 2012-11-12 09:56:22 -05:00
Wolfgang Sourdeau 3b0a497f2d (hack) allow subcribers to read messages from "Freebusy Data" root folder 2012-11-09 14:50:56 -05:00
Wolfgang Sourdeau 58d6a3c5ea Style 2012-11-08 19:40:44 -05:00
Wolfgang Sourdeau c3c5e464a9 Restored cleanup of IMAP folders created by Outlook 2012-11-08 19:36:32 -05:00
Wolfgang Sourdeau 303eaa3820 Enable the reading of system-wide user defaults 2012-11-08 19:31:23 -05:00
Wolfgang Sourdeau d797868d71 asCSSIdentifier: made conversion faster by using a list 2012-11-08 19:15:00 -05:00
Francis Lachapelle 0ab36d4ec5 Fix title display of cards with a photo 2012-11-07 11:06:12 -05:00
Wolfgang Sourdeau e49f21b0c4 Merge branch 'master' of github.com:inverse-inc/sogo 2012-11-07 09:50:42 -05:00
Wolfgang Sourdeau 3f58b6bfd1 Use the output of "gnustep-config --base-libs" to determine which libs our libraries must be linked against 2012-11-07 09:50:32 -05:00
Wolfgang Sourdeau 160aa42b88 set the "check" target as a non-default target 2012-11-07 09:49:46 -05:00
Luc Charland 0884a0f23e Modified CSS to move mail preference filter down 2012-11-06 15:39:14 -05:00
Wolfgang Sourdeau 54e1439faf Merge branch 'master' of github.com:inverse-inc/sogo 2012-11-06 13:50:48 -05:00
Wolfgang Sourdeau 63024c30f0 Make use of the new -[NSData compress] method and remove \n chars from base64 data 2012-11-06 13:50:26 -05:00
Wolfgang Sourdeau 4b8a14e41e Make use of SAML2 assertion as IMAP password 2012-11-06 10:46:40 -05:00
Wolfgang Sourdeau ba67c57629 Save SAML2 assertion 2012-11-06 10:46:11 -05:00
Wolfgang Sourdeau 0f0b4926a9 updated NEWS 2012-11-06 10:45:53 -05:00
Ludovic Marcotte 6ad59a8481 Apply patches for bug #2060 2012-11-06 09:04:18 -05:00
Ludovic Marcotte fe09a7969d Automatically disable alarms for newly subsribed calendars.
This fixes bug #2074.
2012-11-06 08:05:23 -05:00
Jean Raby ca568ec5b5 Disable SAML2 on RHEL5 - its glib2 is prehistoric 2012-11-05 15:31:48 -05:00
Jean Raby 0a4809e2be Fix 'Show Raw Source' for tasks 2012-11-05 13:12:25 -05:00
Wolfgang Sourdeau 627ebbaea9 Updated documentation for NGImap4AuthMechanism 2012-11-05 10:34:46 -05:00
Wolfgang Sourdeau 48c41e6c62 Updated for SAML2 authentication 2012-11-02 15:48:46 -04:00
Wolfgang Sourdeau 9096f0b279 Updates news 2012-11-02 15:35:19 -04:00
Wolfgang Sourdeau 1ebf0a69ed Merge branch 'master' of github.com:inverse-inc/sogo 2012-11-02 15:31:55 -04:00
Wolfgang Sourdeau aeabd85c90 Finalized support for SAML2 logon 2012-11-02 15:31:49 -04:00
Wolfgang Sourdeau 695fc5fff9 added methods for supporting SAML2 configuration 2012-11-02 15:30:13 -04:00
Wolfgang Sourdeau 6840fbb96c added methods for supporting SAML2 persistence 2012-11-02 15:29:02 -04:00
Jean Raby b905f42f47 Encode username when deleting socfs table contents
Using the same encoding as NSString+Utilities asCSSIdentifier
2012-11-02 14:25:26 -04:00
Wolfgang Sourdeau efb39b401a Merge branch 'master' of github.com:inverse-inc/sogo 2012-11-02 13:55:12 -04:00
Wolfgang Sourdeau e02221d716 Auto-generate the SOGoSAML2Exceptions helper module 2012-11-02 13:54:52 -04:00
Jean Raby 9edab5ee4a Enable saml2 in rpms 2012-11-02 11:24:55 -04:00
Wolfgang Sourdeau bc2b003676 Make use of pkg-config to retrieve gcc and ld options for liblasso 2012-11-01 16:06:26 -04:00
Wolfgang Sourdeau a9b521c8be Added SOGoSAML2Session 2012-11-01 11:29:27 -04:00
Wolfgang Sourdeau 157e66ad4f added "--enable-saml2" configuration option and dependency on liblasso 2012-11-01 11:28:45 -04:00
Wolfgang Sourdeau 39c2d43cef Implemented "saml2-metadata" web method to fetch the metadata corresponding to the current server 2012-11-01 10:48:10 -04:00
Wolfgang Sourdeau ac5f0bb95a implemented +[SOGoSAML2Session metadata] 2012-11-01 10:46:51 -04:00
Wolfgang Sourdeau e31f809849 Use the system defaults when the user defaults are not availble 2012-11-01 10:27:27 -04:00
Luc Charland a916ac8927 Fixed bug #1105 Remote images display
There now is a configurable default in mail preferences where
you can set remote images to display either Never or Always.
2012-10-31 11:53:30 -04:00
Wolfgang Sourdeau 21ee23e7df avoid comparisons that extend past the string length 2012-10-30 16:59:22 -04:00
Wolfgang Sourdeau 1223a6c0ee make use of -[WOComponent componentBundle] 2012-10-30 09:41:20 -04:00
Wolfgang Sourdeau 7c2079870a Merge branch 'master' of github.com:inverse-inc/sogo 2012-10-30 08:57:16 -04:00
Wolfgang Sourdeau 806ea9fd13 do not duplicate the result of method calls into a NSMutableString 2012-10-30 08:49:51 -04:00
Wolfgang Sourdeau 40a1a51845 cache the "startDate" 2012-10-30 08:49:02 -04:00
Wolfgang Sourdeau 20cb769db1 style 2012-10-26 22:38:41 -04:00
Francis Lachapelle 2fdf4f5535 Fix typos in Spanish (Spain) translation 2012-10-26 22:31:14 -04:00
Wolfgang Sourdeau 9929623119 Accelerated basic page loading by caching the list of supported languages 2012-10-25 21:58:34 -04:00
Wolfgang Sourdeau cf0e0691f6 Accelerated basic page loading by caching the user language 2012-10-25 21:46:23 -04:00
1210 changed files with 26556 additions and 48762 deletions

No files matched your search

+31 -1
View File
@@ -1,9 +1,10 @@
[main]
host = https://www.transifex.net
host = https://www.transifex.com
[sogo.ui-mailerui]
source_file = UI/MailerUI/English.lproj/Localizable.strings
source_lang = en
trans.ar = UI/MailerUI/Arabic.lproj/Localizable.strings
trans.ca = UI/MailerUI/Catalan.lproj/Localizable.strings
trans.cs = UI/MailerUI/Czech.lproj/Localizable.strings
trans.cy = UI/MailerUI/Welsh.lproj/Localizable.strings
@@ -11,6 +12,7 @@ trans.da_DK = UI/MailerUI/Danish.lproj/Localizable.strings
trans.de = UI/MailerUI/German.lproj/Localizable.strings
trans.es_AR = UI/MailerUI/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = UI/MailerUI/SpanishSpain.lproj/Localizable.strings
trans.fi = UI/MailerUI/Finnish.lproj/Localizable.strings
trans.fr = UI/MailerUI/French.lproj/Localizable.strings
trans.hu = UI/MailerUI/Hungarian.lproj/Localizable.strings
trans.is = UI/MailerUI/Icelandic.lproj/Localizable.strings
@@ -21,12 +23,14 @@ trans.nn_NO = UI/MailerUI/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/MailerUI/Polish.lproj/Localizable.strings
trans.pt_BR = UI/MailerUI/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = UI/MailerUI/Russian.lproj/Localizable.strings
trans.sk = UI/MailerUI/Slovak.lproj/Localizable.strings
trans.sv = UI/MailerUI/Swedish.lproj/Localizable.strings
trans.uk = UI/MailerUI/Ukrainian.lproj/Localizable.strings
[sogo.ui-preferencesui]
source_file = UI/PreferencesUI/English.lproj/Localizable.strings
source_lang = en
trans.ar = UI/PreferencesUI/Arabic.lproj/Localizable.strings
trans.ca = UI/PreferencesUI/Catalan.lproj/Localizable.strings
trans.cs = UI/PreferencesUI/Czech.lproj/Localizable.strings
trans.cy = UI/PreferencesUI/Welsh.lproj/Localizable.strings
@@ -34,6 +38,7 @@ trans.da_DK = UI/PreferencesUI/Danish.lproj/Localizable.strings
trans.de = UI/PreferencesUI/German.lproj/Localizable.strings
trans.es_AR = UI/PreferencesUI/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = UI/PreferencesUI/SpanishSpain.lproj/Localizable.strings
trans.fi = UI/PreferencesUI/Finnish.lproj/Localizable.strings
trans.fr = UI/PreferencesUI/French.lproj/Localizable.strings
trans.hu = UI/PreferencesUI/Hungarian.lproj/Localizable.strings
trans.is = UI/PreferencesUI/Icelandic.lproj/Localizable.strings
@@ -44,12 +49,14 @@ trans.nn_NO = UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/PreferencesUI/Polish.lproj/Localizable.strings
trans.pt_BR = UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = UI/PreferencesUI/Russian.lproj/Localizable.strings
trans.sk = UI/PreferencesUI/Slovak.lproj/Localizable.strings
trans.sv = UI/PreferencesUI/Swedish.lproj/Localizable.strings
trans.uk = UI/PreferencesUI/Ukrainian.lproj/Localizable.strings
[sogo.ui-scheduler]
source_file = UI/Scheduler/English.lproj/Localizable.strings
source_lang = en
trans.ar = UI/Scheduler/Arabic.lproj/Localizable.strings
trans.ca = UI/Scheduler/Catalan.lproj/Localizable.strings
trans.cs = UI/Scheduler/Czech.lproj/Localizable.strings
trans.cy = UI/Scheduler/Welsh.lproj/Localizable.strings
@@ -57,6 +64,7 @@ trans.da_DK = UI/Scheduler/Danish.lproj/Localizable.strings
trans.de = UI/Scheduler/German.lproj/Localizable.strings
trans.es_AR = UI/Scheduler/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = UI/Scheduler/SpanishSpain.lproj/Localizable.strings
trans.fi = UI/Scheduler/Finnish.lproj/Localizable.strings
trans.fr = UI/Scheduler/French.lproj/Localizable.strings
trans.hu = UI/Scheduler/Hungarian.lproj/Localizable.strings
trans.is = UI/Scheduler/Icelandic.lproj/Localizable.strings
@@ -67,12 +75,14 @@ trans.nn_NO = UI/Scheduler/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/Scheduler/Polish.lproj/Localizable.strings
trans.pt_BR = UI/Scheduler/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = UI/Scheduler/Russian.lproj/Localizable.strings
trans.sk = UI/Scheduler/Slovak.lproj/Localizable.strings
trans.sv = UI/Scheduler/Swedish.lproj/Localizable.strings
trans.uk = UI/Scheduler/Ukrainian.lproj/Localizable.strings
[sogo.ui-contacts]
source_file = UI/Contacts/English.lproj/Localizable.strings
source_lang = en
trans.ar = UI/Contacts/Arabic.lproj/Localizable.strings
trans.ca = UI/Contacts/Catalan.lproj/Localizable.strings
trans.cs = UI/Contacts/Czech.lproj/Localizable.strings
trans.cy = UI/Contacts/Welsh.lproj/Localizable.strings
@@ -80,6 +90,7 @@ trans.da_DK = UI/Contacts/Danish.lproj/Localizable.strings
trans.de = UI/Contacts/German.lproj/Localizable.strings
trans.es_AR = UI/Contacts/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = UI/Contacts/SpanishSpain.lproj/Localizable.strings
trans.fi = UI/Contacts/Finnish.lproj/Localizable.strings
trans.fr = UI/Contacts/French.lproj/Localizable.strings
trans.hu = UI/Contacts/Hungarian.lproj/Localizable.strings
trans.is = UI/Contacts/Icelandic.lproj/Localizable.strings
@@ -90,12 +101,14 @@ trans.nn_NO = UI/Contacts/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/Contacts/Polish.lproj/Localizable.strings
trans.pt_BR = UI/Contacts/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = UI/Contacts/Russian.lproj/Localizable.strings
trans.sk = UI/Contacts/Slovak.lproj/Localizable.strings
trans.sv = UI/Contacts/Swedish.lproj/Localizable.strings
trans.uk = UI/Contacts/Ukrainian.lproj/Localizable.strings
[sogo.ui-mainui]
source_file = UI/MainUI/English.lproj/Localizable.strings
source_lang = en
trans.ar = UI/MainUI/Arabic.lproj/Localizable.strings
trans.ca = UI/MainUI/Catalan.lproj/Localizable.strings
trans.cs = UI/MainUI/Czech.lproj/Localizable.strings
trans.cy = UI/MainUI/Welsh.lproj/Localizable.strings
@@ -103,6 +116,7 @@ trans.da_DK = UI/MainUI/Danish.lproj/Localizable.strings
trans.de = UI/MainUI/German.lproj/Localizable.strings
trans.es_AR = UI/MainUI/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = UI/MainUI/SpanishSpain.lproj/Localizable.strings
trans.fi = UI/MainUI/Finnish.lproj/Localizable.strings
trans.fr = UI/MainUI/French.lproj/Localizable.strings
trans.hu = UI/MainUI/Hungarian.lproj/Localizable.strings
trans.is = UI/MainUI/Icelandic.lproj/Localizable.strings
@@ -113,12 +127,14 @@ trans.nn_NO = UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/MainUI/Polish.lproj/Localizable.strings
trans.pt_BR = UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = UI/MainUI/Russian.lproj/Localizable.strings
trans.sk = UI/MainUI/Slovak.lproj/Localizable.strings
trans.sv = UI/MainUI/Swedish.lproj/Localizable.strings
trans.uk = UI/MainUI/Ukrainian.lproj/Localizable.strings
[sogo.ui-common]
source_file = UI/Common/English.lproj/Localizable.strings
source_lang = en
trans.ar = UI/Common/Arabic.lproj/Localizable.strings
trans.ca = UI/Common/Catalan.lproj/Localizable.strings
trans.cs = UI/Common/Czech.lproj/Localizable.strings
trans.cy = UI/Common/Welsh.lproj/Localizable.strings
@@ -126,6 +142,7 @@ trans.da_DK = UI/Common/Danish.lproj/Localizable.strings
trans.de = UI/Common/German.lproj/Localizable.strings
trans.es_AR = UI/Common/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = UI/Common/SpanishSpain.lproj/Localizable.strings
trans.fi = UI/Common/Finnish.lproj/Localizable.strings
trans.fr = UI/Common/French.lproj/Localizable.strings
trans.hu = UI/Common/Hungarian.lproj/Localizable.strings
trans.is = UI/Common/Icelandic.lproj/Localizable.strings
@@ -136,12 +153,14 @@ trans.nn_NO = UI/Common/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/Common/Polish.lproj/Localizable.strings
trans.pt_BR = UI/Common/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = UI/Common/Russian.lproj/Localizable.strings
trans.sk = UI/Common/Slovak.lproj/Localizable.strings
trans.sv = UI/Common/Swedish.lproj/Localizable.strings
trans.uk = UI/Common/Ukrainian.lproj/Localizable.strings
[sogo.ui-administrationui]
source_file = UI/AdministrationUI/English.lproj/Localizable.strings
source_lang = en
trans.ar = UI/AdministrationUI/Arabic.lproj/Localizable.strings
trans.ca = UI/AdministrationUI/Catalan.lproj/Localizable.strings
trans.cs = UI/AdministrationUI/Czech.lproj/Localizable.strings
trans.cy = UI/AdministrationUI/Welsh.lproj/Localizable.strings
@@ -149,6 +168,7 @@ trans.da_DK = UI/AdministrationUI/Danish.lproj/Localizable.strings
trans.de = UI/AdministrationUI/German.lproj/Localizable.strings
trans.es_AR = UI/AdministrationUI/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = UI/AdministrationUI/SpanishSpain.lproj/Localizable.strings
trans.fi = UI/AdministrationUI/Finnish.lproj/Localizable.strings
trans.fr = UI/AdministrationUI/French.lproj/Localizable.strings
trans.hu = UI/AdministrationUI/Hungarian.lproj/Localizable.strings
trans.is = UI/AdministrationUI/Icelandic.lproj/Localizable.strings
@@ -159,12 +179,14 @@ trans.nn_NO = UI/AdministrationUI/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/AdministrationUI/Polish.lproj/Localizable.strings
trans.pt_BR = UI/AdministrationUI/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = UI/AdministrationUI/Russian.lproj/Localizable.strings
trans.sk = UI/AdministrationUI/Slovak.lproj/Localizable.strings
trans.sv = UI/AdministrationUI/Swedish.lproj/Localizable.strings
trans.uk = UI/AdministrationUI/Ukrainian.lproj/Localizable.strings
[sogo.soobjects-appointments]
source_file = SoObjects/Appointments/English.lproj/Localizable.strings
source_lang = en
trans.ar = SoObjects/Appointments/Arabic.lproj/Localizable.strings
trans.ca = SoObjects/Appointments/Catalan.lproj/Localizable.strings
trans.cs = SoObjects/Appointments/Czech.lproj/Localizable.strings
trans.cy = SoObjects/Appointments/Welsh.lproj/Localizable.strings
@@ -172,6 +194,7 @@ trans.da_DK = SoObjects/Appointments/Danish.lproj/Localizable.strings
trans.de = SoObjects/Appointments/German.lproj/Localizable.strings
trans.es_AR = SoObjects/Appointments/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = SoObjects/Appointments/SpanishSpain.lproj/Localizable.strings
trans.fi = SoObjects/Appointments/Finnish.lproj/Localizable.strings
trans.fr = SoObjects/Appointments/French.lproj/Localizable.strings
trans.hu = SoObjects/Appointments/Hungarian.lproj/Localizable.strings
trans.is = SoObjects/Appointments/Icelandic.lproj/Localizable.strings
@@ -182,12 +205,14 @@ trans.nn_NO = SoObjects/Appointments/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = SoObjects/Appointments/Polish.lproj/Localizable.strings
trans.pt_BR = SoObjects/Appointments/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = SoObjects/Appointments/Russian.lproj/Localizable.strings
trans.sk = SoObjects/Appointments/Slovak.lproj/Localizable.strings
trans.sv = SoObjects/Appointments/Swedish.lproj/Localizable.strings
trans.uk = SoObjects/Appointments/Ukrainian.lproj/Localizable.strings
[sogo.soobjects-contacts]
source_file = SoObjects/Contacts/English.lproj/Localizable.strings
source_lang = en
trans.ar = SoObjects/Contacts/Arabic.lproj/Localizable.strings
trans.ca = SoObjects/Contacts/Catalan.lproj/Localizable.strings
trans.cs = SoObjects/Contacts/Czech.lproj/Localizable.strings
trans.cy = SoObjects/Contacts/Welsh.lproj/Localizable.strings
@@ -195,6 +220,7 @@ trans.da_DK = SoObjects/Contacts/Danish.lproj/Localizable.strings
trans.de = SoObjects/Contacts/German.lproj/Localizable.strings
trans.es_AR = SoObjects/Contacts/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = SoObjects/Contacts/SpanishSpain.lproj/Localizable.strings
trans.fi = SoObjects/Contacts/Finnish.lproj/Localizable.strings
trans.fr = SoObjects/Contacts/French.lproj/Localizable.strings
trans.hu = SoObjects/Contacts/Hungarian.lproj/Localizable.strings
trans.is = SoObjects/Contacts/Icelandic.lproj/Localizable.strings
@@ -205,12 +231,14 @@ trans.nn_NO = SoObjects/Contacts/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = SoObjects/Contacts/Polish.lproj/Localizable.strings
trans.pt_BR = SoObjects/Contacts/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = SoObjects/Contacts/Russian.lproj/Localizable.strings
trans.sk = SoObjects/Contacts/Slovak.lproj/Localizable.strings
trans.sv = SoObjects/Contacts/Swedish.lproj/Localizable.strings
trans.uk = SoObjects/Contacts/Ukrainian.lproj/Localizable.strings
[sogo.ui-mailpartviewers]
source_file = UI/MailPartViewers/English.lproj/Localizable.strings
source_lang = en
trans.ar = UI/MailPartViewers/Arabic.lproj/Localizable.strings
trans.ca = UI/MailPartViewers/Catalan.lproj/Localizable.strings
trans.cs = UI/MailPartViewers/Czech.lproj/Localizable.strings
trans.cy = UI/MailPartViewers/Welsh.lproj/Localizable.strings
@@ -218,6 +246,7 @@ trans.da_DK = UI/MailPartViewers/Danish.lproj/Localizable.strings
trans.de = UI/MailPartViewers/German.lproj/Localizable.strings
trans.es_AR = UI/MailPartViewers/SpanishArgentina.lproj/Localizable.strings
trans.es_ES = UI/MailPartViewers/SpanishSpain.lproj/Localizable.strings
trans.fi = UI/MailPartViewers/Finnish.lproj/Localizable.strings
trans.fr = UI/MailPartViewers/French.lproj/Localizable.strings
trans.hu = UI/MailPartViewers/Hungarian.lproj/Localizable.strings
trans.is = UI/MailPartViewers/Icelandic.lproj/Localizable.strings
@@ -228,5 +257,6 @@ trans.nn_NO = UI/MailPartViewers/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/MailPartViewers/Polish.lproj/Localizable.strings
trans.pt_BR = UI/MailPartViewers/BrazilianPortuguese.lproj/Localizable.strings
trans.ru = UI/MailPartViewers/Russian.lproj/Localizable.strings
trans.sk = UI/MailPartViewers/Slovak.lproj/Localizable.strings
trans.sv = UI/MailPartViewers/Swedish.lproj/Localizable.strings
trans.uk = UI/MailPartViewers/Ukrainian.lproj/Localizable.strings
+26
View File
@@ -0,0 +1,26 @@
# use *:8843 for SSL
<VirtualHost *:8800>
RewriteEngine Off
ProxyRequests Off
SetEnv proxy-nokeepalive 1
ProxyPreserveHost On
ProxyPassInterpolateEnv On
ProxyPass /principals http://127.0.0.1:20000/SOGo/dav/ interpolate
ProxyPass /SOGo http://127.0.0.1:20000/SOGo interpolate
ProxyPass / http://127.0.0.1:20000/SOGo/dav/ interpolate
<Location />
Order allow,deny
Allow from all
</Location>
<Proxy http://127.0.0.1:20000>
RequestHeader set "x-webobjects-server-port" "8800"
RequestHeader set "x-webobjects-server-name" "changethis:8800"
RequestHeader set "x-webobjects-server-url" "http://changethis:8800"
RequestHeader set "x-webobjects-server-protocol" "HTTP/1.0"
AddDefaultCharset UTF-8
</Proxy>
ErrorLog /var/log/apache2/ab-error.log
CustomLog /var/log/apache2/ab-access.log combined
</VirtualHost>
-6
View File
@@ -59,7 +59,6 @@ ProxyPass /SOGo http://127.0.0.1:20000/SOGo retry=0
# RequestHeader set "x-webobjects-remote-user" "%{REMOTE_USER}e"
RequestHeader set "x-webobjects-server-protocol" "HTTP/1.0"
RequestHeader set "x-webobjects-remote-host" %{REMOTE_HOST}e env=REMOTE_HOST
AddDefaultCharset UTF-8
@@ -67,8 +66,3 @@ ProxyPass /SOGo http://127.0.0.1:20000/SOGo retry=0
Allow from all
</Proxy>
## We use mod_rewrite to pass remote address to the SOGo proxy.
# The remote address will appear in SOGo's log files and in the X-Forward
# header of emails.
RewriteEngine On
RewriteRule ^/SOGo/(.*)$ /SOGo/$1 [env=REMOTE_HOST:%{REMOTE_ADDR},PT]
+4917 -52
View File
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
+196
View File
@@ -1,3 +1,199 @@
2.0.7 (2013-07-19)
------------------
New features
- print gridlines of calendar in 15-minute intervals
- allow the events/tasks lists to be collapsable
Enhancements
- bubble box of events no longer overlaps the current event
- now pass the x-originating-ip using the IMAP ID extension (#2366)
- updated BrazilianPortuguese, Czech, Dutch, German, Polish and Russian translations
Bug fixes
- properly handle RFC2231 everywhere
- fixed minor XSS issues
- fixed jquery-ui not bluring the active element when clicking on a draggable
2.0.6b (2013-06-27)
------------------
Bug fixes
- Properly escape the foldername to avoid XSS issues
- Fix loading of MSExchangeFreeBusySOAPResponseMap
2.0.6a (2013-06-25)
------------------
Bug fixes
- Documentation fixes
- Added missing file for CAS single logout
2.0.6 (2013-06-21)
------------------
Enhancements
- updated CKEditor to version 4.1.1 (#2333)
- new failed login attemps rate-limiting options. See the new
SOGoMaximumFailedLoginCount, SOGoMaximumFailedLoginInterval and
SOGoFailedLoginBlockInterval defaults
- new message submissions rate-limiting options. See the new
SOGoMaximumMessageSubmissionCount, SOGoMaximumRecipientCount,
SOGoMaximumSubmissionInterval and SOGoMessageSubmissionBlockInterval defaults
- now possible to send or not event notifications on a per-event basis
- now possible to see who created an event/task in a delegated calendar
- multi-domain support in OpenChange (implemented using a trick)
Bug fixes
- fixed decoding of the charset parameter when using single quotes (#2306)
- fixed potential crash when sending MDN from Sent folder (#2209)
- fixed handling of unicode separators (#2309)
- fixed public access when SOGoTrustProxyAuthentication is used (#2237)
- fixed access right issues with import feature (#2294)
- fixed IMAP ACL issue when SOGoForceExternalLoginWithEmail is used (#2313)
- fixed handling of CAS logoutRequest (#2346)
- fixed many major OpenChange stability issues
2.0.5a (2013-04-17)
------------------
Bug fixes
- Fixed an issue when parsing user CN with leading or trailing spaces (#2287)
- Fixed a crash that occured when saving contacts or tasks via Outlook
2.0.5 (2013-04-11)
------------------
New features
- new system default SOGoEncryptionKey to be used to encrypt the passwords of
remote Web calendars when SOGoTrustProxyAuthentication is enabled
- activated the menu option "Mark Folder Read" in the Webmail (#1473)
Enhancements
- added logging of the X-Forwarded-For HTTP header (#2229)
- now use BSON instead of GNUstep's binary format for serializing
Outlook related cache files
- updated Danish, Finnish, Polish and Slovak translations
- added Arabic translation - thanks to Anass Ahmed
Bug fixes
- don't use the cache for password lookups from login page (#2169)
- fixed issue with exceptions in repeating events
- avoid data truncation issue in OpenChange with mysql backend
run sql-update-2.0.4b_to_2.0.5-mysql.sh to update existing tables
- avoid random crashes in OpenChange due to RTF conversion
- fixed issue when modifying/deleting exceptions of recurring events
- fixed major cache miss issue leading to slow Outlook resynchronizations
- fixed major memory corruption issue when Outlook was saving "messages"
- fixed filtering of sql contact entries when using dynamic domains (#2269)
- sogo.conf can now be used by all tools (#2226)
- SOPE: fixed handling of sieve capabilities after starttls (#2132)
- OpenChange: fixed 'stuck email' problem when sending a mail
- OpenChange NTLMAuthHandler: avoid tightloop when samba isn't available.
- OpenChange NTLMAuthHandler: avoid crash while parsing cookies
- OpenChange ocsmanager: a LOT of fixes, see git log
2.0.4b (2013-02-04)
------------------
Bug fixes
- Fixed order of precedence for options (#2166)
The following order is enforced - first match wins
1. Command line arguments
2. .GNUstepDefaults
3. /etc/sogo/{debconf,sogo}.conf
4. SOGoDefaults.plist
- fixed handling of LDAP DN containing special characters (#2152, #2207)
- fixed handling of credential files for older GNUsteps (#2216)
- fixed display of messages with control characters (#2079, #2177)
- fixed tooltips in contacts list (#2211)
- fixed classification menu in component editor (#2223)
- fixed link to ACL editor for 'any authenticated user' (#2222, #2224)
- fixed saving preferences when mail module is disabled
- fixed handling for long credential strings (#2212)
2.0.4a (2013-01-30)
------------------
Enhancements
- updated Czech translation
- birthday is now properly formatted in addressbook module
Bug fixes
- fixed handling of groups with spaces in their UID
- fixed possible infinite loop in repeatable object
- fixed until date in component editor
- fixed saving all-day event in appointment editor
- fixed handling of decoding contacts UID
- fixed support of GNUstep 1.20 / Debian Squeeze
2.0.4 (2013-01-25)
------------------
New features
- sogo-tool: new "dump-defaults" command to easily create /etc/sogo/sogo.conf
Enhancements
- The sogo user is now a system user.
For new installs, this means that 'su - sogo' won't work anymore.
Please use 'sudo -u sogo cmd' instead
If used in scripts from cronjobs, 'requiretty' must be disabled in sudoers
- added basic support for LDAP URL in user sources
- renamed default SOGoForceIMAPLoginWithEmail to
SOGoForceExternalLoginWithEmail and extended it to SMTP authentication
- updated the timezone files to the 2012j edition and removed RRDATES
- updated CKEditor to version 4.0.1
- added Finnish translation - thanks to Kari Salmu
- updated translations
- recurrence-id of all-day events is now set as a proper date with no time
- 'show completed tasks' is now persistent
- fixed memory usage consumption for remote ICS subscriptions
Bug fixes
- fixed usage of browser's language for the login page
- fixed partstat of attendee in her/his calendar
- fixed French templates encoding
- fixed CardDAV collections for OS X
- fixed event recurrence editor (until date)
- fixed column display for subfolders of draft & sent
- improved IE7 support
- fixed drag'n'drop of events with Safari
- fixed first day of the week in datepickers
- fixed exceptions of recurring all-day events
2.0.3 (2012-12-06)
------------------
New features
- support for SAML2 for single sign-on, with the help of the lasso library
- added support for the "AUTHENTICATE" command and SASL mechanisms
- added domain default SieveHostFieldName
- added a search field for tasks
Enhancements
- search the contacts for the organization attribute
- in HTML mode, optionally place answer after the quoted text
- improved memory usage of "sogo-tool restore"
- fixed invitations status in OSX iCal.app/Calendar.app (cleanup RSVP attribute)
- now uses "imap4flags" instead of the deprecated "imapflags"
- added Slovak translation - thanks to Martin Pastor
- updated translations
Bug fixes
- fixed LDIF import with categories
- imported events now keep their UID when possible
- fixed importation of multiple calendars
- fixed modification date when drag'n'droping events
- fixed missing 'from' header in Outlook
- fixed invitations in Outlook
- fixed JavaScript regexp for Firefox
- fixed JavaScript syntax for IE7
- fixed all-day event display in day/week view
- fixed parsing of alarm
- fixed Sieve server URL fallback
- fixed Debian cronjob (spool directory cleanup)
2.0.2a (2012-11-15)
-------------------
+3 -3
View File
@@ -7,8 +7,7 @@ libOGoContentStore_LIBRARIES_DEPEND_UPON += \
-lNGExtensions \
-lEOControl \
-lSaxObjC \
-lgnustep-base \
-lobjc
$(BASE_LIBS)
ADDITIONAL_INCLUDE_DIRS += -I. -I.. -I../SOPE -I../SoObjects
@@ -29,4 +28,5 @@ test_quick_extract_TOOL_LIBS += \
-lNGCards \
-lGDLContentStore \
-lGDLAccess \
-lOGoContentStore
-lOGoContentStore \
$(BASE_LIBS)
+50
View File
@@ -0,0 +1,50 @@
//
// BSONCodec.h
// BSON Codec for Objective-C.
//
// Created by Martin Kou on 8/17/10.
// MIT License, see LICENSE file for details.
//
#import <Foundation/Foundation.h>
#import <stdint.h>
@protocol BSONCoding
- (uint8_t) BSONTypeID;
- (NSData *) BSONEncode;
- (NSData *) BSONRepresentation;
+ (id) BSONFragment: (NSData *) data at: (const void **) base ofType: (uint8_t) typeID;
@end
@protocol BSONObjectCoding
- (id) initWithBSONDictionary: (NSDictionary *) data;
- (NSDictionary *) BSONDictionary;
@end
@interface NSObject (BSONObjectCoding)
- (NSData *) BSONEncode;
- (NSData *) BSONRepresentation;
@end
@interface NSDictionary (BSON) <BSONCoding>
@end
@interface NSData (BSON) <BSONCoding>
- (NSDictionary *) BSONValue;
@end
@interface NSNumber (BSON) <BSONCoding>
@end
@interface NSString (BSON) <BSONCoding>
@end
@interface NSArray (BSON) <BSONCoding>
@end
@interface NSNull (BSON) <BSONCoding>
@end
@interface NSCalendarDate (BSON) <BSONCoding>
@end
+585
View File
@@ -0,0 +1,585 @@
//
// BSONCodec.m
// BSON Codec for Objective-C.
//
// Created by Martin Kou on 8/17/10.
// MIT License, see LICENSE file for details.
//
#import "BSONCodec.h"
#import <ctype.h>
#import <string.h>
#import <objc/objc.h>
#define BSONTYPE(tag,className) [className class], [NSNumber numberWithChar: (tag)]
#ifndef objc_msgSend
#define objc_msgSend(obj, sel, ...) \
objc_msg_lookup(obj, sel)(obj, sel, ## __VA_ARGS__)
#endif
static NSDictionary *BSONTypes()
{
static NSDictionary *retval = nil;
if (retval == nil)
{
retval = [[NSDictionary dictionaryWithObjectsAndKeys:
BSONTYPE(0x01, NSNumber),
BSONTYPE(0x02, NSString),
BSONTYPE(0x03, NSDictionary),
BSONTYPE(0x04, NSArray),
BSONTYPE(0x05, NSData),
BSONTYPE(0x08, NSNumber),
BSONTYPE(0x0A, NSNull),
BSONTYPE(0x10, NSNumber),
BSONTYPE(0x11, NSCalendarDate),
BSONTYPE(0x12, NSNumber),
nil] retain];
}
return retval;
}
#define SWAP16(x) \
((uint16_t)((((uint16_t)(x) & 0xff00) >> 8) | \
(((uint16_t)(x) & 0x00ff) << 8)))
#define SWAP32(x) \
((uint32_t)((((uint32_t)(x) & 0xff000000) >> 24) | \
(((uint32_t)(x) & 0x00ff0000) >> 8) | \
(((uint32_t)(x) & 0x0000ff00) << 8) | \
(((uint32_t)(x) & 0x000000ff) << 24)))
#define SWAP64(x) \
((uint64_t)((((uint64_t)(x) & 0xff00000000000000ULL) >> 56) | \
(((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \
(((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \
(((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \
(((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \
(((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \
(((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \
(((uint64_t)(x) & 0x00000000000000ffULL) << 56)))
#if BYTE_ORDER == LITTLE_ENDIAN
#define BSONTOHOST16(x) (x)
#define BSONTOHOST32(x) (x)
#define BSONTOHOST64(x) (x)
#define HOSTTOBSON16(x) (x)
#define HOSTTOBSON32(x) (x)
#define HOSTTOBSON64(x) (x)
#elif BYTE_ORDER == BIG_ENDIAN
#define BSONTOHOST16(x) SWAP16(x)
#define BSONTOHOST32(x) SWAP32(x)
#define BSONTOHOST64(x) SWAP64(x)
#define HOSTTOBSON16(x) SWAP16(x)
#define HOSTTOBSON32(x) SWAP16(x)
#define HOSTTOBSON64(x) SWAP16(x)
#endif
#define CLASS_NAME_MARKER @"$$__CLASS_NAME__$$"
@implementation NSObject (BSONObjectCoding)
- (NSData *) BSONEncode
{
if (!class_conformsToProtocol([self class], @protocol(BSONObjectCoding)))
[NSException raise: NSInvalidArgumentException format: @"BSON encoding is only valid on objects conforming to the BSONObjectEncoding protocol."];
id <BSONObjectCoding> myself = (id <BSONObjectCoding>) self;
NSMutableDictionary *values = [[myself BSONDictionary] mutableCopy];
const char* className = class_getName([self class]);
[values setObject: [NSData dataWithBytes: (void *)className length: strlen(className)] forKey: CLASS_NAME_MARKER];
NSData *retval = [values BSONEncode];
[values release];
return retval;
}
- (NSData *) BSONRepresentation
{
return [self BSONEncode];
}
@end
@implementation NSDictionary (BSON)
- (uint8_t) BSONTypeID
{
return 0x03;
}
- (NSData *) BSONEncode
{
// Initialize the components structure.
NSMutableArray *components = [[NSMutableArray alloc] init];
NSMutableData *lengthData = [[NSMutableData alloc] initWithLength: 4];
[components addObject: lengthData];
[lengthData release];
NSMutableData *contentsData = [[NSMutableData alloc] init];
[components addObject: contentsData];
[contentsData release];
[components addObject: [NSData dataWithBytes: "\x00" length: 1]];
// Ensure ordered keys. not in BSON spec, but ensures all BSONRepresentations
// of the same dict will be the same.
NSMutableArray *keys = [[NSMutableArray alloc] init];
[keys addObjectsFromArray: [self allKeys]];
//[keys sortUsingSelector: @selector(caseInsensitiveCompare:)];
// Encode data.- (NSData *) BSONEncode;
uint8_t elementType = 0;
int i;
for (i = 0; i < [keys count]; i++)
{
NSString *key = [keys objectAtIndex: i];
NSObject *value = [self objectForKey: key];
if ([value respondsToSelector: @selector(BSONTypeID)])
elementType = [(id <BSONCoding>) value BSONTypeID];
else
elementType = 3;
[contentsData appendBytes: &elementType length: 1];
[contentsData appendData: [key dataUsingEncoding: NSUTF8StringEncoding]];
[contentsData appendBytes: "\x00" length: 1];
[contentsData appendData: [value BSONEncode]];
}
[keys release];
// Write length.
uint32_t *length = (uint32_t *)[lengthData mutableBytes];
*length = HOSTTOBSON32([contentsData length]) + 4 + 1;
// Assemble the output data.
NSMutableData *retval = [NSMutableData data];
for (i = 0; i < [components count]; i++)
[retval appendData: [components objectAtIndex: i]];
[components release];
return retval;
}
- (NSData *) BSONRepresentation
{
return [self BSONEncode];
}
+ (id) BSONFragment: (NSData *) data at: (const void **) base ofType: (uint8_t) t
{
const void *current = [data bytes];
if ((id)base != nil)
current = *base;
else
base = &current;
uint32_t length = BSONTOHOST32(*((uint32_t *)current));
const void *endPoint = current + length;
current += 4;
NSMutableDictionary *retval = [NSMutableDictionary dictionary];
while (current < endPoint - 1)
{
uint8_t typeID = *((uint8_t *)current);
current++;
char *utf8Key = (char *) current;
while (*((char *)current) != 0 && current < endPoint - 1)
current++;
current++;
NSString *key = [NSString stringWithUTF8String: utf8Key];
*base = current;
Class typeClass = [BSONTypes() objectForKey: [NSNumber numberWithChar: typeID]];
id value = objc_msgSend(typeClass, @selector(BSONFragment:at:ofType:), data, base, typeID);
current = *base;
[retval setObject: value forKey: key];
}
*base = current + 1;
// If the dictionary has a class name marker, then it is to be converted to an object.
if ([retval objectForKey: CLASS_NAME_MARKER] != nil)
{
NSData *classNameData = [retval objectForKey: CLASS_NAME_MARKER];
char *className = malloc([classNameData length] + 1);
memcpy(className, [classNameData bytes], [classNameData length]);
className[[classNameData length]] = 0;
Class targetClass = objc_getClass(className);
if (targetClass == nil)
[NSException raise: NSInvalidArgumentException format: @"Class %s found in incoming data is undefined.", className];
id obj = [[targetClass alloc] initWithBSONDictionary: retval];
return obj;
}
return retval;
}
@end
@implementation NSData (BSON)
- (uint8_t) BSONTypeID
{
return 0x05;
}
- (NSData *) BSONEncode
{
uint32_t length = HOSTTOBSON32([self length]);
NSMutableData *retval = [NSMutableData data];
[retval appendBytes: &length length: 4];
[retval appendBytes: "\x00" length: 1];
[retval appendData: self];
return retval;
}
- (NSData *) BSONRepresentation
{
return [self BSONEncode];
}
+ (id) BSONFragment: (NSData *) data at: (const void **) base ofType: (uint8_t) t
{
const void *current = [data bytes];
if ((id)base != nil)
current = *base;
else
base = &current;
uint32_t length = BSONTOHOST32(*((uint32_t *)current));
current += 4 + 1;
NSData *retval = [NSData dataWithBytes: current length: length];
current += length;
*base = current;
return retval;
}
- (NSDictionary *) BSONValue
{
return [NSDictionary BSONFragment: self at: NULL ofType: 0x03];
}
@end
@implementation NSNumber (BSON)
- (uint8_t) BSONTypeID
{
const char encoding = tolower(*([self objCType]));
switch (encoding) {
case 'f':
case 'd': return 0x01;
case 'b': return 0x08;
case 'c':
case 's': return 0x10;
case 'i':
// Ok, if you're running Objective-C on 16-bit platforms...
// Then YOU have issues.
// So, yeah, we won't handle that case.
if (sizeof(int) == 4)
return 0x10;
else if (sizeof(int) == 8)
return 0x12;
case 'l':
if (sizeof(long) == 4)
return 0x10;
else if (sizeof(long) == 8)
return 0x12;
case 'q': return 0x12;
default:
[NSException raise: NSInvalidArgumentException format: @"%@::%s - invalid encoding type '%c'", [self class], _cmd, encoding];
}
return 0;
}
- (NSData *) BSONEncode
{
const char encoding = *([self objCType]);
if (encoding == 'd' || encoding == 'D')
{
double value = [self doubleValue];
return [NSData dataWithBytes: &value length: 8];
}
if (encoding == 'f' || encoding == 'F')
{
double value = [self floatValue];
return [NSData dataWithBytes: &value length: 8];
}
if (encoding == 'b' || encoding == 'B')
{
char value = [self boolValue];
return [NSData dataWithBytes: &value length: 1];
}
if (encoding == 'c' || encoding == 'C')
{
int32_t value = [self charValue];
value = HOSTTOBSON32(value);
return [NSData dataWithBytes: &value length: 4];
}
if (encoding == 's' || encoding == 'S')
{
int32_t value = [self shortValue];
value = HOSTTOBSON32(value);
return [NSData dataWithBytes: &value length: 4];
}
if (encoding == 'i' || encoding == 'I')
{
int value = [self intValue];
if (sizeof(int) == 4)
value = HOSTTOBSON32(value);
else if (sizeof(int) == 8)
value = HOSTTOBSON64(value);
return [NSData dataWithBytes: &value length: sizeof(int)];
}
if (encoding == 'l' || encoding == 'L')
{
long value = [self longValue];
if (sizeof(long) == 4)
value = HOSTTOBSON32(value);
else if (sizeof(long) == 8)
value = HOSTTOBSON64(value);
return [NSData dataWithBytes: &value length: sizeof(long)];
}
if (encoding == 'q')
{
long long value = HOSTTOBSON64([self longLongValue]);
return [NSData dataWithBytes: &value length: 8];
}
if (encoding == 'Q')
{
long long value = HOSTTOBSON64([self unsignedLongLongValue]);
return [NSData dataWithBytes: &value length: 8];
}
[NSException raise: NSInvalidArgumentException format: @"%@::%s - invalid encoding type '%c'", [self class], _cmd, encoding];
return nil;
}
- (NSData *) BSONRepresentation
{
return [self BSONEncode];
}
+ (id) BSONFragment: (NSData *) data at: (const void **) base ofType: (uint8_t) t
{
if (t == 0x01)
{
// #5: LLVM GCC requires double pointers to have a certain alignment in ARM CPUs.
// So we can't just read the double off directly from the data - need to copy it.
double value;
memcpy(&value, *base, sizeof(double));
*base += 8;
return [NSNumber numberWithDouble: value];
}
if (t == 0x08)
{
char value = ((char *) *base)[0];
*base += 1;
return [NSNumber numberWithBool: value];
}
if (t == 0x10)
{
int32_t value = BSONTOHOST32(((int32_t *) *base)[0]);
*base += 4;
if (sizeof(int) == 4)
return [NSNumber numberWithInt: value];
return [NSNumber numberWithLong: value];
}
if (t == 0x12)
{
int64_t value = BSONTOHOST64(((int64_t *) *base)[0]);
*base += 8;
return [NSNumber numberWithUnsignedLongLong: value];
}
return nil;
}
@end
@implementation NSString (BSON)
- (uint8_t) BSONTypeID
{
return 0x02;
}
- (NSData *) BSONEncode
{
NSData *utf8Data = [self dataUsingEncoding: NSUTF8StringEncoding];
uint32_t length = HOSTTOBSON32([utf8Data length] + 1);
NSMutableData *retval = [NSMutableData data];
[retval appendBytes: &length length: 4];
[retval appendData: utf8Data];
[retval appendBytes: "\x00" length: 1];
return retval;
}
- (NSData *) BSONRepresentation
{
return [self BSONEncode];
}
+ (id) BSONFragment: (NSData *) data at: (const void **) base ofType: (uint8_t) typeID
{
uint32_t length = BSONTOHOST32(((const uint32_t *) *base)[0]);
*base += 4;
const char *utf8Str = (const char *) *base;
*base += length;
return [NSString stringWithUTF8String: utf8Str];
}
@end
@implementation NSArray (BSON)
- (uint8_t) BSONTypeID
{
return 0x04;
}
- (NSData *) BSONEncode
{
// Initialize the components structure.
NSMutableArray *components = [[NSMutableArray alloc] init];
NSMutableData *lengthData = [[NSMutableData alloc] initWithLength: 4];
[components addObject: lengthData];
[lengthData release];
NSMutableData *contentsData = [[NSMutableData alloc] init];
[components addObject: contentsData];
[contentsData release];
[components addObject: [NSData dataWithBytes: "\x00" length: 1]];
// Encode data.
uint8_t elementType = 0;
int i, count = [self count];
for (i = 0 ; i < count ; i++)
{
NSObject *value = [self objectAtIndex: i];
if ([value respondsToSelector: @selector(BSONTypeID)])
elementType = [(id <BSONCoding>) value BSONTypeID];
else
elementType = 3;
[contentsData appendBytes: &elementType length: 1];
[contentsData appendData: [[NSString stringWithFormat: @"%d", i] dataUsingEncoding: NSUTF8StringEncoding]];
[contentsData appendBytes: "\x00" length: 1];
[contentsData appendData: [value BSONEncode]];
}
// Write length.
uint32_t *length = (uint32_t *)[lengthData mutableBytes];
*length = HOSTTOBSON32([contentsData length]) + 4 + 1;
// Assemble the output data.
NSMutableData *retval = [NSMutableData data];
for (i = 0; i < [components count]; i++)
[retval appendData: [components objectAtIndex: i]];
[components release];
return retval;
}
- (NSData *) BSONRepresentation
{
return [self BSONEncode];
}
+ (id) BSONFragment: (NSData *) data at: (const void **) base ofType: (uint8_t) typeID
{
NSDictionary *tmp = [NSDictionary BSONFragment: data at: base ofType: 0x03];
NSMutableArray *retval = [NSMutableArray arrayWithCapacity: [tmp count]];
int i;
for (i = 0; i < [tmp count]; i++)
[retval addObject: [tmp objectForKey: [NSString stringWithFormat: @"%d", i]]];
return retval;
}
@end
@implementation NSNull (BSON)
- (uint8_t) BSONTypeID
{
return 0x0a;
}
- (NSData *) BSONEncode
{
return [NSData data];
}
- (NSData *) BSONRepresentation
{
return [self BSONEncode];
}
+ (id) BSONFragment: (NSData *) data at: (const void **) base ofType: (uint8_t) typeID
{
return [NSNull null];
}
@end
@implementation NSCalendarDate (BSON)
- (uint8_t) BSONTypeID
{
return 0x11;
}
- (NSData *) BSONEncode
{
NSString *v;
v = [self descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S %Z"
locale: nil];
return [v BSONEncode];
}
- (NSData *) BSONRepresentation
{
return [self BSONEncode];
}
+ (id) BSONFragment: (NSData *) data at: (const void **) base ofType: (uint8_t) typeID
{
NSString *v;
v = [NSString BSONFragment: data at: base ofType: 0x02];
return [NSCalendarDate dateWithString: v
calendarFormat: @"%Y-%m-%d %H:%M:%S %Z"];
}
@end
+5 -5
View File
@@ -46,12 +46,12 @@
NSDictionary *properties;
BOOL rc;
[self logWithFormat: @"evaluating object '%@'", object];
//[self logWithFormat: @"evaluating object '%@'", object];
properties = [object properties];
rc = [self _evaluateSOGoMAPIDBObject: properties];
[self logWithFormat: @" evaluation result: %d", rc];
//[self logWithFormat: @" evaluation result: %d", rc];
return rc;
}
@@ -150,9 +150,9 @@ typedef BOOL (*EOComparator) (id, SEL, id);
rc = ((isZero && (intValue & mask) == 0)
|| (!isZero && (intValue & mask) != 0));
[self logWithFormat: @"evaluation of bitmask qualifier:"
@" (%.8x & %.8x) %s 0: %d",
intValue, mask, (isZero ? "==" : "!="), rc];
//[self logWithFormat: @"evaluation of bitmask qualifier:"
// @" (%.8x & %.8x) %s 0: %d",
// intValue, mask, (isZero ? "==" : "!="), rc];
return rc;
}
+1 -1
View File
@@ -79,7 +79,7 @@
@" c_lastmodified INT NOT NULL,"
@" c_version INT NOT NULL DEFAULT 0,"
@" c_deleted TINYINT NOT NULL DEFAULT 0,"
@" c_content TEXT)");
@" c_content LONGTEXT)");
return [NSString stringWithFormat: sqlFolderFormat, tableName];
}
+5 -30
View File
@@ -7,8 +7,6 @@ include ../Version
BACKEND_VERSION = 1.0.0
UNRTF_VERSION = 0.21.2
### bootstrap library
MAPISTORESOGO = MAPIStoreSOGo
LIBRARY_NAME = $(MAPISTORESOGO)
@@ -24,8 +22,6 @@ BUNDLE_NAME = $(SOGOBACKEND)
BUNDLE_EXTENSION = .MAPIStore
BUNDLE_INSTALL_DIR = $(SOGO_LIBDIR)
UNRTF_DIR = unrtf-$(UNRTF_VERSION)
PYTHON = /usr/bin/python
PYTHON_IS_GOOD = $(shell $(PYTHON) -c 'from sys import version_info; a=version_info; print a[0] == 2 and a[1] >= 6')
ifeq (${PYTHON_IS_GOOD},False)
@@ -37,8 +33,6 @@ all::
SAMBA_PRIVATE_DIR = $(shell $(PYTHON) ./samba-get-config.py "private dir")
$(SOGOBACKEND)_SUBPROJECTS += $(UNRTF_DIR)/src
$(SOGOBACKEND)_PRINCIPAL_CLASS = MAPIApplication
$(SOGOBACKEND)_OBJC_FILES += \
@@ -133,32 +127,14 @@ $(SOGOBACKEND)_OBJC_FILES += \
\
EOQualifier+MAPI.m \
\
EOBitmaskQualifier.m
EOBitmaskQualifier.m \
\
BSONCodec.m \
RTFHandler.m
$(SOGOBACKEND)_RESOURCE_FILES += \
product.plist \
$(UNRTF_DIR)/charmaps/SYMBOL.charmap \
$(UNRTF_DIR)/outputs/html.conf
### unrtf
all:: $(UNRTF_DIR)/config.h $(UNRTF_DIR)/src/GNUmakefile
$(UNRTF_DIR): $(UNRTF_DIR).tar.gz $(UNRTF_DIR).diff
@echo " Extracting and patching $(UNRTF_DIR)..."
@rm -rf $(UNRTF_DIR)
@$(TAR) -xvzf $< > /dev/null
@(cd $(UNRTF_DIR) && patch -p1 < ../$(UNRTF_DIR).diff) > /dev/null
@touch $(UNRTF_DIR)
$(UNRTF_DIR)-stamp: $(UNRTF_DIR)
@touch $@
$(UNRTF_DIR)/config.h: $(UNRTF_DIR)-stamp unrtf_config_h
@cp unrtf_config_h $(UNRTF_DIR)/config.h
$(UNRTF_DIR)/src/GNUmakefile: $(UNRTF_DIR)-stamp GNUmakefile.unrtf
@cp GNUmakefile.unrtf $@
product.plist
### pl reader
PLREADER_TOOL = plreader
@@ -210,7 +186,6 @@ ADDITIONAL_INCLUDE_DIRS += \
-DSAMBA_PRIVATE_DIR=@"\"$(SAMBA_PRIVATE_DIR)\"" \
$(LIBMAPI_CFLAGS) \
$(LIBMAPISTORE_CFLAGS) \
-I$(UNRTF_DIR)/src \
-I../SoObjects -I../SOPE \
-DBACKEND_BUNDLE_NAME="@\"$(BUNDLE_NAME)$(BUNDLE_EXTENSION)\"" \
-DSOGO_BUNDLES_DIR="@\"$(BUNDLE_INSTALL_DIR)\""
-34
View File
@@ -1,34 +0,0 @@
# -*-makefile-*-
# GNUstep makefile
include $(GNUSTEP_MAKEFILES)/common.make
UNRTF = unrtf
SUBPROJECT_NAME = $(UNRTF)
$(UNRTF)_C_FILES = \
attr.c \
convert.c \
error.c \
hash.c \
malloc.c \
my_iconv.c \
output.c \
parse.c \
unicode.c \
user.c \
util.c \
word.c
$(UNRTF)_CFLAGS = -DHAVE_CONFIG_H=1 -I. -I../
# Option include to set any additional variables
-include GNUmakefile.preamble
# Include in the rules for making libraries
include $(GNUSTEP_MAKEFILES)/subproject.make
# Option include to define any additional rules
-include GNUmakefile.postamble
+1 -1
View File
@@ -48,7 +48,7 @@
- (NSData *) mimeAttachTag;
/* move & copy operations */
- (void) copyToAttachment: (MAPIStoreAttachment *) newAttachment;
- (void) copyToAttachment: (MAPIStoreAttachment *) newAttachment inMemCtx: (TALLOC_CTX *) memCtx;
/* subclasses */
- (MAPIStoreEmbeddedMessage *) openEmbeddedMessage;
+3 -3
View File
@@ -152,13 +152,13 @@
return ULLONG_MAX;
}
- (void) copyToAttachment: (MAPIStoreAttachment *) newAttachment
- (void) copyToAttachment: (MAPIStoreAttachment *) newAttachment inMemCtx: (TALLOC_CTX *) memCtx
{
void *attachMethod;
enum mapistore_error error;
MAPIStoreEmbeddedMessage *embeddedMessage, *newEmbeddedMessage;
[self copyPropertiesToObject: newAttachment];
[self copyPropertiesToObject: newAttachment inMemCtx: memCtx];
attachMethod = NULL;
error = [self getProperty: &attachMethod
@@ -170,7 +170,7 @@
{
embeddedMessage = [self openEmbeddedMessage];
newEmbeddedMessage = [newAttachment createEmbeddedMessage];
[embeddedMessage copyToMessage: newEmbeddedMessage];
[embeddedMessage copyToMessage: newEmbeddedMessage inMemCtx: memCtx];
}
talloc_free (attachMethod);
}
@@ -161,7 +161,7 @@
return [self getNo: data inMemCtx: memCtx];
}
- (void) save
- (void) save: (TALLOC_CTX *) memCtx
{
// (gdb) po embeddedMessage->properties
// 2442592320 = "2012-07-11 22:30:00 +0000";
@@ -208,7 +208,8 @@
[[container event] updateFromMAPIProperties: properties
inUserContext: [self userContext]
withActiveUser: activeUser];
withActiveUser: activeUser
inMemCtx: memCtx];
}
@end
+2
View File
@@ -63,6 +63,8 @@
SOGoAppointmentObject *newEntry;
NSString *name;
//[self logWithFormat: @"METHOD '%s' (%d)", __FUNCTION__, __LINE__];
name = [NSString stringWithFormat: @"%@.ics",
[SOGoObject globallyUniqueObjectId]];
newEntry = [SOGoAppointmentObject objectWithName: name
+7 -6
View File
@@ -200,6 +200,7 @@ static Class NSArrayK;
- (void) dealloc
{
//NSLog(@"MAPIStoreCalendarMessage: -dealloc (%p)", self);
[calendar release];
[super dealloc];
}
@@ -417,7 +418,7 @@ static Class NSArrayK;
return [self getYes: data inMemCtx: memCtx];
}
- (NSString *) _uidFromGlobalObjectId
- (NSString *) _uidFromGlobalObjectId: (TALLOC_CTX *) memCtx
{
NSData *objectId;
NSString *uid = nil;
@@ -431,7 +432,7 @@ static Class NSArrayK;
if (objectId)
{
length = [objectId length];
bytesDup = talloc_array (NULL, char, length + 1);
bytesDup = talloc_array (memCtx, char, length + 1);
memcpy (bytesDup, [objectId bytes], length);
bytesDup[length] = 0;
uidStart = bytesDup + length - 1;
@@ -596,7 +597,7 @@ static Class NSArrayK;
}
}
- (void) save
- (void) save: (TALLOC_CTX *) memCtx
{
// iCalCalendar *vCalendar;
// NSCalendarDate *now;
@@ -608,7 +609,7 @@ static Class NSArrayK;
if (isNew)
{
uid = [self _uidFromGlobalObjectId];
uid = [self _uidFromGlobalObjectId: memCtx];
if (uid)
{
/* Hack required because of what's explained in oxocal 3.1.4.7.1:
@@ -650,12 +651,12 @@ static Class NSArrayK;
activeUser = [[self context] activeUser];
[masterEvent updateFromMAPIProperties: properties
inUserContext: [self userContext]
withActiveUser: activeUser];
withActiveUser: activeUser
inMemCtx: memCtx];
[self _updateAttachedEvents];
[[self userContext] activateWithUser: activeUser];
[sogoObject updateContentWithCalendar: calendar
fromRequest: nil];
[self updateVersions];
}
+1 -1
View File
@@ -911,7 +911,7 @@ fromProperties: (NSDictionary *) attachmentProps
//
//
//
- (void) save
- (void) save:(TALLOC_CTX *) memCtx
{
NSArray *elements, *units;
CardElement *element;
+3 -3
View File
@@ -224,7 +224,7 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri)
NSURL *baseURL;
int rc = MAPISTORE_ERR_NOT_FOUND;
NSLog (@"METHOD '%s' (%d) -- uri: '%s'", __FUNCTION__, __LINE__, newUri);
//NSLog (@"METHOD '%s' (%d) -- uri: '%s'", __FUNCTION__, __LINE__, newUri);
context = nil;
@@ -532,8 +532,8 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri)
mappingId = [mapping idFromURL: childURL];
if (mappingId == NSNotFound)
{
[self warnWithFormat: @"no id exist yet for '%@', requesting one...",
childURL];
//[self warnWithFormat: @"no id exist yet for '%@', requesting one...",
// childURL];
openchangedb_get_new_folderID (connInfo->oc_ctx, &mappingId);
[mapping registerURL: childURL withID: mappingId];
contextId = 0;
+17 -4
View File
@@ -130,6 +130,7 @@ static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact";
withNewName: (NSString *) newFolderName
isMove: (BOOL) isMove
isRecursive: (BOOL) isRecursive
inMemCtx: (TALLOC_CTX *) memCtx
{
enum mapistore_error rc;
NSString *path, *pathComponent, *targetPath, *newPath;
@@ -164,7 +165,8 @@ static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact";
else
rc = [super moveCopyToFolder: targetFolder withNewName: newFolderName
isMove: isMove
isRecursive: isRecursive];
isRecursive: isRecursive
inMemCtx: memCtx];
return rc;
}
@@ -234,7 +236,7 @@ static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact";
messageKeys = [self messageKeys];
date = [NSCalendarDate date];
[self logWithFormat: @"current date: %@", date];
//[self logWithFormat: @"current date: %@", date];
max = [messageKeys count];
for (count = 0; count < max; count++)
@@ -243,7 +245,7 @@ static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact";
fileDate = [msg lastModificationTime];
if ([date laterDate: fileDate] == fileDate)
{
[self logWithFormat: @"current date: %@", date];
//[self logWithFormat: @"current date: %@", date];
date = fileDate;
}
@@ -337,7 +339,18 @@ static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact";
- (BOOL) subscriberCanReadMessages
{
return [self _testRoleForActiveUser: MAPIStoreRightReadItems];
NSString *displayName;
/* when this folder is the "Freebusy Data" folder, we need to allow
subscribed to read an open contained messages in order to enable them to
find the "LocalFreebusy" message */
[sogoObject reloadIfNeeded];
displayName = [[sogoObject properties]
objectForKey: MAPIPropertyKey (PidTagDisplayName)];
return ([displayName isEqualToString: @"Freebusy Data"]
|| [self _testRoleForActiveUser: MAPIStoreRightReadItems]);
}
- (BOOL) subscriberCanDeleteMessages
+1 -1
View File
@@ -135,7 +135,7 @@
[super addProperties: newNewProperties];
}
- (void) save
- (void) save: (TALLOC_CTX *) memCtx
{
uint64_t newVersion;
+1 -1
View File
@@ -65,7 +65,7 @@ static Class MAPIStoreDBMessageK = Nil;
cVersion = exchange_globcnt (([value unsignedLongLongValue] >> 16)
& 0x0000ffffffffffffLL);
version = [NSNumber numberWithUnsignedLongLong: cVersion];
[self logWithFormat: @"change number from oxcfxics: %.16lx", [value unsignedLongLongValue]];
//[self logWithFormat: @"change number from oxcfxics: %.16lx", [value unsignedLongLongValue]];
[self logWithFormat: @" version: %.16lx", cVersion];
*qualifier = [[EOKeyValueQualifier alloc] initWithKey: @"version"
operatorSelector: EOQualifierOperatorGreaterThanOrEqualTo
+1 -1
View File
@@ -146,7 +146,7 @@ static Class MAPIStoreAttachmentK;
return ULLONG_MAX;
}
- (void) save
- (void) save: (TALLOC_CTX *) memCtx
{
[self subclassResponsibility: _cmd];
}
+2 -2
View File
@@ -51,7 +51,7 @@
return [self getYes: data inMemCtx: memCtx];
}
- (enum mapistore_error) saveMessage
- (enum mapistore_error) saveMessage: (TALLOC_CTX *) memCtx;
{
enum mapistore_error rc;
MAPIStoreContext *context;
@@ -60,7 +60,7 @@
context = [self context];
ownerUser = [[self userContext] sogoUser];
if ([[context activeUser] isEqual: ownerUser])
rc = [super saveMessage];
rc = [super saveMessage: memCtx];
else
rc = MAPISTORE_ERR_DENIED;
+4 -2
View File
@@ -123,12 +123,14 @@
fromFolder: (MAPIStoreFolder *) sourceFolder
withMIDs: (uint64_t *) targetMids
andChangeKeys: (struct Binary_r **) targetChangeKeys
wantCopy: (uint8_t) want_copy;
wantCopy: (uint8_t) want_copy
inMemCtx: (TALLOC_CTX *) memCtx;
- (enum mapistore_error) moveCopyToFolder: (MAPIStoreFolder *) targetFolder
withNewName: (NSString *) newFolderName
isMove: (BOOL) isMove
isRecursive: (BOOL) isRecursive;
isRecursive: (BOOL) isRecursive
inMemCtx: (TALLOC_CTX *) memCtx;
- (int) getDeletedFMIDs: (struct UI8Array_r **) fmidsPtr
andCN: (uint64_t *) cnPtr
+50 -28
View File
@@ -180,6 +180,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
- (void) dealloc
{
//[self logWithFormat: @"METHOD '%s' (%d)", __FUNCTION__, __LINE__];
// [messageKeys release];
// [faiMessageKeys release];
// [folderKeys release];
@@ -364,7 +366,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
MAPIStoreMapping *mapping;
NSString *childURL;
[self logWithFormat: @"METHOD '%s' (%d)", __FUNCTION__, __LINE__];
//[self logWithFormat: @"METHOD '%s' (%d)", __FUNCTION__, __LINE__];
mapping = [self mapping];
childURL = [mapping urlFromID: fid];
@@ -391,7 +393,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
MAPIStoreFolder *childFolder;
SOGoUser *ownerUser;
[self logWithFormat: @"METHOD '%s' (%d)", __FUNCTION__, __LINE__];
//[self logWithFormat: @"METHOD '%s' (%d)", __FUNCTION__, __LINE__];
ownerUser = [[self userContext] sogoUser];
if ([[context activeUser] isEqual: ownerUser]
@@ -448,8 +450,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
NSArray *keys;
int rc = MAPISTORE_SUCCESS;
[self logWithFormat: @"METHOD '%s' (%d) -- tableType: %d",
__FUNCTION__, __LINE__, tableType];
//[self logWithFormat: @"METHOD '%s' (%d) -- tableType: %d",
//__FUNCTION__, __LINE__, tableType];
if (tableType == MAPISTORE_MESSAGE_TABLE)
keys = [self messageKeys];
@@ -511,8 +513,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
MAPIStoreMapping *mapping;
SOGoUser *ownerUser;
[self logWithFormat: @"METHOD '%s' -- mid: 0x%.16llx associated: %d",
__FUNCTION__, mid, isAssociated];
//[self logWithFormat: @"METHOD '%s' -- mid: 0x%.16llx associated: %d",
// __FUNCTION__, mid, isAssociated];
context = [self context];
ownerUser = [[self userContext] sogoUser];
@@ -656,19 +658,23 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
return rc;
}
- (int) moveCopyMessageWithMID: (uint64_t) srcMid
fromFolder: (MAPIStoreFolder *) sourceFolder
withMID: (uint64_t) targetMid
andChangeKey: (struct Binary_r *) targetChangeKey
wantCopy: (uint8_t) wantCopy
// private method
- (int) _moveCopyMessageWithMID: (uint64_t) srcMid
fromFolder: (MAPIStoreFolder *) sourceFolder
withMID: (uint64_t) targetMid
andChangeKey: (struct Binary_r *) targetChangeKey
wantCopy: (uint8_t) wantCopy
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc;
MAPIStoreMessage *sourceMsg, *destMsg;
TALLOC_CTX *memCtx;
//TALLOC_CTX *memCtx;
struct SRow aRow;
struct SPropValue property;
memCtx = talloc_zero (NULL, TALLOC_CTX);
[self logWithFormat: @"-moveCopyMessageWithMID: 0x%.16llx .. withMID: 0x%.16llx .. wantCopy: %d", srcMid, targetMid, wantCopy];
//memCtx = talloc_zero (NULL, TALLOC_CTX);
rc = [sourceFolder openMessage: &sourceMsg
withMID: srcMid
forWriting: NO
@@ -681,7 +687,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
if (rc != MAPISTORE_SUCCESS)
goto end;
[sourceMsg copyToMessage: destMsg];
[sourceMsg copyToMessage: destMsg inMemCtx: memCtx];
if (targetChangeKey)
{
@@ -693,12 +699,12 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
if (rc != MAPISTORE_SUCCESS)
goto end;
}
[destMsg save];
[destMsg save: memCtx];
if (!wantCopy)
rc = [sourceFolder deleteMessageWithMID: srcMid andFlags: 0];
end:
talloc_free (memCtx);
//talloc_free (memCtx);
return rc;
}
@@ -709,6 +715,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
withMIDs: (uint64_t *) targetMids
andChangeKeys: (struct Binary_r **) targetChangeKeys
wantCopy: (uint8_t) wantCopy
inMemCtx: (TALLOC_CTX *) memCtx
{
int rc = MAPISTORE_SUCCESS;
NSUInteger count;
@@ -717,6 +724,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
MAPIStoreMapping *mapping;
SOGoUser *ownerUser;
struct Binary_r *targetChangeKey;
//TALLOC_CTX *memCtx;
//memCtx = talloc_zero (NULL, TALLOC_CTX);
ownerUser = [[self userContext] sogoUser];
@@ -738,11 +748,12 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
targetChangeKey = targetChangeKeys[count];
else
targetChangeKey = NULL;
rc = [self moveCopyMessageWithMID: srcMids[count]
fromFolder: sourceFolder
withMID: targetMids[count]
andChangeKey: targetChangeKey
wantCopy: wantCopy];
rc = [self _moveCopyMessageWithMID: srcMids[count]
fromFolder: sourceFolder
withMID: targetMids[count]
andChangeKey: targetChangeKey
wantCopy: wantCopy
inMemCtx: memCtx];
}
else
rc = MAPISTORE_ERR_NOT_FOUND;
@@ -765,7 +776,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
}
else
rc = MAPISTORE_ERR_DENIED;
//talloc_free (memCtx);
return rc;
}
@@ -773,6 +786,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
withNewName: (NSString *) newFolderName
isMove: (BOOL) isMove
isRecursive: (BOOL) isRecursive
inMemCtx: (TALLOC_CTX *) memCtx
{
enum mapistore_error rc;
NSAutoreleasePool *pool;
@@ -785,6 +800,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
NSUInteger count, max;
NSString *childKey;
uint64_t fmid;
//TALLOC_CTX *memCtx;
//memCtx = talloc_zero (NULL, TALLOC_CTX);
/* TODO: one possible issue with this algorithm is that moved messages will
lack a version number and will all be assigned a new one, even though
@@ -807,7 +825,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
if (rc == MAPISTORE_SUCCESS)
{
newFolder = [targetFolder lookupFolder: childKey];
[self copyPropertiesToObject: newFolder];
[self copyPropertiesToObject: newFolder inMemCtx: memCtx];
pool = [NSAutoreleasePool new];
children = [self messageKeys];
@@ -818,7 +836,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
message = [self lookupMessage: childKey];
targetMessage = [newFolder createMessage: NO];
[targetMessage setIsNew: YES];
[message copyToMessage: targetMessage];
[message copyToMessage: targetMessage inMemCtx: memCtx];
if (isMove)
{
fmid = [mapping idFromURL: [message url]];
@@ -826,7 +844,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
[mapping registerURL: [targetMessage url]
withID: fmid];
}
[targetMessage save];
[targetMessage save: memCtx];
}
[pool release];
@@ -839,7 +857,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
message = [self lookupFAIMessage: childKey];
targetMessage = [newFolder createMessage: YES];
[targetMessage setIsNew: YES];
[message copyToMessage: targetMessage];
[message copyToMessage: targetMessage inMemCtx: memCtx];
if (isMove)
{
fmid = [mapping idFromURL: [message url]];
@@ -847,7 +865,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
[mapping registerURL: [targetMessage url]
withID: fmid];
}
[targetMessage save];
[targetMessage save: memCtx];
}
[pool release];
@@ -862,7 +880,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
subFolder = [self lookupFolder: childKey];
[subFolder moveCopyToFolder: newFolder withNewName: nil
isMove: isMove
isRecursive: isRecursive];
isRecursive: isRecursive
inMemCtx: memCtx];
}
[pool release];
}
@@ -882,6 +902,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
else
rc = MAPISTORE_ERR_DENIED;
//talloc_free (memCtx);
return rc;
}
+1 -1
View File
@@ -461,7 +461,7 @@ static Class NSNumberK;
[mapping setObject: cLastModified forKey: changeNumber];
[messageEntry setObject: changeNumber forKey: @"version"];
newChangeNum = [changeNumber unsignedLongValue];
newChangeNum = [changeNumber unsignedLongLongValue];
changeKey = [self getReplicaKeyFromGlobCnt: newChangeNum >> 16];
[self _setChangeKey: changeKey forMessageEntry: messageEntry
inChangeListOnly: NO];
+2 -2
View File
@@ -92,8 +92,8 @@
value = NSObjectFromMAPISPropValue (&res->lpProp);
lastModified = [(MAPIStoreGCSFolder *)
container lastModifiedFromMessageChangeNumber: value];
[self logWithFormat: @"change number from oxcfxics: %.16lx", [value unsignedLongLongValue]];
[self logWithFormat: @" c_lastmodified: %@", lastModified];
//[self logWithFormat: @"change number from oxcfxics: %.16lx", [value unsignedLongLongValue]];
//[self logWithFormat: @" c_lastmodified: %@", lastModified];
if (lastModified)
{
*qualifier = [[EOKeyValueQualifier alloc] initWithKey: @"c_lastmodified"
+13 -7
View File
@@ -390,7 +390,7 @@ static Class SOGoMailFolderK, MAPIStoreMailFolderK, MAPIStoreOutboxFolderK;
else
value = [NSDate date];
[self logWithFormat: @"lastMessageModificationTime: %@", value];
//[self logWithFormat: @"lastMessageModificationTime: %@", value];
return value;
}
@@ -613,8 +613,8 @@ _compareFetchResultsByMODSEQ (id entry1, id entry2, void *data)
[messageEntry setObject: modseq forKey: @"modseq"];
[messageEntry setObject: changeNumber forKey: @"version"];
[self logWithFormat: @"added message entry for uid %@, modseq %@,"
@" version %@", uid, modseq, changeNumber];
//[self logWithFormat: @"added message entry for uid %@, modseq %@,"
// @" version %@", uid, modseq, changeNumber];
changeKey = [self getReplicaKeyFromGlobCnt: newChangeNum >> 16];
[self _setChangeKey: changeKey forMessageEntry: messageEntry];
@@ -796,7 +796,7 @@ _compareFetchResultsByMODSEQ (id entry1, id entry2, void *data)
if (tableType == MAPISTORE_MESSAGE_TABLE)
{
changeNumber = [NSString stringWithUnsignedLongLong: changeNum];
changeNumber = [NSString stringWithFormat: @"0x%.16llx", changeNum];
modseq = [[self modseqFromMessageChangeNumber: changeNumber]
unsignedLongLongValue];
if (modseq > 0)
@@ -929,6 +929,8 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
withMIDs: (uint64_t *) targetMids
andChangeKeys: (struct Binary_r **) targetChangeKeys
wantCopy: (uint8_t) wantCopy
inMemCtx: (TALLOC_CTX *) memCtx
{
NGImap4Connection *connection;
NGImap4Client *client;
@@ -946,7 +948,8 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
return [super moveCopyMessagesWithMIDs: srcMids andCount: midCount
fromFolder: sourceFolder withMIDs: targetMids
andChangeKeys: targetChangeKeys
wantCopy: wantCopy];
wantCopy: wantCopy
inMemCtx: memCtx];
/* Conversion of mids to IMAP uids */
mapping = [self mapping];
@@ -1052,6 +1055,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
withNewName: (NSString *) newFolderName
isMove: (BOOL) isMove
isRecursive: (BOOL) isRecursive
inMemCtx: (TALLOC_CTX *) memCtx
{
enum mapistore_error rc;
NSURL *folderURL, *newFolderURL;
@@ -1147,7 +1151,8 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
moveCopyToFolder: newFolder
withNewName: nil
isMove: NO
isRecursive: YES];
isRecursive: YES
inMemCtx: memCtx];
}
}
}
@@ -1160,7 +1165,8 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP)
else
rc = [super moveCopyToFolder: targetFolder withNewName: newFolderName
isMove: isMove
isRecursive: isRecursive];
isRecursive: isRecursive
inMemCtx: memCtx];
return rc;
}
+10 -2
View File
@@ -693,7 +693,15 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
ngAddress = [[NGMailAddressParser mailAddressParserWithString: fullMail]
parse];
if ([ngAddress isKindOfClass: [NGMailAddress class]])
cn = [ngAddress displayName];
{
cn = [ngAddress displayName];
// If we don't have a displayName, we use the email address instead. This
// avoid bug #2119 - where Outlook won't display anything in the "From" field,
// nor in the recipient field if we reply to the email.
if (![cn length])
cn = [ngAddress address];
}
else
cn = @"";
@@ -1576,7 +1584,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data)
bodySetup = YES;
}
- (void) save
- (void) save: (TALLOC_CTX *) memCtx
{
NSNumber *value;
+5 -4
View File
@@ -120,7 +120,7 @@ static Class MAPIStoreMailMessageK, NSDataK, NSStringK;
case PidLidAppointmentStartWhole:
case PidLidAppointmentEndWhole:
case PidLidRecurring:
[self logWithFormat: @"apt restriction on mail folder?"];
//[self logWithFormat: @"apt restriction on mail folder?"];
rc = MAPIRestrictionStateAlwaysFalse;
break;
@@ -155,10 +155,11 @@ static Class MAPIStoreMailMessageK, NSDataK, NSStringK;
case PidTagChangeNumber:
{
value = [NSString stringWithFormat: @"0x%.16llx", [value unsignedLongLongValue]];
modseq = [(MAPIStoreMailFolder *)
container modseqFromMessageChangeNumber: value];
[self logWithFormat: @"change number from oxcfxics: %.16lx", [value unsignedLongLongValue]];
[self logWithFormat: @" modseq: %.16lx", [modseq unsignedLongLongValue]];
//[self logWithFormat: @"change number from oxcfxics: %.16lx", [value unsignedLongLongValue]];
//[self logWithFormat: @" modseq: %.16lx", [modseq unsignedLongLongValue]];
if (modseq)
modseq = [NSNumber numberWithUnsignedLongLong:
[modseq unsignedLongLongValue] + 1];
@@ -316,7 +317,7 @@ static Class MAPIStoreMailMessageK, NSDataK, NSStringK;
ASSIGN (sortOrderings, newSortOrderings);
else
ASSIGN (sortOrderings, [NSArray arrayWithObject: @"ARRIVAL"]);
[self logWithFormat: @"new sort orderings: '%@'", sortOrderings];
//[self logWithFormat: @"new sort orderings: '%@'", sortOrderings];
}
else
ASSIGN (sortOrderings, [NSArray arrayWithObject: @"ARRIVAL"]);
+10 -3
View File
@@ -569,7 +569,7 @@ FillMessageHeadersFromProperties (NGMutableHashMap *headers,
}
list = MakeRecipientsList ([recipients objectForKey: @"orig"]);
if (list)
if ([list count])
[headers setObjects: list forKey: @"from"];
}
else
@@ -904,7 +904,7 @@ MakeMessageBody (NSDictionary *mailProperties, NSDictionary *attachmentParts, NS
return MAPISTORE_SUCCESS;
}
- (void) save
- (void) save: (TALLOC_CTX *) memCtx
{
NSString *folderName, *flag, *newIdString, *messageKey;
NSData *changeKey, *messageData;
@@ -943,7 +943,14 @@ MakeMessageBody (NSDictionary *mailProperties, NSDictionary *attachmentParts, NS
[mapping registerURL: [self url] withID: mid];
/* synchronise the cache and update the change key with the one provided
by the client */
by the client. Before doing this, lets issue a unselect/select combo
because of timing issues with Dovecot in obtaining the latest modseq.
Sometimes, Dovecot doesn't return the newly appended UID if we do
a "UID SORT (DATE) UTF-8 (MODSEQ XYZ) (NOT DELETED)" command (where
XYZ is the HIGHESTMODSEQ+1) immediately after IMAP APPEND */
[client unselect];
[client select: folderName];
[(MAPIStoreMailFolder *) container synchroniseCache];
changeKey = [properties objectForKey: MAPIPropertyKey (PR_CHANGE_KEY)];
if (changeKey)
+3 -3
View File
@@ -64,17 +64,17 @@
- (int) getAttachmentTable: (MAPIStoreAttachmentTable **) tablePtr
andRowCount: (uint32_t *) countPtr;
- (int) setReadFlag: (uint8_t) flag;
- (enum mapistore_error) saveMessage;
- (enum mapistore_error) saveMessage: (TALLOC_CTX *) memCtx;
- (NSArray *) activeContainerMessageTables;
- (NSArray *) activeUserRoles;
/* move & copy internal ops */
- (void) copyToMessage: (MAPIStoreMessage *) newMessage;
- (void) copyToMessage: (MAPIStoreMessage *) newMessage inMemCtx: (TALLOC_CTX *) memCtx;
/* subclasses */
- (void) save;
- (void) save: (TALLOC_CTX *) memCtx;
/* attachments (subclasses) */
- (MAPIStoreAttachment *) createAttachment;
+27 -37
View File
@@ -45,11 +45,10 @@
#import "NSData+MAPIStore.h"
#import "NSObject+MAPIStore.h"
#import "NSString+MAPIStore.h"
#import "RTFHandler.h"
#import "MAPIStoreMessage.h"
#include <unrtf.h>
#undef DEBUG
#include <stdbool.h>
#include <gen_ndr/exchange.h>
@@ -60,17 +59,6 @@ static Class MAPIStoreFolderK, MAPIStoreEmbeddedMessageK;
static NSString *resourcesDir = nil;
/* rtf conversion via unrtf */
static int
unrtf_data_output (void *data, const char *str, size_t str_len)
{
NSMutableData *rtfData = data;
[rtfData appendBytes: str length: str_len];
return str_len;
}
static NSData *
uncompressRTF (NSData *compressedRTF)
{
@@ -97,22 +85,17 @@ rtf2html (NSData *compressedRTF)
{
NSData *rtf;
NSMutableData *html = nil;
int rc;
struct unRTFOptions unrtfOptions;
rtf = uncompressRTF (compressedRTF);
if (rtf)
{
html = [NSMutableData data];
memset (&unrtfOptions, 0, sizeof (struct unRTFOptions));
unrtf_set_output_device (&unrtfOptions, unrtf_data_output, html);
unrtfOptions.config_directory = [resourcesDir UTF8String];
unrtfOptions.output_format = "html";
unrtfOptions.nopict_mode = YES;
rc = unrtf_convert_from_string (&unrtfOptions,
[rtf bytes], [rtf length]);
if (!rc)
html = nil;
//html = [NSMutableData data];
RTFHandler *handler;
handler = [[RTFHandler alloc] initWithData: rtf];
AUTORELEASE(handler);
html = [handler parse];
}
return html;
@@ -139,6 +122,8 @@ rtf2html (NSData *compressedRTF)
- (id) init
{
//[self logWithFormat: @"METHOD '%s' (%d) (%d)", __FUNCTION__, __LINE__, self];
if ((self = [super init]))
{
attachmentParts = [NSMutableDictionary new];
@@ -151,6 +136,7 @@ rtf2html (NSData *compressedRTF)
- (void) dealloc
{
//[self logWithFormat: @"METHOD '%s' (%d) (%d)", __FUNCTION__, __LINE__, self];
[activeUserRoles release];
[attachmentKeys release];
[attachmentParts release];
@@ -257,7 +243,7 @@ rtf2html (NSData *compressedRTF)
struct mapistore_message_recipient *recipient;
NSUInteger count;
[self logWithFormat: @"METHOD '%s'", __FUNCTION__];
//[self logWithFormat: @"METHOD '%s'", __FUNCTION__];
recipients = [NSMutableDictionary new];
recipientProperties = [NSDictionary dictionaryWithObject: recipients
@@ -437,17 +423,19 @@ rtf2html (NSData *compressedRTF)
andType: MAPISTORE_MESSAGE_TABLE];
}
- (void) copyToMessage: (MAPIStoreMessage *) newMessage
- (void) copyToMessage: (MAPIStoreMessage *) newMessage inMemCtx: (TALLOC_CTX *) memCtx;
{
TALLOC_CTX *memCtx;
//TALLOC_CTX *memCtx;
struct mapistore_message *messageData;
NSArray *keys;
NSUInteger count, max;
NSString *key;
MAPIStoreAttachment *attachment, *newAttachment;
memCtx = talloc_zero (NULL, TALLOC_CTX);
//[self logWithFormat: @"METHOD '%s' (%d) (%d)", __FUNCTION__, __LINE__, self];
//memCtx = talloc_zero (NULL, TALLOC_CTX);
/* message headers and recipients */
[self getMessageData: &messageData inMemCtx: memCtx];
@@ -456,7 +444,7 @@ rtf2html (NSData *compressedRTF)
andColumns: messageData->columns];
/* properties */
[self copyPropertiesToObject: newMessage];
[self copyPropertiesToObject: newMessage inMemCtx: memCtx];
/* attachments */
keys = [self attachmentKeys];
@@ -466,13 +454,13 @@ rtf2html (NSData *compressedRTF)
key = [keys objectAtIndex: count];
attachment = [self lookupAttachment: key];
newAttachment = [newMessage createAttachment];
[attachment copyToAttachment: newAttachment];
[attachment copyToAttachment: newAttachment inMemCtx: memCtx];
}
talloc_free (memCtx);
//talloc_free (memCtx);
}
- (enum mapistore_error) saveMessage
- (enum mapistore_error) saveMessage: (TALLOC_CTX *) memCtx
{
enum mapistore_error rc;
NSArray *containerTables;
@@ -485,6 +473,8 @@ rtf2html (NSData *compressedRTF)
BOOL userIsOwner;
MAPIStoreMessage *mainMessage;
//[self logWithFormat: @"METHOD '%s' (%d)", __FUNCTION__, __LINE__];
context = [self context];
ownerUser = [[self userContext] sogoUser];
userIsOwner = [[context activeUser] isEqual: ownerUser];
@@ -511,7 +501,7 @@ rtf2html (NSData *compressedRTF)
/* folder modified */
notif_parameters
= talloc_zero(NULL, struct mapistore_object_notification_parameters);
= talloc_zero(memCtx, struct mapistore_object_notification_parameters);
notif_parameters->object_id = folderId;
if (isNew)
{
@@ -535,7 +525,7 @@ rtf2html (NSData *compressedRTF)
if (isNew)
{
notif_parameters
= talloc_zero(NULL,
= talloc_zero(memCtx,
struct mapistore_object_notification_parameters);
notif_parameters->object_id = [self objectId];
notif_parameters->folder_id = folderId;
@@ -555,7 +545,7 @@ rtf2html (NSData *compressedRTF)
[[containerTables objectAtIndex: count] restrictedChildKeys];
}
[self save];
[self save: memCtx];
/* We make sure that any change-related properties are removes from the
properties dictionary, to make sure that related methods will be
invoked the next time they are requested. */
@@ -930,7 +920,7 @@ rtf2html (NSData *compressedRTF)
return MAPISTORE_ERROR;
}
- (void) save
- (void) save: (TALLOC_CTX *) memCtx
{
[self subclassResponsibility: _cmd];
}
+1 -1
View File
@@ -91,7 +91,7 @@
inMemCtx: (TALLOC_CTX *) memCtx;
/* move and copy operations */
- (void) copyPropertiesToObject: (MAPIStoreObject *) newObject;
- (void) copyPropertiesToObject: (MAPIStoreObject *) newObject inMemCtx: (TALLOC_CTX *) memCtx;
/* subclasses */
- (NSString *) nameInContainer;
+4 -5
View File
@@ -317,9 +317,9 @@ static Class NSExceptionK, MAPIStoreFolderK;
}
/* move and copy operations */
- (void) copyPropertiesToObject: (MAPIStoreObject *) newObject
- (void) copyPropertiesToObject: (MAPIStoreObject *) newObject inMemCtx: (TALLOC_CTX *) memCtx
{
TALLOC_CTX *memCtx;
//TALLOC_CTX *memCtx;
struct SPropTagArray *availableProps;
struct SRow row;
enum MAPITAGS propTag;
@@ -328,7 +328,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
enum mapistore_error error;
void *data;
memCtx = talloc_zero (NULL, TALLOC_CTX);
//memCtx = talloc_zero (NULL, TALLOC_CTX);
[self getAvailableProperties: &availableProps inMemCtx: memCtx];
@@ -369,8 +369,7 @@ static Class NSExceptionK, MAPIStoreFolderK;
}
[newObject addPropertiesFromRow: &row];
talloc_free (memCtx);
//talloc_free (memCtx);
}
/* subclasses */
+16 -9
View File
@@ -68,7 +68,7 @@ sogo_backend_atexit (void)
GSRegisterCurrentThread ();
pool = [NSAutoreleasePool new];
NSLog (@"allocated classes:\n%s", GSDebugAllocationList (YES));
//NSLog (@"allocated classes:\n%s", GSDebugAllocationList (YES));
[pool release];
GSUnregisterCurrentThread ();
}
@@ -95,6 +95,7 @@ sogo_backend_init (void)
defaults using the system encoding rather than honouring
the encoding specified in the file. */
putenv ("GNUSTEP_STRING_ENCODING=NSUTF8StringEncoding");
//putenv ("NSZombieEnabled=YES");
[NSProcessInfo initializeWithArguments: argv
count: 1
@@ -567,6 +568,7 @@ sogo_folder_delete_message(void *folder_object, uint64_t mid, uint8_t flags)
static enum mapistore_error
sogo_folder_move_copy_messages(void *folder_object,
void *source_folder_object,
TALLOC_CTX *mem_ctx,
uint32_t mid_count,
uint64_t *src_mids, uint64_t *t_mids,
struct Binary_r **target_change_keys,
@@ -594,7 +596,8 @@ sogo_folder_move_copy_messages(void *folder_object,
fromFolder: sourceFolder
withMIDs: t_mids
andChangeKeys: target_change_keys
wantCopy: want_copy];
wantCopy: want_copy
inMemCtx: mem_ctx];
[pool release];
GSUnregisterCurrentThread ();
}
@@ -608,7 +611,7 @@ sogo_folder_move_copy_messages(void *folder_object,
static enum mapistore_error
sogo_folder_move_folder(void *folder_object, void *target_folder_object,
const char *new_folder_name)
TALLOC_CTX *mem_ctx, const char *new_folder_name)
{
NSAutoreleasePool *pool;
MAPIStoreFolder *moveFolder, *targetFolder;
@@ -640,7 +643,9 @@ sogo_folder_move_folder(void *folder_object, void *target_folder_object,
rc = [moveFolder moveCopyToFolder: targetFolder
withNewName: newFolderName
isMove: YES
isRecursive: YES];
isRecursive: YES
inMemCtx: mem_ctx];
[pool release];
GSUnregisterCurrentThread ();
}
@@ -653,7 +658,7 @@ sogo_folder_move_folder(void *folder_object, void *target_folder_object,
}
static enum mapistore_error
sogo_folder_copy_folder(void *folder_object, void *target_folder_object,
sogo_folder_copy_folder(void *folder_object, void *target_folder_object, TALLOC_CTX *mem_ctx,
bool recursive, const char *new_folder_name)
{
NSAutoreleasePool *pool;
@@ -680,7 +685,9 @@ sogo_folder_copy_folder(void *folder_object, void *target_folder_object,
rc = [copyFolder moveCopyToFolder: targetFolder
withNewName: newFolderName
isMove: NO
isRecursive: recursive];
isRecursive: recursive
inMemCtx: mem_ctx];
[pool release];
GSUnregisterCurrentThread ();
}
@@ -1017,7 +1024,7 @@ sogo_message_set_read_flag (void *message_object, uint8_t flag)
}
static enum mapistore_error
sogo_message_save (void *message_object)
sogo_message_save (void *message_object, TALLOC_CTX *mem_ctx)
{
struct MAPIStoreTallocWrapper *wrapper;
NSAutoreleasePool *pool;
@@ -1032,7 +1039,7 @@ sogo_message_save (void *message_object)
message = wrapper->instance;
GSRegisterCurrentThread ();
pool = [NSAutoreleasePool new];
rc = [message saveMessage];
rc = [message saveMessage: mem_ctx];
// [context tearDownRequest];
[pool release];
GSUnregisterCurrentThread ();
@@ -1222,7 +1229,7 @@ sogo_table_set_restrictions (void *table_object, struct mapi_SRestriction *restr
GSRegisterCurrentThread ();
pool = [NSAutoreleasePool new];
[table setRestrictions: restrictions];
[table cleanupCaches];
//[table cleanupCaches];
rc = MAPISTORE_SUCCESS;
*table_status = TBLSTAT_COMPLETE;
[pool release];
+7 -7
View File
@@ -375,12 +375,12 @@ static Class NSDataK, NSStringK;
- (void) setRestrictions: (const struct mapi_SRestriction *) res
{
EOQualifier *oldRestriction;
//EOQualifier *oldRestriction;
// [self logWithFormat: @"set restriction to (table type: %d): %@",
// type, MAPIStringForRestriction (res)];
oldRestriction = restriction;
//oldRestriction = restriction;
[restriction autorelease];
if (res)
restrictionState = [self evaluateRestriction: res
@@ -396,11 +396,11 @@ static Class NSDataK, NSStringK;
// FIXME: we should not flush the caches if the restrictions matches
[self cleanupCaches];
if (restriction)
[self logWithFormat: @"restriction set to EOQualifier: %@",
restriction];
else if (oldRestriction)
[self logWithFormat: @"restriction unset (was %@)", oldRestriction];
//if (restriction)
// [self logWithFormat: @"restriction set to EOQualifier: %@",
// restriction];
// else if (oldRestriction)
// [self logWithFormat: @"restriction unset (was %@)", oldRestriction];
}
- (MAPIRestrictionState) evaluateNotRestriction: (struct mapi_SNotRestriction *) res
+1 -1
View File
@@ -357,7 +357,7 @@
return rc;
}
- (void) save
- (void) save:(TALLOC_CTX *) memCtx
{
iCalCalendar *vCalendar;
iCalToDo *vToDo;
+2 -2
View File
@@ -52,9 +52,9 @@ static inline NSNumber *
MAPIPropertyKey (enum MAPITAGS propTag)
{
#if (GS_SIZEOF_LONG == 4)
return [NSNumber numberWithUnsignedLong: propTag];
return [NSString stringWithFormat: @"%ul", propTag];
#elif (GS_SIZEOF_INT == 4)
return [NSNumber numberWithUnsignedInt: propTag];
return [NSString stringWithFormat: @"%u", propTag];
#else
#error No suitable type for 4 bytes integers
#endif
+4 -3
View File
@@ -342,7 +342,8 @@ MAPIStoreDumpMessageProperties (NSDictionary *properties)
{
NSNumber *key;
NSArray *allKeys;
NSUInteger keyAsInt, count, max;
NSUInteger count, max;
NSUInteger keyAsInt;
id value;
allKeys = [properties allKeys];
@@ -351,7 +352,7 @@ MAPIStoreDumpMessageProperties (NSDictionary *properties)
NSLog (@"message properties (%d):", max);
value = [properties objectForKey: @"recipients"];
if (value)
if (value)
NSLog (@" recipients: %@", value);
for (count = 0; count < max; count++)
@@ -363,7 +364,7 @@ MAPIStoreDumpMessageProperties (NSDictionary *properties)
value = [properties objectForKey: key];
NSLog (@" 0x%.4x: %@ (%@)",
keyAsInt, value,
NSStringFromClass ([value class]));
NSStringFromClass ([value class]));
}
}
}
+5 -2
View File
@@ -20,6 +20,7 @@
* Boston, MA 02111-1307, USA.
*/
#import <Foundation/NSCharacterSet.h>
#import <Foundation/NSData.h>
#import <Foundation/NSDictionary.h>
#import <Foundation/NSMapTable.h>
@@ -107,15 +108,17 @@ static NSMapTable *contextsTable = nil;
password = nil;
path = [NSString stringWithFormat: SAMBA_PRIVATE_DIR
@"/mapistore/%@/password", newUsername];
@"/mapistore/%@/password", newUsername];
content = [NSData dataWithContentsOfFile: path];
if (content)
{
password = [[NSString alloc] initWithData: content
encoding: NSUTF8StringEncoding];
encoding: NSUTF8StringEncoding];
[password autorelease];
password = [password stringByTrimmingCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString: @"\r\n"]];
}
return password;
+2 -3
View File
@@ -50,7 +50,7 @@ MAPIStoreTallocWrapperDestroy (void *data)
GSRegisterCurrentThread ();
pool = [NSAutoreleasePool new];
wrapper = data;
// NSLog (@"destroying wrapped object (wrapper: %p; object: %p)...\n", wrapper, wrapper->MAPIStoreSOGoObject);
//NSLog (@"destroying wrapped object (wrapper: %p; object: %p (%@))...\n", wrapper, wrapper->instance, NSStringFromClass([wrapper->instance class]));
[wrapper->instance release];
[pool release];
GSUnregisterCurrentThread ();
@@ -66,8 +66,7 @@ MAPIStoreTallocWrapperDestroy (void *data)
talloc_set_destructor ((void *) wrapper, MAPIStoreTallocWrapperDestroy);
wrapper->instance = self;
[self retain];
// NSLog (@"returning wrapper: %p; object: %p", wrapper, self);
//NSLog (@"returning wrapper: %p; object: %p (%@)", wrapper, self, NSStringFromClass([self class]));
return wrapper;
}
+39 -35
View File
@@ -33,6 +33,8 @@
#import <Foundation/NSValue.h>
#import <NGExtensions/NSNull+misc.h>
#import "BSONCodec.h"
const char *indentationStep = " ";
@interface NSObject (plext)
@@ -142,41 +144,43 @@ const char *indentationStep = " ";
static void
OCDumpPListData (NSData *content)
{
NSDictionary *d;
NSPropertyListFormat format;
NSString *error = nil;
const char *formatName;
//NSDictionary *d;
//NSPropertyListFormat format;
//NSString *error = nil;
//const char *formatName;
d = [NSPropertyListSerialization propertyListFromData: content
mutabilityOption: NSPropertyListImmutable
format: &format
errorDescription: &error];
if (d)
{
switch (format)
{
case NSPropertyListOpenStepFormat:
formatName = "OpenStep";
break;
case NSPropertyListXMLFormat_v1_0:
formatName = "XML";
break;
case NSPropertyListBinaryFormat_v1_0:
formatName = "Binary";
break;
case NSPropertyListGNUstepFormat:
formatName = "GNUstep";
break;
case NSPropertyListGNUstepBinaryFormat:
formatName = "GNUstep binary";
break;
default: formatName = "unknown";
}
//d = [NSPropertyListSerialization propertyListFromData: content
// mutabilityOption: NSPropertyListImmutable
// format: &format
// errorDescription: &error];
//d = [content BSONValue];
printf ("File format is: %s\n", formatName);
[d displayWithIndentation: 0];
printf ("\n");
}
else
printf ("an error occurred: %s\n", [error UTF8String]);
// if (d)
// {
// switch (format)
// {
// case NSPropertyListOpenStepFormat:
// formatName = "OpenStep";
// break;
// case NSPropertyListXMLFormat_v1_0:
// formatName = "XML";
// break;
// case NSPropertyListBinaryFormat_v1_0:
// formatName = "Binary";
// break;
// case NSPropertyListGNUstepFormat:
// formatName = "GNUstep";
// break;
// case NSPropertyListGNUstepBinaryFormat:
// formatName = "GNUstep binary";
// break;
// default: formatName = "unknown";
// }
// printf ("File format is: %s\n", formatName);
// [d displayWithIndentation: 0];
// printf ("\n");
// }
// else
// printf ("an error occurred: %s\n", [error UTF8String]);
}
+132
View File
@@ -0,0 +1,132 @@
/*
Copyright (C) 2005-2012 Inverse inc.
This file is part of SOGo.
SOGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
SOGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include <Foundation/NSArray.h>
#include <Foundation/NSData.h>
#include <Foundation/NSMapTable.h>
#include <Foundation/NSObject.h>
#include <Foundation/NSString.h>
//
//
//
@interface RTFHandler : NSObject
{
NSMapTable *_charsets;
NSMutableData *_html;
NSData *_data;
const char *_bytes;
int _current_pos;
int _len;
}
- (id) initWithData: (NSData *) theData;
- (NSMutableData *) parse;
@end
//
//
//
@interface RTFStack: NSObject
{
NSMutableArray *a;
}
- (void) push: (id) theObject;
- (id) pop;
@end
//
//
//
@interface RTFFormattingOptions : NSObject
{
@public
BOOL bold;
BOOL italic;
BOOL underline;
BOOL strikethrough;
int font_index;
int color_index;
int start_pos;
}
@end
//
//
//
@interface RTFFontInfo : NSObject
{
@public
NSString *family;
NSString *charset;
NSString *name;
unsigned int pitch;
unsigned int index;
}
@end
//
// \fX - font, index in font table
//
@interface RTFFontTable : NSObject
{
@public
NSMapTable *fontInfos;
}
- (void) addFontInfo: (RTFFontInfo *) theFontInfo
atIndex: (unsigned int ) theIndex;
- (RTFFontInfo *) fontInfoAtIndex: (unsigned int ) theIndex;
@end
//
//
//
@interface RTFColorDef : NSObject
{
@public
unsigned char red;
unsigned char green;
unsigned char blue;
}
@end
//
// {\colortbl\red0\green0\blue0;\red128\green0\blue0;\red255\green0\blue0;}
//
// \cfX - color/foreground - index
// \cbX - color/background - index
//
//
@interface RTFColorTable : NSObject
{
@public
NSMutableArray *colorDefs;
}
- (void) addColorDef: (RTFColorDef *) theColorDef;
@end
+949
View File
@@ -0,0 +1,949 @@
/*
Copyright (C) 2005-2013 Inverse inc.
This file is part of SOGo.
SOGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
SOGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include "RTFHandler.h"
#include <Foundation/NSValue.h>
//
// Useful macros
//
#define ADVANCE _bytes++; _current_pos++;
#define REWIND _bytes--; _current_pos--;
//
// Charset definitions. See http://msdn.microsoft.com/en-us/goglobal/bb964654 for all details.
//
const unsigned short ansicpg1250[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x0000, 0x201a, 0x0000, 0x201e, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0160, 0x2039, 0x015a, 0x0164, 0x017d, 0x0179,
0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0161, 0x203a, 0x015b, 0x0165, 0x017e, 0x017a,
0x00a0, 0x02c7, 0x02d8, 0x0141, 0x00a4, 0x0104, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x015e, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x017b,
0x00b0, 0x00b1, 0x02db, 0x0142, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x0105, 0x015f, 0x00bb, 0x013d, 0x02dd, 0x013e, 0x017c,
0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e,
0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df,
0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f,
0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 };
const unsigned short ansicpg1251[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f,
0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f,
0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f };
const unsigned short ansicpg1252[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x0000, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017d, 0x0000,
0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x0000, 0x017e, 0x0178,
0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff };
const unsigned short ansicpg1253[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x0000, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000, 0x203a, 0x0000, 0x0000, 0x0000, 0x0000,
0x00a0, 0x0385, 0x0386, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x0000, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x2015,
0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x00b5, 0x00b6, 0x00b7, 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f,
0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000 };
const unsigned short ansicpg1254[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x0000, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x0000, 0x0000, 0x0178,
0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff };
const unsigned short ansicpg1255[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x0000, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0000, 0x203a, 0x0000, 0x0000, 0x0000, 0x0000,
0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, 0x05b8, 0x05b9, 0x0000, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf,
0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3, 0x05f4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x200e, 0x200f, 0x0000 };
const unsigned short ansicpg1256[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba,
0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f,
0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7, 0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643,
0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef,
0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7, 0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2 };
const unsigned short ansicpg1257[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x0000, 0x201a, 0x0000, 0x201e, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00a8, 0x02c7, 0x00b8,
0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000, 0x203a, 0x0000, 0x00af, 0x02db, 0x0000,
0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x0000, 0x00a6, 0x00a7, 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6,
0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6,
0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b,
0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df,
0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c,
0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x02d9 };
const unsigned short ansicpg1258[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x0000, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0000, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0000, 0x203a, 0x0153, 0x0000, 0x0000, 0x0178,
0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x0300, 0x00cd, 0x00ce, 0x00cf,
0x0110, 0x00d1, 0x0309, 0x00d3, 0x00d4, 0x01a0, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x01af, 0x0303, 0x00df,
0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0301, 0x00ed, 0x00ee, 0x00ef,
0x0111, 0x00f1, 0x0323, 0x00f3, 0x00f4, 0x01a1, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x01b0, 0x20ab, 0x00ff };
const unsigned short ansicpg874[256] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
0x20ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x2026, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e3f,
0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x0000, 0x0000, 0x0000, 0x0000 };
//
//
//
@implementation RTFStack
- (id) init
{
if ((self = [super init]))
{
a = [[NSMutableArray alloc] init];
}
return self;
}
- (void) dealloc
{
RELEASE(a);
[super dealloc];
}
- (void) push: (id) theObject
{
[a addObject: theObject];
}
- (id) pop
{
id o = nil;
if ([a count])
{
o = AUTORELEASE([[a lastObject] retain]);
[a removeLastObject];
}
return o;
}
- (id) top
{
id o = nil;
if ([a count])
{
o = AUTORELEASE([[a lastObject] retain]);
}
return o;
}
@end
//
//
//
@implementation RTFFormattingOptions
@end
//
//
//
@implementation RTFFontInfo
- (id) init
{
if ((self = [super init]))
{
}
return self;
}
- (void) dealloc
{
RELEASE(family);
RELEASE(charset);
RELEASE(name);
[super dealloc];
}
@end
//
//
//
@implementation RTFFontTable
- (id) init
{
if ((self = [super init]))
{
fontInfos = NSCreateMapTable(NSObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 128);
}
return self;
}
- (void) dealloc
{
NSFreeMapTable(fontInfos);
[super dealloc];
}
- (void) addFontInfo: (RTFFontInfo *) theFontInfo
atIndex: (unsigned int) theIndex
{
NSNumber *key;
key = [NSNumber numberWithInt: theIndex];
NSMapInsert(fontInfos, key, (void*) theFontInfo);
}
- (RTFFontInfo *) fontInfoAtIndex: (unsigned int) theIndex
{
NSNumber *key;
key = [NSNumber numberWithInt: theIndex];
return NSMapGet(fontInfos, key);
}
@end
//
//
//
@implementation RTFColorDef
@end
//
//
//
@implementation RTFColorTable
- (id) init
{
if ((self = [super init]))
{
colorDefs = [[NSMutableArray alloc] init];
}
return self;
}
- (void) dealloc
{
RELEASE(colorDefs);
[super dealloc];
}
- (void) addColorDef: (RTFColorDef *) theColorDef
{
[colorDefs addObject: theColorDef];
}
- (RTFColorDef *) colorDefAtIndex: (unsigned int) theIndex
{
return [colorDefs objectAtIndex: theIndex];
}
@end
//
//
//
@implementation RTFHandler
- (id) initWithData: (NSData *) theData
{
if ((self = [super init]))
{
ASSIGN(_data, theData);
_bytes = (char *)[_data bytes];
_len = [_data length];
_current_pos = 0;
_charsets = NSCreateMapTable(NSObjectMapKeyCallBacks, NSNonOwnedPointerMapValueCallBacks, 10);
NSMapInsert(_charsets, @"ansicpg1250", ansicpg1250);
NSMapInsert(_charsets, @"ansicpg1251", ansicpg1251);
NSMapInsert(_charsets, @"ansicpg1252", ansicpg1252);
NSMapInsert(_charsets, @"ansicpg1253", ansicpg1253);
NSMapInsert(_charsets, @"ansicpg1254", ansicpg1254);
NSMapInsert(_charsets, @"ansicpg1255", ansicpg1255);
NSMapInsert(_charsets, @"ansicpg1256", ansicpg1256);
NSMapInsert(_charsets, @"ansicpg1257", ansicpg1257);
NSMapInsert(_charsets, @"ansicpg1258", ansicpg1258);
NSMapInsert(_charsets, @"ansicpg874", ansicpg874);
}
return self;
}
- (void) dealloc
{
NSFreeMapTable(_charsets);
RELEASE(_data);
[super dealloc];
}
- (const char *) parseControlWord: (unsigned int *) len
{
const char *start, *end;
start = ADVANCE;
while (isalnum(*_bytes) || *_bytes == '-')
{
ADVANCE;
}
end = _bytes;
*len = end-start-1;
return start+1;
}
//
// {\colortbl\red0\green0\blue0;\red128\green0\blue0;\red255\green0\blue0;}
//
- (RTFColorTable *) parseColorTable
{
RTFColorTable *colorTable;
RTFColorDef *colorDef;
colorTable = [[[RTFColorTable alloc] init] autorelease];
colorDef = [[[RTFColorDef alloc] init] autorelease];
while (*_bytes != '}')
{
if (*_bytes == ';')
{
[colorTable addColorDef: colorDef];
colorDef = [[[RTFColorDef alloc] init] autorelease];
ADVANCE;
}
else if (*_bytes == '\\')
{
const char *cw;
unsigned int len;
NSString *s;
cw = [self parseControlWord: &len];
// Skip our control word
//if (strncmp(start+1, "colortbl", len) == 0)
// continue;
s = [[NSString alloc] initWithBytesNoCopy: (void *)cw
length: len
encoding: NSASCIIStringEncoding
freeWhenDone: NO];
[s autorelease];
if ([s hasPrefix: @"red"])
{
colorDef->red = [[s substringFromIndex: 3] intValue];
}
else if ([s hasPrefix: @"green"])
{
colorDef->green = [[s substringFromIndex: 4] intValue];
}
else
{
colorDef->blue = [[s substringFromIndex: 4] intValue];
}
}
else
{
ADVANCE;
}
}
return colorTable;
}
//
// Possible formats:
//
// {\fonttbl\f0\fswiss Helvetica;}
// {\fonttbl{\f0\froman\fcharset0\fprq2 Arial;}{\f1\fswiss\fprq2\fcharset0 Arial;}}
//
// FIXME: Complex ones not handled right now:
//
// {\fonttbl{\f2\fnil\fcharset256\fprq2{\*\panose 00020703090202050204}Courier New;}{...
// {\fonttbl{\f31\fnil\fcharset0\fprq0 Times New Roman Monotype{\*\falt Times New Roman};}{...
//
// We receive the full string.
//
- (RTFFontTable *) parseFontTable
{
NSMutableString *fontName;
RTFFontTable *fontTable;
RTFFontInfo *fontInfo;
unsigned int count;
fontTable = [[[RTFFontTable alloc] init] autorelease];
fontName = nil;
count = 0;
do
{
if (*_bytes == '{')
{
if (fontTable)
{
fontInfo = [[[RTFFontInfo alloc] init] autorelease];
fontName = [[[NSMutableString alloc] init] autorelease];
}
ADVANCE;
count++;
}
else if (*_bytes == '}')
{
if (fontTable) //&& ![NSAllMapTableValues(fontTable->fontInfos) containsObject: fontInfo])
{
ASSIGN(fontInfo->name, fontName);
[fontTable addFontInfo: fontInfo atIndex: fontInfo->index];
}
ADVANCE;
count--;
}
else if (*_bytes == '\\')
{
const char *cw;
unsigned int len;
NSString *s;
cw = [self parseControlWord: &len];
// Skip our control word
if (strncmp((const char*)cw, "fonttbl", len) == 0)
continue;
// We must at least parse <fontnum><fontfamily><fcharset>
s = [[NSString alloc] initWithBytesNoCopy: (void *)cw+1
length: len-1
encoding: NSASCIIStringEncoding
freeWhenDone: NO];
[s autorelease];
// If we got a fontnum, let's parse all three fields at once)
if (isdigit(*(cw+1)))
{
fontInfo->index = [s intValue];
// We now parse <fontfamily><fcharset>
cw = [self parseControlWord: &len];
fontInfo->family = [[NSString alloc] initWithBytesNoCopy: (void *)cw+1
length: len-1
encoding: NSASCIIStringEncoding
freeWhenDone: NO];
cw = [self parseControlWord: &len];
fontInfo->charset = [[NSString alloc] initWithBytesNoCopy: (void *)cw+1
length: len-1
encoding: NSASCIIStringEncoding
freeWhenDone: NO];
// We now skip everything until we find our final group closer ('}')
int cc = 1;
do
{
if (*_bytes == '{')
cc++;
if (*_bytes == '}')
cc--;
ADVANCE;
}
while (cc != 0);
// move back our buffer;
REWIND;
}
}
else
{
if (isalnum(*_bytes))
[fontName appendFormat: @"%c", *_bytes];
ADVANCE;
}
} while (count != 0);
return fontTable;
}
//
//
//
- (void) parseStyleSheet
{
unsigned int count;
count = 0;
do
{
if (*_bytes == '{')
{
count++;
}
else if (*_bytes == '}')
{
count--;
}
ADVANCE;
} while (count != 0);
}
//
//
//
- (void) parsePicture
{
// Do the same as -parseStyleSheet for now, that is, ignore everything.
[self parseStyleSheet];
}
//
//
//
- (NSMutableData *) parse
{
RTFFormattingOptions *formattingOptions;
RTFColorTable *colorTable;
RTFFontTable *fontTable;
RTFStack *stack;
unsigned short *charset;
char c;
stack = [[RTFStack alloc] init];
fontTable = nil;
colorTable = nil;
charset = NULL;
_html = [[NSMutableData alloc] init];
[_html appendBytes: "<html><meta charset='utf-8'><body>" length: 34];
// Check if we got RTF data
if (_len > 4 && strncmp((const char*)_bytes, "{\\rtf", 4) != 0)
return NO;
while (_current_pos < _len)
{
c = *_bytes;
// RTF control code
if (c == '\\')
{
unsigned int len;
const char *cw;
NSString *s;
if (*(_bytes+1) == '\'' && charset)
{
// A hexadecimal value, based on the specified character set (may be used to identify 8-bit values).
NSString *s;
NSData *d;
const char *b1, *b2;
unsigned short index;
ADVANCE;
ADVANCE;
b1 = ADVANCE;
b2 = ADVANCE;
index = (isdigit(*b1) ? *b1 - 48 : toupper(*b1) - 55) * 16;
index += (isdigit(*b2) ? *b2 - 48 : toupper(*b2) - 55);
s = [NSString stringWithCharacters: &(charset[index]) length: 1];
d = [s dataUsingEncoding: NSUTF8StringEncoding];
[_html appendData: d];
continue;
}
else if (*(_bytes+1) == '*')
{
while (*_bytes != '}')
{
ADVANCE;
}
continue;
}
cw = [self parseControlWord: &len];
s = [[NSString alloc] initWithBytesNoCopy: (void *)cw
length: len
encoding: NSASCIIStringEncoding
freeWhenDone: NO];
[s autorelease];
if (strncmp(cw, "ansicpg", 7) == 0)
{
charset = NSMapGet(_charsets, s);
}
else if (strncmp(cw, "fonttbl", 7) == 0)
{
// We rewind our buffer so we start at the beginning of {\fonttbl...
_bytes = cw-2;
_current_pos -= 10;
fontTable = [self parseFontTable];
// We go back 1 byte in order to end our section properly ('}' character
REWIND;
}
else if (strncmp(cw, "stylesheet", 10) == 0)
{
_bytes = cw-2;
_current_pos -= 13;
[self parseStyleSheet];
REWIND;
}
else if (strncmp(cw, "colortbl", 8) == 0)
{
colorTable = [self parseColorTable];
}
else if (strncmp(cw, "pict", 4) == 0)
{
_bytes = cw-2;
_current_pos -= 7;
[self parsePicture];
REWIND;
}
else if ([s isEqualToString: @"b"] && formattingOptions)
{
[_html appendBytes: "<b>" length: 3];
formattingOptions->bold = YES;
}
else if ([s isEqualToString: @"b0"] && formattingOptions)
{
[_html appendBytes: "</b>" length: 4];
formattingOptions->bold = NO;
}
else if ([s hasPrefix: @"cf"] && [s length] > 2)
{
RTFColorDef *colorDef;
int color_index;
char *v;
color_index = [[s substringFromIndex: 2] intValue];
if (!formattingOptions)
continue;
if (formattingOptions->color_index >= 0) // && color_index != formattingOptions->color_index)
{
[_html appendBytes: "</font>" length: 7];
}
formattingOptions->color_index = color_index;
colorDef = [colorTable colorDefAtIndex: color_index];
v = malloc(23*sizeof(char));
memset(v, 0, 23);
sprintf(v, "<font color=\"#%02x%02x%02x\">", colorDef->red, colorDef->green, colorDef->blue);
[_html appendBytes: v length: strlen(v)];
free(v);
}
else if ([s hasPrefix: @"fcs"])
{
// ignore
}
else if ([s hasPrefix: @"fs"])
{
// ignore
}
else if ([s hasPrefix: @"fbidis"])
{
// ignore
}
else if ([s hasPrefix: @"fromhtml"])
{
// ignore
}
else if ([s hasPrefix: @"f"] && [s length] > 1)
{
RTFFontInfo *fontInfo;
int font_index;
font_index = [[s substringFromIndex: 1] intValue];
if (!formattingOptions)
continue;
if (formattingOptions->font_index >= 0 &&
font_index != formattingOptions->font_index)
{
[_html appendBytes: "</font>" length: 7];
}
formattingOptions->font_index = font_index;
fontInfo = [fontTable fontInfoAtIndex: font_index];
char *v = malloc(128*sizeof(char));
memset(v, 0, 128);
sprintf(v, "<font face=\"%s\">", [fontInfo->name UTF8String]);
[_html appendBytes: v length: strlen(v)];
free(v);
}
else if ([s isEqualToString: @"i"] && formattingOptions)
{
[_html appendBytes: "<i>" length: 3];
formattingOptions->italic = YES;
}
else if ([s isEqualToString: @"i0"] && formattingOptions)
{
[_html appendBytes: "</i>" length: 4];
formattingOptions->italic = NO;
}
else if ([s isEqualToString: @"tab"])
{
[_html appendBytes: "&nbsp;&nbsp;" length: 12];
}
else if ([s isEqualToString: @"softline"] || [s isEqualToString: @"par"])
{
[_html appendBytes: "<br>" length: 4];
}
else if ([s isEqualToString: @"strike"] && formattingOptions)
{
[_html appendBytes: "<strike>" length: 8];
formattingOptions->strikethrough = YES;
}
else if ([s isEqualToString: @"strike0"] && formattingOptions)
{
[_html appendBytes: "</strike>" length: 9];
formattingOptions->strikethrough = NO;
}
else if ([s hasPrefix: @"u"] && [s length] > 1 && isdigit([s characterAtIndex: 1]))
{
NSData *d;
unichar ch;
ch = (unichar)[[s substringFromIndex: 1] intValue];
s = [NSString stringWithCharacters: &ch length: 1];
d = [s dataUsingEncoding: NSUTF8StringEncoding];
[_html appendData: d];
}
else if ([s isEqualToString: @"ul"] && formattingOptions)
{
[_html appendBytes: "<u>" length: 3];
formattingOptions->underline = YES;
}
else if (([s isEqualToString: @"ul0"] || [s isEqualToString: @"ulnone"])
&& formattingOptions)
{
[_html appendBytes: "</u>" length: 4];
formattingOptions->underline = NO;
}
// If a space delimits the control word, the space does not appear in the document.
// Any characters following the delimiter, including spaces, will appear in the document.
if (*_bytes == ' ')
{
ADVANCE;
}
}
else if (c == '{')
{
formattingOptions = [[[RTFFormattingOptions alloc] init] autorelease];
formattingOptions->bold = NO;
formattingOptions->italic = NO;
formattingOptions->strikethrough = NO;
formattingOptions->underline = NO;
formattingOptions->font_index = -1;
formattingOptions->color_index = -1;
formattingOptions->start_pos = [_html length];
[stack push: formattingOptions];
ADVANCE;
}
else if (c == '}')
{
formattingOptions = [stack pop];
if (formattingOptions)
{
// Handle {\b bold} vs. \b bold \b0
if (formattingOptions->bold)
{
[_html appendBytes: "</b>" length: 4];
}
if (formattingOptions->italic)
{
[_html appendBytes: "</i>" length: 4];
}
if (formattingOptions->strikethrough)
{
[_html appendBytes: "</strike>" length: 9];
}
if (formattingOptions->underline)
{
[_html appendBytes: "</u>" length: 4];
}
if (formattingOptions->font_index >= 0)
{
[_html appendBytes: "</font>" length: 7];
}
if (formattingOptions->color_index >= 0)
{
[_html appendBytes: "</font>" length: 7];
}
}
formattingOptions = [stack top];
ADVANCE;
}
else
{
// We avoid appending NULL bytes
if (*_bytes)
[_html appendBytes: _bytes length: 1];
ADVANCE;
}
}
[_html appendBytes: "</body></html>" length: 14];
RELEASE(stack);
return AUTORELEASE(_html);
}
@end
+27 -16
View File
@@ -28,6 +28,7 @@
#import <Foundation/NSPropertyList.h>
#import <Foundation/NSString.h>
#import <Foundation/NSURL.h>
#import <Foundation/NSUserDefaults.h>
#import <Foundation/NSValue.h>
#import <GDLAccess/EOAdaptor.h>
#import <GDLAccess/EOAdaptorChannel.h>
@@ -45,9 +46,22 @@
#import "GCSSpecialQueries+OpenChange.h"
#import "MAPIStoreTypes.h"
#import "SOGoMAPIDBFolder.h"
#import "BSONCodec.h"
#import "SOGoMAPIDBObject.h"
//
// This defines the storage for internal properly list, stored in the
// database. Possible values are:
//
// NSPropertyListGNUstepFormat = 1000
// NSPropertyListGNUstepBinaryFormat = 1001
// NSPropertyListOpenStepFormat = 1
// NSPropertyListXMLFormat_v1_0 = 100
// NSPropertyListBinaryFormat_v1_0 = 200
//
static NSPropertyListFormat plistFormat;
static EOAttribute *textColumn = nil;
@implementation SOGoMAPIDBObject
@@ -56,6 +70,11 @@ static EOAttribute *textColumn = nil;
{
NSDictionary *description;
plistFormat = [[NSUserDefaults standardUserDefaults] integerForKey: @"SOGoPropertyListFormat"];
if (!plistFormat)
plistFormat = NSPropertyListGNUstepBinaryFormat;
if (!textColumn)
{
/* TODO: this is a hack for providing an EOAttribute definition that is
@@ -138,9 +157,9 @@ static EOAttribute *textColumn = nil;
- (void) setupFromRecord: (NSDictionary *) record
{
NSInteger intValue;
NSString *propsValue, *error;
NSString *propsValue;//, *error;
NSDictionary *newValues;
NSPropertyListFormat format;
//NSPropertyListFormat format;
objectType = [[record objectForKey: @"c_type"] intValue];
intValue = [[record objectForKey: @"c_creationdate"] intValue];
@@ -156,13 +175,8 @@ static EOAttribute *textColumn = nil;
propsValue = [record objectForKey: @"c_content"];
if ([propsValue isNotNull])
{
newValues = [NSPropertyListSerialization propertyListFromData: [propsValue dataByDecodingBase64]
mutabilityOption: NSPropertyListMutableContainers
format: &format
errorDescription: &error];
newValues = [[propsValue dataByDecodingBase64] BSONValue];
[properties addEntriesFromDictionary: newValues];
// [properties addEntriesFromDictionary: [propsValue
// objectFromJSONString]];
}
else
[properties removeAllObjects];
@@ -237,13 +251,13 @@ static EOAttribute *textColumn = nil;
className = @"MAPIStoreNotesMessage";
else
className = @"MAPIStoreDBMessage";
[self logWithFormat: @"PidTagMessageClass = '%@', returning '%@'",
mapiMsgClass, className];
//[self logWithFormat: @"PidTagMessageClass = '%@', returning '%@'",
// mapiMsgClass, className];
}
else
{
[self warnWithFormat: @"PidTagMessageClass is not set, falling back"
@" to 'MAPIStoreDBMessage'"];
//[self warnWithFormat: @"PidTagMessageClass is not set, falling back"
// @" to 'MAPIStoreDBMessage'"];
className = @"MAPIStoreDBMessage";
}
break;
@@ -508,10 +522,7 @@ static EOAttribute *textColumn = nil;
if ([properties count] > 0)
{
content = [NSPropertyListSerialization
dataFromPropertyList: properties
format: NSPropertyListGNUstepBinaryFormat
errorDescription: NULL];
content = [properties BSONRepresentation];
propsValue = [adaptor formatValue: [content stringByEncodingBase64]
forAttribute: textColumn];
}
+84
View File
@@ -0,0 +1,84 @@
#!/usr/bin/python
import getopt
import os
import re
import string
import sys
h_template = """unsigned short %(charsetName)s[%(len)d] = { %(values)s };"""
CHAR_UNDEF = "0x0000"
MAP_LEN = 256
itemsPerLine = 16
def usage():
usageMsg = """
Usage: %s -f inputFile
""" % (os.path.basename(sys.argv[0]))
sys.stderr.write(usageMsg)
def parseCharsetFile(file = None):
if file is None:
return None
charmap = [CHAR_UNDEF] * MAP_LEN
# Sample line:
# FD = U+200E : LEFT-TO-RIGHT MARK
for line in file.xreadlines():
m = re.search("(\w{2}) = U\+(\w{4}) :", line)
if not m:
sys.stderr.write("Skipping weird line: %s" % line)
continue
ind = int(m.group(1), base=16)
unicodeValue = str(m.group(2)).lower()
charmap[ind] = "0x%s" % (unicodeValue)
return charmap
def formatCharacterMap(charmap = None):
if not charmap:
return None
value = ""
for i in xrange(0,MAP_LEN-1):
char = charmap[i]
if i % itemsPerLine == 0:
value += "\n "
value += "%s, " % (char)
i += 1
value += charmap[MAP_LEN-1]
return value
if __name__ == '__main__':
inputFile = None
try:
opts, args = getopt.getopt(sys.argv[1:], "f:")
except getopt.GetoptError, err:
sys.stderr.write(str(err))
usage()
sys.exit(2)
for o, a in opts:
if o == "-f":
inputFile = a
else:
assert False, "unhandled option"
if not inputFile:
usage()
sys.exit(1)
f = open(inputFile, "r", 1)
charsetMap = parseCharsetFile(f)
charsetValues = formatCharacterMap(charsetMap)
print h_template % {"len": len(charsetMap),
"charsetName": os.path.basename(inputFile),
"values": charsetValues}
+4 -2
View File
@@ -23,6 +23,8 @@
#ifndef ICALEVENT_MAPISTORE_H
#define ICALEVENT_MAPISTORE_H
#include <talloc.h>
#import <NGCards/iCalEvent.h>
@class MAPIStoreUserContext;
@@ -34,8 +36,8 @@
- (void) updateFromMAPIProperties: (NSDictionary *) properties
inUserContext: (MAPIStoreUserContext *) userContext
withActiveUser: (SOGoUser *) activeUser;
withActiveUser: (SOGoUser *) activeUser
inMemCtx: (TALLOC_CTX *) memCtx;
@end
#endif /* ICALEVENT_MAPISTORE_H */
+6 -5
View File
@@ -20,7 +20,6 @@
* Boston, MA 02111-1307, USA.
*/
#include <talloc.h>
#include <util/attr.h>
#import <Foundation/NSArray.h>
@@ -75,16 +74,17 @@
@implementation iCalEvent (MAPIStoreProperties)
- (void) _setupEventRecurrence: (NSData *) mapiRecurrenceData
inMemCtx: (TALLOC_CTX *) memCtx
{
struct Binary_r *blob;
struct AppointmentRecurrencePattern *pattern;
blob = [mapiRecurrenceData asBinaryInMemCtx: NULL];
pattern = get_AppointmentRecurrencePattern (blob, blob);
blob = [mapiRecurrenceData asBinaryInMemCtx: memCtx];
pattern = get_AppointmentRecurrencePattern (memCtx, blob);
[(iCalCalendar *) parent
setupRecurrenceWithMasterEntity: self
fromRecurrencePattern: &pattern->RecurrencePattern];
talloc_free (blob);
//talloc_free (blob);
}
- (void) _setupEventAlarmFromProperties: (NSDictionary *) properties
@@ -134,6 +134,7 @@
- (void) updateFromMAPIProperties: (NSDictionary *) properties
inUserContext: (MAPIStoreUserContext *) userContext
withActiveUser: (SOGoUser *) activeUser
inMemCtx: (TALLOC_CTX *) memCtx
{
BOOL isAllDay;
iCalDateTime *start, *end;
@@ -328,7 +329,7 @@
value = [properties
objectForKey: MAPIPropertyKey (PidLidAppointmentRecur)];
if (value)
[self _setupEventRecurrence: value];
[self _setupEventRecurrence: value inMemCtx: memCtx];
/* alarm */
[self _setupEventAlarmFromProperties: properties];
File diff suppressed because it is too large. Load diff
Binary file not shown.
-75
View File
@@ -1,75 +0,0 @@
/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if you have the <ctype.h> header file. */
#define HAVE_CTYPE_H 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
to 0 otherwise. */
#define HAVE_MALLOC 1
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the `memset' function. */
#define HAVE_MEMSET 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strchr' function. */
#define HAVE_STRCHR 1
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the `strstr' function. */
#define HAVE_STRSTR 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Name of package */
#define PACKAGE "unrtf"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "bug-unrtf@gnu.org"
/* Define to the full name of this package. */
#define PACKAGE_NAME "unrtf"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "unrtf 0.21.2"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "unrtf"
/* Define to the version of this package. */
#define PACKAGE_VERSION "0.21.2"
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Version number of package */
#define VERSION "0.21.2"
/* Define to rpl_malloc if the replacement function should be used. */
/* #undef malloc */
+4 -7
View File
@@ -351,15 +351,12 @@ static GCSStringFormatter *stringFormatter = nil;
- (NSString *) _selectedFields: (NSArray *) fields
requirement: (GCSTableRequirement) requirement
{
NSMutableString *selectedFields;
selectedFields = [NSMutableString string];
NSString *selectedFields;
if (requirement == bothTableRequired
&& [fields containsObject: @"c_name"])
[selectedFields appendString: [self _dottedFields: fields]];
if (requirement == bothTableRequired && [fields containsObject: @"c_name"])
selectedFields = [self _dottedFields: fields];
else
[selectedFields appendString: [fields componentsJoinedByString: @", "]];
selectedFields = [fields componentsJoinedByString: @", "];
return selectedFields;
}
+3
View File
@@ -40,6 +40,9 @@
- (NSString *) createSessionsFolderWithName: (NSString *) tableName;
- (NSDictionary *) sessionsAttributeTypes;
- (NSString *) updateCPathInFolderInfo: (NSString *) tableName
withCPath2: (NSString *) c_path2;
@end
@interface EOAdaptorChannel (GCSSpecialQueries)
+3 -2
View File
@@ -8,11 +8,12 @@ ADDITIONAL_INCLUDE_DIRS += -I. -I..
# dependencies
BASE_LIBS := $(shell gnustep-config --base-libs)
libGDLContentStore_LIBRARIES_DEPEND_UPON += \
-lGDLAccess \
-lNGExtensions -lEOControl \
-lgnustep-base -lobjc
$(BASE_LIBS)
GDLContentStore_LIBRARIES_DEPEND_UPON += \
-framework GDLAccess \
@@ -25,7 +26,7 @@ GCS_TOOL_LIBS += \
-lGDLContentStore -lGDLAccess \
-lNGExtensions -lEOControl \
-lDOM -lSaxObjC \
-lgnustep-base
$(BASE_LIBS)
else
GCS_TOOL_LIBS += \
-framework GDLContentStore -framework GDLAccess \
+7 -4
View File
@@ -424,16 +424,19 @@
}
static inline BOOL
_subValuesAreVoid (NSArray *subValues)
_subValuesAreVoid (id subValues)
{
BOOL result = YES;
NSUInteger count, max;
result = YES;
max = [subValues count];
for (count = 0; result && count < max; count++)
result = ([[subValues objectAtIndex: count] length] == 0);
if ([subValues isKindOfClass: [NSArray class]])
{
max = [subValues count];
for (count = 0; result && count < max; count++)
result = ([[subValues objectAtIndex: count] length] == 0);
}
return result;
}
+8 -2
View File
@@ -127,17 +127,23 @@
if (order)
{
NSMutableArray *orderedElements;
NSMutableArray *orderedElements, *originalElements;
NSArray *currentChildren;
int i, c;
originalElements = [NSMutableArray arrayWithArray: [aGroup children]];
orderedElements = [NSMutableArray array];
c = [order count];
for (i = 0; i < c; i++)
{
[orderedElements addObjectsFromArray: [aGroup childrenWithTag: [order objectAtIndex: i]]];
currentChildren = [aGroup childrenWithTag: [order objectAtIndex: i]];
[orderedElements addObjectsFromArray: currentChildren];
[originalElements removeObjectsInArray: currentChildren];
}
// We add the remaining, unordered elements
[orderedElements addObjectsFromArray: originalElements];
children = [orderedElements objectEnumerator];
}
else
+3 -1
View File
@@ -17,11 +17,13 @@ ADDITIONAL_INCLUDE_DIRS += \
# dependencies
BASE_LIBS := $(shell gnustep-config --base-libs)
libNGCards_LIBRARIES_DEPEND_UPON += \
-lNGExtensions \
-lEOControl \
-lSaxObjC \
-lgnustep-base -lobjc -lm
$(BASE_LIBS)
NGCards_LIBRARIES_DEPEND_UPON += \
-framework NGExtensions -framework EOControl \
+34 -13
View File
@@ -155,20 +155,41 @@
- (NSString *) escapedForCards
{
NSString *string;
NSMutableString *string;
unsigned int len, i;
unichar c;
string = [self stringByReplacingString: @"\\"
withString: @"\\\\"];
string = [string stringByReplacingString: @","
withString: @"\\,"];
// string = [string stringByReplacingString: @":"
// withString: @"\\:"];
string = [string stringByReplacingString: @";"
withString: @"\\;"];
string = [string stringByReplacingString: @"\n"
withString: @"\\n"];
string = [string stringByReplacingString: @"\r"
withString: @"\\r"];
len = [self length];
string = [NSMutableString stringWithCapacity: len * 1.5];
for (i = 0; i < len; i++)
{
c = [self characterAtIndex: i];
switch (c)
{
case '\\':
[string appendString: @"\\\\"];
break;
case ',':
[string appendString: @"\\,"];
break;
//case ':':
// [string appendString: @"\\:"];
//break;
case ';':
[string appendString: @"\\;"];
break;
case'\n':
[string appendString: @"\\n"];
break;
case'\r':
[string appendString: @"\\r"];
break;
default:
[string appendFormat: @"%C", c];
}
}
return string;
}
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Abidjan
X-LIC-LOCATION:Africa/Abidjan
BEGIN:STANDARD
TZOFFSETFROM:-001608
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19120101T000000
RDATE:19120101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -29
View File
@@ -1,41 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Accra
X-LIC-LOCATION:Africa/Accra
BEGIN:STANDARD
TZOFFSETFROM:-000052
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19180101T000000
RDATE:19180101T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0020
TZNAME:GHST
DTSTART:19360901T000000
RDATE:19360901T000000
RDATE:19370901T000000
RDATE:19380901T000000
RDATE:19390901T000000
RDATE:19400901T000000
RDATE:19410901T000000
RDATE:19420901T000000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0020
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19361231T000000
RDATE:19361231T000000
RDATE:19371231T000000
RDATE:19381231T000000
RDATE:19391231T000000
RDATE:19401231T000000
RDATE:19411231T000000
RDATE:19421231T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -11
View File
@@ -1,22 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Addis_Ababa
X-LIC-LOCATION:Africa/Addis_Ababa
BEGIN:STANDARD
TZOFFSETFROM:+023448
TZOFFSETTO:+023520
TZNAME:ADMT
DTSTART:18700101T000000
RDATE:18700101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+023520
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19360505T000000
RDATE:19360505T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -78
View File
@@ -1,90 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Algiers
X-LIC-LOCATION:Africa/Algiers
BEGIN:STANDARD
TZOFFSETFROM:+001212
TZOFFSETTO:+000921
TZNAME:PMT
DTSTART:18910315T000100
RDATE:18910315T000100
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+000921
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19110311T000000
RDATE:19110311T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:WEST
DTSTART:19160614T230000
RDATE:19160614T230000
RDATE:19170324T230000
RDATE:19180309T230000
RDATE:19190301T230000
RDATE:19200214T230000
RDATE:19210314T230000
RDATE:19390911T230000
RDATE:19710425T230000
RDATE:19770506T000000
RDATE:19800425T000000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19161002T000000
RDATE:19161002T000000
RDATE:19171008T000000
RDATE:19181007T000000
RDATE:19191006T000000
RDATE:19201024T000000
RDATE:19210622T000000
RDATE:19391119T010000
RDATE:19461007T000000
RDATE:19630414T000000
RDATE:19710927T000000
RDATE:19791026T000000
RDATE:19801031T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19400225T020000
RDATE:19400225T020000
RDATE:19560129T000000
RDATE:19810501T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19440403T020000
RDATE:19440403T020000
RDATE:19450402T020000
RDATE:19780324T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19441008T020000
RDATE:19441008T020000
RDATE:19450916T010000
RDATE:19780922T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19771021T000000
RDATE:19771021T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -18
View File
@@ -1,29 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Asmara
X-LIC-LOCATION:Africa/Asmara
BEGIN:STANDARD
TZOFFSETFROM:+023532
TZOFFSETTO:+023532
TZNAME:AMT
DTSTART:18700101T000000
RDATE:18700101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+023532
TZOFFSETTO:+023520
TZNAME:ADMT
DTSTART:18900101T000000
RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+023520
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19360505T000000
RDATE:19360505T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -17
View File
@@ -1,29 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bamako
X-LIC-LOCATION:Africa/Bamako
BEGIN:STANDARD
TZOFFSETFROM:-0032
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19120101T000000
RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
TZNAME:WAT
DTSTART:19340226T000000
RDATE:19340226T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19600620T000000
RDATE:19600620T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bangui
X-LIC-LOCATION:Africa/Bangui
BEGIN:STANDARD
TZOFFSETFROM:+011420
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19120101T000000
RDATE:19120101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -18
View File
@@ -1,29 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Banjul
X-LIC-LOCATION:Africa/Banjul
BEGIN:STANDARD
TZOFFSETFROM:-010636
TZOFFSETTO:-010636
TZNAME:BMT
DTSTART:19120101T000000
RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-010636
TZOFFSETTO:-0100
TZNAME:WAT
DTSTART:19350101T000000
RDATE:19350101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-0100
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19640101T000000
RDATE:19640101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -11
View File
@@ -1,22 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bissau
X-LIC-LOCATION:Africa/Bissau
BEGIN:STANDARD
TZOFFSETFROM:-010220
TZOFFSETTO:-0100
TZNAME:WAT
DTSTART:19110526T000000
RDATE:19110526T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-0100
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19750101T000000
RDATE:19750101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Blantyre
X-LIC-LOCATION:Africa/Blantyre
BEGIN:STANDARD
TZOFFSETFROM:+0220
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19030301T000000
RDATE:19030301T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Brazzaville
X-LIC-LOCATION:Africa/Brazzaville
BEGIN:STANDARD
TZOFFSETFROM:+010108
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19120101T000000
RDATE:19120101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bujumbura
X-LIC-LOCATION:Africa/Bujumbura
BEGIN:STANDARD
TZOFFSETFROM:+015728
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:18900101T000000
RDATE:18900101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -137
View File
@@ -1,149 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Cairo
X-LIC-LOCATION:Africa/Cairo
BEGIN:STANDARD
TZOFFSETFROM:+0205
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:19001001T000000
RDATE:19001001T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:EEST
DTSTART:19400715T000000
RDATE:19400715T000000
RDATE:19410415T000000
RDATE:19420401T000000
RDATE:19430401T000000
RDATE:19440401T000000
RDATE:19450416T000000
RDATE:19570510T000000
RDATE:19580501T000000
RDATE:19590501T010000
RDATE:19600501T010000
RDATE:19610501T010000
RDATE:19620501T010000
RDATE:19630501T010000
RDATE:19640501T010000
RDATE:19650501T010000
RDATE:19660501T010000
RDATE:19670501T010000
RDATE:19680501T010000
RDATE:19690501T010000
RDATE:19700501T010000
RDATE:19710501T010000
RDATE:19720501T010000
RDATE:19730501T010000
RDATE:19740501T010000
RDATE:19750501T010000
RDATE:19760501T010000
RDATE:19770501T010000
RDATE:19780501T010000
RDATE:19790501T010000
RDATE:19800501T010000
RDATE:19810501T010000
RDATE:19820725T010000
RDATE:19830712T010000
RDATE:19840501T010000
RDATE:19850501T010000
RDATE:19860501T010000
RDATE:19870501T010000
RDATE:19880501T010000
RDATE:19890506T010000
RDATE:19900501T010000
RDATE:19910501T010000
RDATE:19920501T010000
RDATE:19930501T010000
RDATE:19940501T010000
RDATE:19950428T000000
RDATE:19960426T000000
RDATE:19970425T000000
RDATE:19980424T000000
RDATE:19990430T000000
RDATE:20000428T000000
RDATE:20010427T000000
RDATE:20020426T000000
RDATE:20030425T000000
RDATE:20040430T000000
RDATE:20050429T000000
RDATE:20060428T000000
RDATE:20070427T000000
RDATE:20080425T000000
RDATE:20090424T000000
RDATE:20100430T000000
RDATE:20100910T000000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:19401001T000000
RDATE:19401001T000000
RDATE:19410916T000000
RDATE:19421027T000000
RDATE:19431101T000000
RDATE:19441101T000000
RDATE:19451101T000000
RDATE:19571001T000000
RDATE:19581001T000000
RDATE:19590930T030000
RDATE:19600930T030000
RDATE:19610930T030000
RDATE:19620930T030000
RDATE:19630930T030000
RDATE:19640930T030000
RDATE:19650930T030000
RDATE:19661001T030000
RDATE:19671001T030000
RDATE:19681001T030000
RDATE:19691001T030000
RDATE:19701001T030000
RDATE:19711001T030000
RDATE:19721001T030000
RDATE:19731001T030000
RDATE:19741001T030000
RDATE:19751001T030000
RDATE:19761001T030000
RDATE:19771001T030000
RDATE:19781001T030000
RDATE:19791001T030000
RDATE:19801001T030000
RDATE:19811001T030000
RDATE:19821001T030000
RDATE:19831001T030000
RDATE:19841001T030000
RDATE:19851001T030000
RDATE:19861001T030000
RDATE:19871001T030000
RDATE:19881001T030000
RDATE:19891001T030000
RDATE:19901001T030000
RDATE:19911001T030000
RDATE:19921001T030000
RDATE:19931001T030000
RDATE:19941001T030000
RDATE:19950929T000000
RDATE:19960927T000000
RDATE:19970926T000000
RDATE:19980925T000000
RDATE:19991001T000000
RDATE:20000929T000000
RDATE:20010928T000000
RDATE:20020927T000000
RDATE:20030926T000000
RDATE:20041001T000000
RDATE:20050930T000000
RDATE:20060922T000000
RDATE:20070907T000000
RDATE:20080829T000000
RDATE:20090821T000000
RDATE:20100811T000000
RDATE:20101001T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -56
View File
@@ -1,5 +1,5 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Casablanca
@@ -8,68 +8,15 @@ BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:WEST
DTSTART:20120429T020000
DTSTART:19700426T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:20120930T030000
DTSTART:19700927T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-003020
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19131026T000000
RDATE:19131026T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:WEST
DTSTART:19390912T000000
RDATE:19390912T000000
RDATE:19400225T000000
RDATE:19500611T000000
RDATE:19670603T120000
RDATE:19740624T000000
RDATE:19760501T000000
RDATE:19770501T000000
RDATE:19780601T000000
RDATE:20080601T000000
RDATE:20090601T000000
RDATE:20100502T000000
RDATE:20110403T000000
RDATE:20120820T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19391119T000000
RDATE:19391119T000000
RDATE:19451118T000000
RDATE:19501029T000000
RDATE:19671001T000000
RDATE:19740901T000000
RDATE:19760801T000000
RDATE:19770928T000000
RDATE:19780804T000000
RDATE:19860101T000000
RDATE:20080901T000000
RDATE:20090821T000000
RDATE:20100808T000000
RDATE:20110731T000000
RDATE:20120720T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19840316T000000
RDATE:19840316T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -80
View File
@@ -1,5 +1,5 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ceuta
@@ -8,92 +8,15 @@ BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19860330T020000
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19961027T030000
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-002116
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19010101T000000
RDATE:19010101T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:WEST
DTSTART:19180506T230000
RDATE:19180506T230000
RDATE:19240416T230000
RDATE:19260417T230000
RDATE:19270409T230000
RDATE:19280414T230000
RDATE:19670603T120000
RDATE:19740624T000000
RDATE:19760501T000000
RDATE:19770501T000000
RDATE:19780601T000000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19181007T230000
RDATE:19181007T230000
RDATE:19241005T000000
RDATE:19261003T000000
RDATE:19271002T000000
RDATE:19281007T000000
RDATE:19671001T000000
RDATE:19740901T000000
RDATE:19760801T000000
RDATE:19770928T000000
RDATE:19780804T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19240101T000000
RDATE:19240101T000000
RDATE:19290101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19840316T000000
RDATE:19840316T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19860101T000000
RDATE:19860101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19860928T030000
RDATE:19860928T030000
RDATE:19870927T030000
RDATE:19880925T030000
RDATE:19890924T030000
RDATE:19900930T030000
RDATE:19910929T030000
RDATE:19920927T030000
RDATE:19930926T030000
RDATE:19940925T030000
RDATE:19950924T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -17
View File
@@ -1,29 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Conakry
X-LIC-LOCATION:Africa/Conakry
BEGIN:STANDARD
TZOFFSETFROM:-005452
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19120101T000000
RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
TZNAME:WAT
DTSTART:19340226T000000
RDATE:19340226T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19600101T000000
RDATE:19600101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -11
View File
@@ -1,22 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Dakar
X-LIC-LOCATION:Africa/Dakar
BEGIN:STANDARD
TZOFFSETFROM:-010944
TZOFFSETTO:-0100
TZNAME:WAT
DTSTART:19120101T000000
RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-0100
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19410601T000000
RDATE:19410601T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
@@ -1,29 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Dar_es_Salaam
X-LIC-LOCATION:Africa/Dar_es_Salaam
BEGIN:STANDARD
TZOFFSETFROM:+023708
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19310101T000000
RDATE:19310101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0245
TZNAME:BEAUT
DTSTART:19480101T000000
RDATE:19480101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0245
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19610101T000000
RDATE:19610101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Djibouti
X-LIC-LOCATION:Africa/Djibouti
BEGIN:STANDARD
TZOFFSETFROM:+025236
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19110701T000000
RDATE:19110701T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Douala
X-LIC-LOCATION:Africa/Douala
BEGIN:STANDARD
TZOFFSETFROM:+003848
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19120101T000000
RDATE:19120101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -11
View File
@@ -1,22 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/El_Aaiun
X-LIC-LOCATION:Africa/El_Aaiun
BEGIN:STANDARD
TZOFFSETFROM:-005248
TZOFFSETTO:-0100
TZNAME:WAT
DTSTART:19340101T000000
RDATE:19340101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-0100
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:WET
DTSTART:19760414T000000
RDATE:19760414T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -69
View File
@@ -1,81 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Freetown
X-LIC-LOCATION:Africa/Freetown
BEGIN:STANDARD
TZOFFSETFROM:-0053
TZOFFSETTO:-0053
TZNAME:FMT
DTSTART:18820101T000000
RDATE:18820101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-0053
TZOFFSETTO:-0100
TZNAME:WAT
DTSTART:19130601T000000
RDATE:19130601T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:-0100
TZOFFSETTO:-0020
TZNAME:SLST
DTSTART:19350601T000000
RDATE:19350601T000000
RDATE:19360601T000000
RDATE:19370601T000000
RDATE:19380601T000000
RDATE:19390601T000000
RDATE:19400601T000000
RDATE:19410601T000000
RDATE:19420601T000000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0020
TZOFFSETTO:-0100
TZNAME:WAT
DTSTART:19351001T000000
RDATE:19351001T000000
RDATE:19361001T000000
RDATE:19371001T000000
RDATE:19381001T000000
RDATE:19391001T000000
RDATE:19401001T000000
RDATE:19411001T000000
RDATE:19421001T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19570101T000000
RDATE:19570101T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:SLST
DTSTART:19570601T000000
RDATE:19570601T000000
RDATE:19580601T000000
RDATE:19590601T000000
RDATE:19600601T000000
RDATE:19610601T000000
RDATE:19620601T000000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19570901T000000
RDATE:19570901T000000
RDATE:19580901T000000
RDATE:19590901T000000
RDATE:19600901T000000
RDATE:19610901T000000
RDATE:19620901T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -17
View File
@@ -1,29 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Gaborone
X-LIC-LOCATION:Africa/Gaborone
BEGIN:STANDARD
TZOFFSETFROM:+014340
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:18850101T000000
RDATE:18850101T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:CAST
DTSTART:19430919T020000
RDATE:19430919T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19440319T020000
RDATE:19440319T020000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Harare
X-LIC-LOCATION:Africa/Harare
BEGIN:STANDARD
TZOFFSETFROM:+020412
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19030301T000000
RDATE:19030301T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -26
View File
@@ -1,38 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Johannesburg
X-LIC-LOCATION:Africa/Johannesburg
BEGIN:STANDARD
TZOFFSETFROM:+0152
TZOFFSETTO:+0130
TZNAME:SAST
DTSTART:18920208T000000
RDATE:18920208T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0130
TZOFFSETTO:+0200
TZNAME:SAST
DTSTART:19030301T000000
RDATE:19030301T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:SAST
DTSTART:19420920T020000
RDATE:19420920T020000
RDATE:19430919T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:SAST
DTSTART:19430321T020000
RDATE:19430321T020000
RDATE:19440319T020000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -54
View File
@@ -1,66 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Juba
X-LIC-LOCATION:Africa/Juba
BEGIN:STANDARD
TZOFFSETFROM:+020624
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19310101T000000
RDATE:19310101T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:CAST
DTSTART:19700501T000000
RDATE:19700501T000000
RDATE:19710430T000000
RDATE:19720430T000000
RDATE:19730429T000000
RDATE:19740428T000000
RDATE:19750427T000000
RDATE:19760425T000000
RDATE:19770424T000000
RDATE:19780430T000000
RDATE:19790429T000000
RDATE:19800427T000000
RDATE:19810426T000000
RDATE:19820425T000000
RDATE:19830424T000000
RDATE:19840429T000000
RDATE:19850428T000000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19701015T000000
RDATE:19701015T000000
RDATE:19711015T000000
RDATE:19721015T000000
RDATE:19731015T000000
RDATE:19741015T000000
RDATE:19751015T000000
RDATE:19761015T000000
RDATE:19771015T000000
RDATE:19781015T000000
RDATE:19791015T000000
RDATE:19801015T000000
RDATE:19811015T000000
RDATE:19821015T000000
RDATE:19831015T000000
RDATE:19841015T000000
RDATE:19851015T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:20000115T120000
RDATE:20000115T120000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -24
View File
@@ -1,36 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kampala
X-LIC-LOCATION:Africa/Kampala
BEGIN:STANDARD
TZOFFSETFROM:+020940
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19280701T000000
RDATE:19280701T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0230
TZNAME:BEAT
DTSTART:19300101T000000
RDATE:19300101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0230
TZOFFSETTO:+0245
TZNAME:BEAUT
DTSTART:19480101T000000
RDATE:19480101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0245
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:19570101T000000
RDATE:19570101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+2 -54
View File
@@ -1,66 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Khartoum
X-LIC-LOCATION:Africa/Khartoum
BEGIN:STANDARD
TZOFFSETFROM:+021008
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19310101T000000
RDATE:19310101T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:CAST
DTSTART:19700501T000000
RDATE:19700501T000000
RDATE:19710430T000000
RDATE:19720430T000000
RDATE:19730429T000000
RDATE:19740428T000000
RDATE:19750427T000000
RDATE:19760425T000000
RDATE:19770424T000000
RDATE:19780430T000000
RDATE:19790429T000000
RDATE:19800427T000000
RDATE:19810426T000000
RDATE:19820425T000000
RDATE:19830424T000000
RDATE:19840429T000000
RDATE:19850428T000000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19701015T000000
RDATE:19701015T000000
RDATE:19711015T000000
RDATE:19721015T000000
RDATE:19731015T000000
RDATE:19741015T000000
RDATE:19751015T000000
RDATE:19761015T000000
RDATE:19771015T000000
RDATE:19781015T000000
RDATE:19791015T000000
RDATE:19801015T000000
RDATE:19811015T000000
RDATE:19821015T000000
RDATE:19831015T000000
RDATE:19841015T000000
RDATE:19851015T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:EAT
DTSTART:20000115T120000
RDATE:20000115T120000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kigali
X-LIC-LOCATION:Africa/Kigali
BEGIN:STANDARD
TZOFFSETFROM:+020016
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19350601T000000
RDATE:19350601T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kinshasa
X-LIC-LOCATION:Africa/Kinshasa
BEGIN:STANDARD
TZOFFSETFROM:+010112
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:18971109T000000
RDATE:18971109T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lagos
X-LIC-LOCATION:Africa/Lagos
BEGIN:STANDARD
TZOFFSETFROM:+001336
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19190901T000000
RDATE:19190901T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Libreville
X-LIC-LOCATION:Africa/Libreville
BEGIN:STANDARD
TZOFFSETFROM:+003748
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19120101T000000
RDATE:19120101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lome
X-LIC-LOCATION:Africa/Lome
BEGIN:STANDARD
TZOFFSETFROM:+000452
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:18930101T000000
RDATE:18930101T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -11
View File
@@ -1,22 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Luanda
X-LIC-LOCATION:Africa/Luanda
BEGIN:STANDARD
TZOFFSETFROM:+005256
TZOFFSETTO:+005204
TZNAME:AOT
DTSTART:18920101T000000
RDATE:18920101T000000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+005204
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:WAT
DTSTART:19110526T000000
RDATE:19110526T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lubumbashi
X-LIC-LOCATION:Africa/Lubumbashi
BEGIN:STANDARD
TZOFFSETFROM:+014952
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:18971109T000000
RDATE:18971109T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
+3 -4
View File
@@ -1,15 +1,14 @@
BEGIN:VCALENDAR
PRODID:-/Inverse inc.//NONSGML Olson 2012f//EN
PRODID:-//Inverse inc.//NONSGML Olson 2012j//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lusaka
X-LIC-LOCATION:Africa/Lusaka
BEGIN:STANDARD
TZOFFSETFROM:+015308
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
TZNAME:CAT
DTSTART:19030301T000000
RDATE:19030301T000000
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Loaded 100 of 1210 files, more files were not shown because too many files have changed in this diff. Show more