17/02/07 - 215000 Dr J A Gow ---------------------------- Initial implementation for synchronization of tasks Needs work on PercentComplete and the priority code 18/02/07 - 182700 Dr J A Gow ---------------------------- Added code to allow partnership selection, new tool select_partnership.py to select the current partnership and allow it to be altered. The sync-engine now saves the current partnership on the host and will always use this one when set up. The setting up of partnerships may take some fiddling and the code is still a bit flakey, but once set up the sync process seems quite solid. 18/02/07 - 192900 Dr J A Gow ---------------------------- Improved partnership selection processes by blocking the autosync in the absence of a valid partership. 19/02/07 - 220600 Dr J A Gow ---------------------------- Changed the way the tasks are marked complete. Logic now works as follows: AirSync -> vcal: If task is marked complete, both the status COMPLETE field is set AND the 'PercentComplete field is emitted and set to 100. If task is not marked complete, then neither the status COMPLETE field nor the PercentComplete field are emitted. vcal -> AirSync: If PercentComplete is 100 OR status COMPLETE field is set, then the task is marked complete. 21/02/07 - 003900 Dr J A Gow ---------------------------- Added a fix to maintain the luid/guids when confronted with a slow sync. This certainly prevents the hang in sync-engine and also should ensure clean slow syncing. 01/03/07 - 230000 Dr J A Gow ---------------------------- Added the code to allow notes attached to tasks, contacts and events to be synced. This introduces the dependency on librtfcomp, which should be installed together with its Python bindings before running this sync-engine. 02/03/07 - 190000 Dr J A Gow ---------------------------- Folded in patch provided by Robert Jarzmik in order to fix the following issues - AirSync error 800700E : memory error (causes by lack of DtStamp from opensync/file-sync for example) - Engine error on alarm reminders of format : -PT1D3H33M (from kde-pim) 17/03/07 - 213800 Dr J A Gow ---------------------------- Big, big changes in the RRA department. This release contains a functional file sync system, and the sync-engine config class is becoming more useful. A dependency is now introduced on librra and pyrra. Make sure you have both installed in order to use it. Now, take the config.xml file from this sync-engine distribution, create a .synce file in your home directory, and copy the config.xml to this location. Then alter the path to point to the local folder you would like to sync to the handheld. Then cross fingers, and start sync-engine. File sync is totally automatic and does not need prompting, or the running of any other programs. The PIM syncing is totally unaffected by these changes: file sync uses RRAC via librra, PIM syncing uses AirSync. Bugs: Loads. Loads I know about, loads I don't know about. The ones I know about include: No error handling on file ops No disk space checking on local or handheld Others, but I can't think of them at the moment The config file is re-read for each connection, so another app can be used to configure sync-engine, with the changes being picked up on the next connection. 19/03/07 - 202300 Dr J A Gow ---------------------------- Corrected minor bug in the XML transforms that prevented pictures attached to contacts being synced correctly. 20/03/07 - 194500 Dr J A Gow ---------------------------- Couple of important bug fixes in file sync code - these are worth upgrading for! - File database is now saved in the correct place! This caused problems with multiple partnerships - the file was being saved in the sync-engine root rather than the .synce directory - Changed name of file database to include partnership ID to ensure syncing with multiple partnerships works. (still need to make sure this is deleted on deletion of partnership to avoid leaving cruft behind) - Items deleted on handheld while disconnected will now be correctly deleted on the desktop upon reconnection. 21/03/07 - 213300 Dr J A Gow ---------------------------- Fixed deletion of directory trees in the file sync code - this should help with the deletion of directory names with non-base ASCII characters in them (i.e. unicode). Cleaned up partnership storage. Now all partnership-specific data is stored in a directory within the .synce hierarchy with a name of the partnership ID. In this directory, the file database and the state file reside. As partnerships are created and deleted, the directory is created/deleted. Fixed deletion of current partnership. Made safe the operation of the sync threads while no current partnership is available, including when the current partnership is deleted. Now, all service threads apart from the RAPI session are shut down prior to deletion of the current partnership, and not restarted until a new one is created. Likewise, they are not started if a device is connected with no valid partnership. This just makes things safer in preparation for the following. Made significant changes to the handling of slow sync: Now, slow sync is correctly detected in opensync-plugin. When a slow sync is triggered, an argument is passed to the sync-engine's Synchronize method. If this argument is nonzero, the sync-engine will delete and recreate the partnership through a new Refresh method in Partnerships (preserving the selected sync-items). This is not as slow as could be, and it successfully forces a slow sync. HOWEVER: 1) Opensync does not seem to de-duplicate the items properly. Not sure yet whether this is an OpenSync problem, or whether there is some subtle difference in the entries from the evo2-plugin and those from AirSync that is preventing the de-duplication code in OpenSync from working. 2) Opensync allows selective slow-syncing on each object. We just can't be selective by refreshing the partnership - we end up resyncing the lot (all objects). So, when we do a slow-sync we need to do it on all object types. It's not an ideal solution. There must be a way to find the sync state information on the phone itself and use this to force a slow resync of individual object types. I am working on this. 22/03/2007 - 131900 Dr J A Gow ------------------------------ Corrected programming error in util.deltree(). Directories should now be correctly deleted when deleted from the handheld. There is a catch in util.deltree() to prevent commmon dangerous deletions e.g. root or home. 22/03/2007 - 223300 Dr J A Gow ------------------------------ Enhanced configuration system. - Slow sync using partnership refresh found to cause some problems in certain circumstances, so have made it configureable through the config.xml file and disabled it by default - functionality is now as was unless you manually turn it on. - Added the rudiments of an autosync system - this is also disabled by default, and still needs some work. If you want to try it, add the command to run on autosync to the config.xml file and set the Disable element to zero. 24/03/2007 - 190000 Dr J A Gow ------------------------------ Slow-sync: - At last, a working slow-sync method! Recreating partnerships problem-riddled and no un-hackish way to do it on the phone. So now we do it with a database. On first sync of a new partnership, we create a database of items, and maintain it on subsequent syncs. On a slow sync, we send all data back to OpenSync. The database contains AirSync data - although it could be coded easier if we saved OpenSync data, there is the danger of local changes that have elements that are not transformed by the XML transforms becoming embedded in the database. This might be acceptable, but it seemed a cleaner solution to mirror data on the phone. - Now this data is stored in item-specific files in the partnership area. It is loaded on sync start and can be flushed by the plugin when all syncing is complete. This way we do not hog memory by leaving the database in RAM when we are not syncing. - The database is saved at the end of each sync, but is only loaded if it needs to be, thereby limiting disk activity. - Only problem, OpenSync does not see the items as the 'same', only 'similar' so it asks the user for interaction with every slow-synced item. Syncing: - Externally-triggered syncing now works! - The original code could sync the handheld up to three times, especially on an externally triggered sync. Now we preserve the results of the first AirSync sync (triggered by the autosync) and use this for the next Synchronize() request. This way we only ever sync twice. - BUG - sometimes, for a weird reason, the OpenSync plugin seems to hang in _do_sync() while calling the Synchronize() method in sync-engine. Under these circumstances The hang is in the call, not the sync-engine method. Something weird with d-bus? If you just close the msynctool process and restart it (leaving sync-engine running) a slow-sync is triggered due to the interrupted process, but everything then works0. This only seems to affect autosync, not the manual ones. Problem definitely seems to be on the plugin/dbus side as the sync-engine code is not even being called. Config: - SlowSyncEnable changed to SlowSyncDisable in config file 25/03/2007 - 185200 Dr J A Gow ------------------------------- Suspecting timing issue on starting the opensync-plugin's d-bus integration, a 1-second delay has been added between connecting and the call to _do_sync(). This seems to cure the hang issue! Not 100% sure why but suspect that call to _do_sync() is occurring sufficiently quickly before the d-bus loop is established? 28/03/2007 - 212700 Dr J A Gow ------------------------------ Fix preventing spurious rtfcomp error message when translating notes with no content Minimal error checking added to file sync object writer 15/04/2007 - 184500 Dr J A Gow ------------------------------ Big, big changes in the time/date conversion department. We now have seemingly correct timezone and DST processing, although it could certainly do with more testing. We now grab the 'Timezone' information from vcal, parse out the DST recurrences and store the timezones for future use. The way this works in a sync session is as follows. AirSync-Opensync: This is OK. Since AirSync actually does something sensible for a change, and stores everything in UTC, we can just send these to vcal as UTC times. To correctly display the times on the desktop side, it is _essential_ that the desktop is set to the same timezone as the handheld, but not doing so will not result in corruption of event times. Opensync-Airsync: Here's where the fun starts. Vcal spits out the timezone as an id and a batch of recurrences for the start events for DST and standard time - and then spits out the time in local time. UTC times can be distinguished by the 'Z' suffix. So we process the timezone block to get the info, then convert the local time to UTC before throwing it at AirSync. This has been implemented for tasks and events. Not sure yet if any of the Contacts fields use timezones, but will add as I find them (should be simple to do as the DST and timezone infrastructure is now in place). Testing: Could anyone who lives in a different timezone please test for events and tasks? Especially any timezones that have an irregular or no definition for DST. Report any irregularities. The code should not get upset by events that cross DST boundaries, however it may be possible to create an event with zero duration at the end of DST. Limitations: The code will choke on any DST recurrence that uses the SETPOS rule - I haven't supported it yet. I don't think there are any, but...... Other fixes: Small fix in slow-sync code to correct an issue that could corrupt the internal XML database of objects. Has a positive side effect that a few less bytes per object need to be stored in the database. 16/04/2007 - 200100 Dr J A Gow ------------------------------ Attribute checking fix in file sync: this should eliminate some errors when synchronizing directories with additional attributes. 22/04/2007 - 233600 Dr J A Gow ------------------------------ Fix to add encoding attribute to XML header used when running slow-sync. This should prevent errors when used with non-ascii characters in the XML. 27/04/2007 - 230000 Dr J A Gow ------------------------------ Significant fixes to the file sync code. It would appear that RRAC reports no more than 32 unchanged oids at a time - and spaces the callbacks out. The fixes in this release account for this and also make the file deletion system considerably more robust: - Items scheduled for deletion now have their own queue. This queue is scanned for items to guard against rapid delete-recreate cycles from leaving an object on one side only. - Timed checks are carried out to ensure that the initial object report is completed in its entirety before scheduling unreported OIDs for deletion. - New config element 'ObjectReportTimeout' available to configure the initial object report timeout for different devices. 28/04/2007 - 194700 Dr J A Gow ------------------------------ 1) Fix for recurrent events across DST transitions. This fix fills the AirSync <Timezone> element based upon the presented timezone information in the vcal data. This means that recurrent events spanning DST transitions should now be rendered correctly on the phone side. Limitations: - It's crude. By that I mean that the conversion relies on the DST recurrence rules having a specific format (i.e. it must be a start date / BYDAY= / BYMONTH rule for the conversions to work. Basically the AirSync timezone structure is very limiting whereas the vcal timezone structure is universal. If there are any timezones out there with an oddball DST definition they may not (yet) convert correctly - The conversion does not yet work both ways, it only works vcal->AirSync. Reports indicate that kdepim handles the DST transitions internally and has is unaffected in this direction. Evolution, however, does not sort it out and would probably need the timezone info in the event. However, going the other way is not as easy... 2) Minor fix in slow-sync database format. We still have an encoding issue but this seems to be a limitation of minidom's toxml() not being able to specify an encoding. Database entries with UTF-8 sequences may fall over during a slow sync. 3) Renamed 'syncengine.py' to 'kernel.py'. Two 'syncengines' seems confusing. 29/04/2007 - 233300 Dr J A Gow ------------------------------ Fix for encoding: 'toxml()' now always has an encoding specified so we should not have any more problems with UTF8 sequences in the events etc. Added part of the infrastructure to allow vcal timezones to be constructed from AirSync timezones. This code is not yet called so its presence will not affect functionality. 30/04/2007 - 222000 Dr J A Gow ------------------------------ Completed reverse timezone functionality, this is now implemented and working (for events only at the moment). This code captures the AirSync timezone date and if it specifies a valid DST set for the current year, generates a vcal timezone that matches it. This allows recurrent events set up across a DST transition boundary to be correctly represented to Opensync. If the event is subsequently modified on the Opensync side, the timezone is updated if necessary, so everything seems to work. This does, of course, rely on OpenSync correctly exporting vcal timezone stanzas! The code now handles timezoned events in both directions. 03/05/2007 - 205200 Dr J A Gow ------------------------------ Odd problems with syncing events,tasks etc with non-English characters detected and (potentially) sorted. Turns out that dbus-python has a particular dislike of being able to efficiently send just unadulterated byte streams as part of a method call/return. The synchronization mechanism conveniently provides UTF-8 encoded XML data preserving all characters > 0x7f. Dbus itself uses UTF-8 natively, but versions of dbus-python < 0x80 can not handle this natively without requiring the string to be decoded into Unicode, then recoded the other side of the IPC. This is about as efficient as a pork pie salesman in a kibbutz - the string is decoded from UTF-8 to Unicode, then (somewhere in the binding) being recoded into UTF-8 before being sent to dbus, then the whole shooting match is done in reverse upon receipt. Nasty. Dbus-python 0.80 helps a bit as it can render byte-arrays as strings through use of the byte_arrays keyword on the proxies - problem is a large number of distros (including SuSE 10.2) ship with dbus-python < 0.80. To get round this we explicitly convert the array back to a string on receipt, preserving the encoding and thus not requiring multiple encodes/decodes to get it across the IPC. So the key data streams are now switched to byte-arrays. Not only will this make things easier if code other than Python has to communicate with sync-engine, but also should solve problems with syncing items with non-English characters in it. 07/05/2007 - 190500 Dr J A Gow ------------------------------ Fix to task times. Airsync tasks do not appear to use timezones, although it would seem that they can under certain circumstances. They do provide a StartDate and UtcStartDate. It is impossible to map these directly to a vcal timezone in the absence of an AirSync timezone, so we first check for an AirSync timezone, in which case we convert to local time. If we do not have this, we look for UtcxxxxDate and use this as UTC. If all else fails we just send in local time This works, but there seems to be a bug in Evolution. The start date converts OK, but the end time seems to be out by the UTC offset. Unknown if this affects other sync targets - needs testing. RRA thread now runs in the absence of a subscribed RRA object. This prevents weird timeouts on the device, but at the penalty of a 'noise' message from librra indicating that there are no subscribed items. Couple of encoding fixes added. Fixed silly bug in file sync code that attempted to delete files that had just been downloaded during initial sync. Also corrected debug log message that was not correctly constructed. 08/05/2007 - 000400 Dr J A Gow ------------------------------ Fixed timeouts on slow sync prefill by making the prefill call asynchronous (similar to do_sync in synce-plugin). This should prevent timeout errors when syncing any number of contacts/tasks/events. 08/05/2007 - 204300 Dr J A Gow ------------------------------ Added support for password-protected devices, and made the device connection/ removal more robust. The control for password protected devices is through the new config.xml element <AuthMethod> in the Global section. AuthMethod may have the following values: INTERNAL_CLI, INTERNAL_GUI, or it can be the path to a program. In all cases authorization is carried out through an external program - this way we can trigger GUI sync without sync-engine itself becoming dependent upon a GUI framework. If set to INTERNAL_CLI, the authorization system calls the program 'authcli.py' in sync-engine/tools. By default it will run in the same console as sync-engine. If set to INTERNAL_GUI, the authorization system calls the program 'authgui.py' in sync-engine/tools. This pops up a dialog permitting the password to be entered. 'authgui.py' depends on gtk. If set to a path to a user authorization program, the user program must take a single argument on the command line - the dbus object path of the device. It must return nonzero if authorized, zero if authorization failed. 28/10/2007 - 183000 Dr J A Gow ------------------------------ I was a bit slack in updating this changelog over the last few months. For information about minor changes please refer to the SVN commit log. A number of minor changes preceded this entry: - Fixed miscellaneous crashing in synce-plugin due to the lack of thread safety in the dbus-python event loop - Added OpenSync 0.3x plugin Major changes: Now added infrastructure to support three different formats at the OpenSync interface within sync-engine. The OpenSync 0.3x plugin requires different XML schemas than the earlier version. The directory SyncEngine/formats contains the 0.2x formats, while the directory SyncEngine/formats30 contains the formatting code for OpenSync 0.3x. Current state of this code is that events now sync well with OpenSync 0.3x (except for the timezones which are still in OpenSync 0.2x format - this is on my todo list). Tasks, contacts and better timezone support will follow shortly providing full sync support with OpenSync 0.3x The approach does duplicate some code, but will make it a _lot_ easier both to code the OS 0.3x support and to deprecate and subsequently 'amputate' the OS 0.2x support once the OS people issue a new stable release. To change between the schemas, add the following line to the <Global> section of the config.xml file in the ~/.synce directory <OpensyncXMLFormat>OS20</OpensyncXMLFormat> where the element content can be one of OS20, OS30 or NONE. This will allow sync-engine to speak OpenSync 0.2x XML, OpenSync 0.3x XML, or raw AirSync XML at the OpenSync interface. For more information see the comments in the sample config.xml file in the tree. Todo: clean up the OS30 event formatting code (which is a bit hack-ey at the moment, add OS30 timezone support along with tasks and contacts support in OS30. Watch this space.... 20/11/2007 - 190000 Dr J A Gow ------------------------------ tools/do_sync.py removed (not really necessary now) Major changes in the format30 tree. We now have largely functional support for Opensync 0.3x and later. In the formats30 conversion code, the timezone handling has been completely overhauled and cleaned up. XSLT extensions have been split off from conversions.py and implemented in four new files: taskconv.py, eventconv.py, contactconv.py and commonconv.py. The functions have been renamed in a consistent manner. This is to make the activation barrier easier for individuals to support new fields as they become available and to move towards a format converter module that can be easily split off from sync-engine and be implemented as a separate plugin. There are still some known problems as we are currently chasing a moving target while Opensync and its plugins update the XML schemas - so expect the OS0.3x stuff to break regularly until Opensync finalize these schemas. To enable Opensync 0.3x conversion, insert: <OpensyncXMLFormat>OS30</OpensyncXMLFormat> into your config.xml (see the above CHANGELOG entry) 20/11/2007 - 194900 Dr J A Gow ------------------------------ Removed nasty loop from synchandler and replaced it with a blocking event. 22/11/2007 - 191000 Dr J A Gow ------------------------------ Hitherto the pathway of synced objects was horrible: text->dom->text->libxml2->xslt->text->dom->text. This was far from efficient. Removed all airsync.py dependencies on DOM, so that now all XML objects are processed by libxml2 from start to finish (a much thinner layer than dom/minidom). There is no conversion back to text anywhere in the sync path now except at the start when converting from wbxml, at the end when going back to wbxml, and when storing an object in the slow-sync database. This has a number of very positive side-effects in terms of also getting rid of two convoluted levels of indirection: formatapi.py->event/task/contact.py->parser.py. Now the path is formatapi.py straight to parser.py. Now only parser.py needs to actually make a decision as to the stylesheet to use - so any future additions to syncable types only require a new stylesheet and changes to parser.py. We also get rid of event.py/task.py/contact.py. Resulting code is much cleaner, less convoluted and easier to follow. The speed increase when syncing big object lists is very, very noticeable :) Broken the characteristic class out of xmlutil prior to removing xmlutil.py and placed it in its own 'characteristics.py'. Removed DOM dependence. 23/11/2007 - 183000 Dr J A Gow ------------------------------ Folded in GUID data for 'WorldMate' (bug 1729381) details thanks to Nils Pickert. 23/11/2007 - 185000 Dr J A Gow ------------------------------ Removed exception in formats/event_exception_from_airsync() to clear bug 1835339 TODO: Need to go through all XSLT extensions and remove exception generation except where serious enough to warrant non-syncing of the item. (On my todo list for formats30 as well) 19/12/2007 - 231400 Dr J A Gow ------------------------------ IMPORTANT - IF USING AN EARLIER VERSION THAN THIS, EXCEPT FOR config.xml PLEASE DELETE THE CONTENTS OF YOUR ~/.synce DIRECTORY INCLUDING THE partnerships SUBDIRECTORY . AND RECREATE YOUR PARTNERSHIPS. What's changed? Lots. The partnership code has been considerably overhauled with a view to getting rid of some serious flaws in the old code. The partnership concept is now split into two parts: the partnership on the phone and the 'binding' on the host. Both must exist and match to create a partnership. It is now possible to bind successfully with multiple devices (although not at once). Syncing can only occur with a bound partnership. This process is transparent to the user. Unfortunately the bug with deletion of Exchange Server partnerships is still present -the workaround is to create the partnership with sync-engine first. We now have per-partnership configuration! - Look at configure_bindings.py in the tools directory. delete_partnership.py no longer needs the user to phaff about with running list_partnerships.py and grabbing long hex numbers. It directly presents the user with a list selectable by index. select_partnership.py has gone, it is no longer needed with the new code. Selection will occur automatically, properly, when the device is connected. DTPT has now been fully implemented in sync-engine and should be turned on by default, and should 'just work' for WM5 and WM6. It can be turned off globally in config.xml, or on a per-partnership basis with configure_bindings.py. Some bugs fixed in the OpenSync 0.3x conversion code, but it continues to be experimental at this time. Opensync 0.2x should be generally reliable. The item data pathway has been de-convoluted and made a lot more obvious and cleaner. Look at syncdb.py for more info. I will try and document this a bit later. 22/12/2007 - 022600 Guido Diepen -------------------------------- Updated kernel.py to make use of my previous patch from synce-gnome/test.py and the routines I use in synce-kdm to check whether odccm is running or not. A DBus callback is installed for events regarding "NameChangeOwner" indicating that odccm just came online. If it did, the correct callbacks for device connection and disconnection are set. 22/12/2007 - 130900 Dr J A Gow ------------------------------ Changed the partnership scan code so we don't delete partnerships that are 'dangling'. This may not be necessary and it seems to kill Exchange server partnerships, so it has been removed. No adverse effects have been detected yet. 28/12/2007 - 215000 Dr J A Gow ------------------------------ Updated and cleaned up kernel.py and sync-engine. Added a whole bunch of new command line options that change the behaviour of sync-engine. Use sync-engine -h to display the usage The sync-engine can be configured to run for just one connection with the -o option, and it can run in the foreground or in the background using the -d option. It can now log to a file and the loglevel can be specified. A useful option is --config. It is now possible to have multiple sync-engine configuration directories (including partnerships and itemDBs) for debug or similar purposes and switch between them with the --config option. Made the d-bus main loop in sync-engine thread safe. This should mop up the odd random segfault. 31/12/2007 - 120100 Dr J A Gow ------------------------------ Applied small patch by Scott Bronson to fix a couple of typos in the code. 07/12/2007 - 204100 Dr J A Gow ------------------------------ Changed plugin names to a more sensible scheme and moved them to a 'plugins' directory from which they can be copied to the OpenSync working directory. Had to use 'synce-opensync-plugin-2x' etc, as the OpenSync plugin architecture can not handle periods in the filenames. Removed dependency of file-sync code on absolute paths and modified the base config.xml file to include sensible defaults. Moved the config file to a subdirectory 'config' as sync-engine root was getting cluttered. Applied patch from Jonny Lamb including new synce-install-plugins. Modified this script to move rather than copy (in case a user hoses their OpenSync installation we then do not lose the plugin as well). Also corrected the python plugins directory (appears as opensync-1.0/python-plugins not opensync-1.0/plugins/python-plugins). The script can be re-run at any time to refresh the plugins in the OpenSync directory. Setup.py needs updating to reflect these changes. 21/01/2008 - 212100 Dr J A Gow ------------------------------ Fixed typo in config.py leading to an exception when config.xml is not present. Note that this requires config.xml to be copied over by the package manager and left in the same location relative to the sync-engine root. 31/01/2008 - 202100 Dr J A Gow ------------------------------ From this point, sync-engine no longer relies on libwbxml and pywbxml. An internal wbxml converter has been implemented in SyncEngine/wbxml (thanks to Jonny Lamb for the low level wbxml stuff). The user-facing API is unchanged. Note that this has been tested successfully with the OS30 formats, but has NOT YET BEEN FULLY TESTED with Opensync 0.2x. The only problem that may be present here is incorrect namespace assignment within the converter code. Libwbxml parses it out from the strings whereas the internal implementation looks out for namespace assignments directly to the nodes in the libxml2 structures. The implementation of this uncovered a couple of subtle errors in the general XML handling within sync-engine. These have been fixed, and the entire pathway will be checked when airsync.py is cleaned up shortly. Attribute processing is badly broken in the wbxml implementation - this is not a problem for sync-engine as AirSync does not use attributes in its XML code. However this should be fixed up (can be as a low priority job) at some point for completeness and in case Microsoft go and change things at a later date. 06/02/2008 - 1931 Dr J A Gow ---------------------------- Fixed exception caused by typo in commonconv.py (OS30) - unchanged time handler in <until> tags in recurrence rules. 07/02/2008 - 200600 Dr J A Gow ------------------------------ Corrected namespace error in formats30 preventing contacts with notes being correctly synced to the device. 08/02/2008 - 202500 Dr J A Gow ------------------------------ Fixed syncing of yearly recurrent events from Opensync to Airsync for both Opensync formats. Also fixed up the test scripts event_air2os.py and event_os2air.py - this is temporary as the format conversion test scripts are to be overhauled completely soon. 24/02/2008 - 130700 Dr J A Gow ------------------------------ Fixed typo in _CheckDeviceConnected leading to confusing exceptions being generated when tools are run without a device connected. Considerably improved error handling in the tools. Errors such as sync-engine not running, devices not connected and the like are handled cleanly and generate informative error messages. Added usage string to create_partnerships. This should prevent tracebacks being displayed to the user unless there really is an error, as opposed to bad input or configuration. This will hopefully reduce the number of bug reports caused by issues such as sync-engine not running, or a device not connected correctly. Updates to errors.py augment the error handling structure. 05/03/2008 - 180700 Guido Diepen ------------------------------ Fixed some missing sys. prefixes before the exit statements in the tools. Using exit(0) will give the following error: TypeError: 'str' object is not callable 15/03/2008 - 204500 Guido Diepen ------------------------------ Added D-Bus signals for notifying clients about the status of syncing. These signals have the base org.synce.SyncEngine.Status and notify possible clients about the updates during the ActiveSync process that are shown on the screen of the device. The signals are: * StatusSetMaxProgressValue(self, maxProgressValue): The client must update the maximum value of the progress bar * StatusSetProgressValue(self, progressValue): The client must update the value of the progress bar * StatusSetStatusString(self, statusString): The client must update the string regarding what is done * StatusSyncStart(self): A Sync just got started. The client should update such that it shows the sync is started. * StatusSyncEnd(self): A sync just finished. The client should update such that it reverts to the state before the sync started (no progressbar etc) * StatusSyncStartPartner(self,partner): Denotes the sync of the given partnership just started * StatusSyncEndPartner(self,partner): Denotes the sync of the given partnership just finished * StatusSyncStartDatatype(self,partner,datatype): Denotes the sync of the given type of sync item of the given partnership just started * StatusSyncEndDatatype(self,partner,datatype): Denotes the sync of the given type of sync item of the given partnership just finished 19/03/2008 - 001500 Guido Diepen ------------------------------ Added import of module "errors" to the pshipmgr and updated the raised error to be from that module. This solves the following error when trying to create more than 2 pships: CreateNewPartnership raise NoFreeSlots("all slots are currently full") NameError: global name 'NoFreeSlots' is not defined 19/03/2008 - 174500 Guido Diepen ------------------------------ Added module prefix of errors. to the InvalidArgument raise in pshipsmgr.py Without these prefix, you get NameErrors with InvalidArgument not defined. 23/03/2008 - 220000 Guido Diepen ------------------------------ Patched sync-engine to not segfault with thread-safe librapi2. This error occurred because in another thread the rapi_session would be NULL due to the Thread Local Storage. Thanks Markus Niemistö for supplying the patch. 24/03/2008 - 160000 Guido Diepen ------------------------------ Added signal "PartnershipsChanged" that will be emitted the moment a partnership is created or a partnership is deleted through sync-engine. With this signal other clients will be notified to update their listings. 25/03/2008 - 225000 Guido Diepen ------------------------------ Reverted yesterdays patch. For some reason the previous patch causes problems when other people use python 2.5. I have tested everything locally with python 2.4 and I can't get it to cause problems. Therefore this patch is removed for the moment UPDATE: AdamW thought problems occurred due to the 3337 patch. Turned out that this patch did not patch cleanly to the 0.11 release. Sorry for all the fuss folks! :) (If you want to blame somebody, pick AdamW :) ) 29/03/2008 - 160700 Dr J A Gow ------------------------------ Fixed problem with contacts 'Rtf' field failing to sync to PDA (Opensync 0.2x) - for some reason a namespace had got clobbered in the XSLT transform scripts. Opensync 0.3x should not have been affected by this bug. Added a per-partnership configuration for the location of the directory in which files are to be synchronized. By default this is set to ~PDAFiles/<partnership name>. It can be changed in two ways. Firstly it should be noted that the element <LocalFilePath> has been deleted from the global config.xml. This has been superseded by a new element <BaseFilePath> which provides a global base directory. Each partnership now has an element <LocalFilePath> in the <General> section of its per-partnership config. The actual directory into which a given partnership will sync is given by the intelligent concatenation of the <BaseFilePath> from the global config and the <LocalFilePath> from the per-partnership config. If <LocalFilePath> is absolute, or is prefixed by '~', it will take precedence over <BaseFilePath> and the absolute path will be used. If it is a relative path, the final directory will be formed by the concatenation of <LocalFilePath> and <BaseFilePath> - this forms the most flexible way to do this. 29/03/2008 - 164500 Dr J A Gow ------------------------------ Fixed errors in code causing strange 'socket errors' on deleting and then recreating partnerships. These typos were stopping sessions being stopped - hence the socket error! 29/03/2008 - 190700 Dr J A Gow ------------------------------ *** CAUTION: API CHANGE *** This update has introduced the ability to manage Exchange Server partnerships via the sync-engine API (to list and delete, but not yet create). This has necessitated a change to the GetPartnerships API. The new d-bus signature is a(ussssuau) and this reflects the following change to the exported data, which is now an array of: (id, guid, name, hostname, devicename, storetype, devicesyncitems) Note the change is in the addition of the 'storetype' - an integer value which can be one of PSHMGR_STORETYPE_EXCH (exchange server) or PSHMGR_STORETYPE_AS (ActiveSync). The command line tools have been updated to match. Exchange server partnerships can now be seen in the listing, and can be deleted by both delete_partnership.py and clean_partnerships.py. In the case of clean_partnerships.py, there will be an additional prompt to delete server partnerships which will be displayed only if such partnerships are present. Currently we handle a maximum of 3 partnerships (2 AS, 1 server) - this appears to be the maximum that WMx will handle - but with care this could be increased easily. Creation of server partnerships from the host is being looked at as a later addition. Also now correctly handles dangling registry entries and partnerships without clobbering server partnerships. 01/04/2008 - 115100 Dr J A Gow ------------------------------ Fixed minor problem with exceptions being generated in file sync code when an item has been removed on both host and remote before syncing. 05/04/2008 - 130900 Dr J A Gow ------------------------------ Added new API to sync-engine: GetDeviceBindingState(). in_signature is none, out_signature is 'u'. It takes no arguments and returns an integer, which can take on one of the three values below (defined in constants.py). BSTATE_DEVNOTCONNECTED (0): device not connected BSTATE_DEVNOTBOUND (1): device connected but no partnership binding available BSTATE_DEVBOUND (2): device fully bound and ready to sync. This function will not throw exceptions and is designed to be able to cleanly query the state of the device as seen by sync-engine at any time. This change was committed in r3363 but owing to an oversight this CHANGELOG entry was omitted. 05/04/2008 - 143500 Dr J A Gow ------------------------------ Code cleanups in airsync.py, no functionality changes. 16/04/2008 - 170200 Mark Ellis ------------------------------ Added initialisation of self.partnerships, which was causing a traceback from _ProcessAuth on connection of a locked device because the attribute did not yet exist. Added support for devices connected via synce-hal. Odccm support is unaffected, no configuration is required. 23/04/2008 - 200000 Mark Ellis ------------------------------ Changes to auth procedure on locked devices for WM6. 06/05/2008 - 214500 Dr J A Gow ------------------------------ Folded in patches from Daniel Frickemeyer to correct the handling of categories in tasks and events when using Opensync 0.3x. 07/05/2008 - 140000 Mark Ellis ------------------------------ Clarify handling of WM6 authorisation on device from user perspective, ie. output a suitable message instead of 'auth failed' 16/05/2008 - 225000 Dr J A Gow ------------------------------ Removed hard defaults from config.xml, leaving them commented in. Checked and updated the defaults in the code to match the current file defaults. Modifed a line in CHANGELOG to have a length less than 80chrs. 23/05/2008 - 162100 Dr J A Gow ------------------------------ Applied patch from Mark Ellis to allow processing of config files in system (etc), user (.synce) locations, after removing some redundancy. Renamed config.xml to syncengine.conf.xml (including the template file in the source tree). 29/05/2008 - 181900 Dr J A Gow ------------------------------ Fixed typo in _ProcessAuth preventing authorization from working correctly. 30/05/2008 - 113600 Dr J A Gow ------------------------------ Minor fix to debug messages in authorization code for clarity. 10/06/2008 - 193900 Dr J A Gow ------------------------------ Folded in patches from Daniel Frickermeyer to fix: - config file opening - config file in setup.py - XML handling in formats30 Also added code to release the sync event when the device is disconnected while synchronizing - have discovered that under certain circumstances it is possible for a device to get its state screwed up. This results in a sync-engine refusing to sync the device when it is replugged! This should clear this problem but time will tell. 17/06/2008 - 200700 Dr J A Gow ------------------------------ Corrected serious bug in task conversion code preventing successful synchronization of tasks with a start or due date from desktop to handheld. The problem was down to an incorrect namespace assignment in the task handling of formats20 causing an exception in the wbxml conversion. The formats30 should not be affected. 23/06/2008 - 212900 Mark Ellis ------------------------------ Install example dbus activation config file in /usr/share/doc/sync-engine 05/07/2008 - 203400 Dr J A Gow ------------------------------ Applied patches from 'merKur' to enhance support in synchronization of contacts and resolve some timezone issues. EVO->WM5: - Note not being sync'ed, At least on my phone, the note should be in <C1:Body>, not in <C1:Rtf> - If both "Business phone" and "Business fax" were defined, "Business phone" ended up in "Work Phone 2" This was due to usage of position() in the XSLT, while some elements were skipped. Instead filter by Type=WORK & Type=VOICE. - PO Box was not being sync'ed It seems WM5 has no 'PostalBox' field. I appended this info in the 'Street' field. - Street in Evolution can be multi-line, but only 1st line was sync'ed. The rest of the lines appear in the 'ExtendedAddress' field. I appended this to the 'Street' field. WM5->EVO: - Photo was not being sync'ed. I added an 'Encoding' attribute which solves this. - Phone updates were messed up. Added 'VOICE' Type attribute to the relevant ones. - Timezone conversion problems. See my thread "SynCE AirSync->VCal Timezone conversion bug" in synce-users dated 1-Jul-2008. Patch attached here as well. 10/09/2008 - 163500 Mark Ellis ------------------------------ Add config setting to allow authorization to be handled by an external process Fix comment in syncengine.conf.xml, default is INTERNAL_GTK 22/10/2008 - 104500 Mark Ellis ------------------------------ Fixes to authorization framework, we were trying to connect while authorization was pending. 25/10/2008 - 195000 Dr J A Gow ------------------------------ Fixed handling of birthdays in contacts for OS0.2x. Birthdays will now sync in both directions (bug in XSLT transforms: 'Content' elements missing) Also fixed anniversaries Opensync->Airsync. However anniversaries Airsync->Opensymc still do not work. The XML is correct and a bug in Opensync is suspected. 29/10/2008 - 165500 Mark Ellis ------------------------------ Minor update for change in pyrapi2.RAPIError 18/12/2008 - 172600 Mark Ellis ------------------------------ Make -c command line option work more as expected, not silently adding .synce. Report useful errors from problems with config files. 10/01/2009 - 192200 Mark Ellis ------------------------------ 0.13 release 06/02/2009 - 162700 Mark Ellis ------------------------------ Add namespace identifier to Sensitivity in event-from-airsync.xsl, this item was being ignored. 20/03/2009 - 162700 Mark Ellis ------------------------------ Changed longname of plugin to clarify this is for Windows Mobile 5 and later. 26/03/2009 - 191400 Mark Ellis ------------------------------ Pass None as device name argument to new RAPISession constructor. 03/04/2009 - 123400 Mark Ellis ------------------------------ For device connected through hal, use iface_address property to create RRASession only listening on our interface. 09/04/2009 - 202900 John Carr ------------------------------ Commit patch from Pawel Kot (via AdamW). Fixes some issues when syncing from WM to places other than Evolution (e.g. nokia <-> wm). This has been in Mandriva for a while without problems. 10/04/2009 - 150600 Mark Ellis ------------------------------ Get interface ip for RRASession from RAPISession. 14/04/2009 - 122700 Mark Ellis ------------------------------ For changes in pyrra, mostly throwing exceptions on errors. 10/07/2009 - 121100 Mark Ellis ------------------------------ Convert tests to python unittest framework, many thanks to Aurelien Bompard for this. Tests can now be run using python-nose, with "nosetests -v tests". 16/07/2009 - 214900 Mark Ellis ------------------------------ 0.14 release