<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.meego.com/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.meego.com/index.php?title=Special:Contributions/Pohly&amp;feed=atom&amp;limit=50&amp;target=Pohly&amp;year=&amp;month=</id>
		<title>MeeGo wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.meego.com/index.php?title=Special:Contributions/Pohly&amp;feed=atom&amp;limit=50&amp;target=Pohly&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Special:Contributions/Pohly"/>
		<updated>2013-05-20T21:17:48Z</updated>
		<subtitle>From MeeGo wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements</id>
		<title>Architecture/planning/evolution-data-server/eds-improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements"/>
				<updated>2011-06-08T14:29:35Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Asynchronous API for storing items in libecal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes improvements that are desirable or even essential for good performance of Evolution Data Server (EDS) as PIM storage in MeeGo.&lt;br /&gt;
&lt;br /&gt;
All of these changes should be developed for the EDS master branch, reviewed by upstream maintainers and then back-ported to EDS 2.32, the version in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Change Tracking ==&lt;br /&gt;
&lt;br /&gt;
EDS is based on the model/view/controller principle: an application opens a database (calendar or addressbook) and requests a view with server-side filtering, then the application is sent:&lt;br /&gt;
# all data covered by the view&lt;br /&gt;
# the &amp;quot;all data sent&amp;quot; signal&lt;br /&gt;
# changes (add/update/remove) while the view exists&lt;br /&gt;
&lt;br /&gt;
Applications modify data with asynchronous requests (controller) and keep showing the old data until the change notification comes in. The exact changes made to the data are determined by the server (for example when meeting invitations are sent).&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore do not have such a strict model. With QtContacts the app simply loads and stores contacts and is responsible for maintaining its own view. Changes are sent for changes made after the database was opened. KCalCore is based on the concept of loading a calendar (partially) into the client, modifying it there, then writing it back. Changes are also sent while the storage is open.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* https://bugs.meego.com/show_bug.cgi?id=18760 - &amp;quot;QtContacts-EDS + EDS: more flexible EBookView (UID only, only future changes)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Suppress Unnecessary Data Transfer ===&lt;br /&gt;
&lt;br /&gt;
EDS currently sends all data when a view is requested, which is unnecessary when the client is only interested in change notifications. An extension to the EDS query language could optionally suppresses that sending of existing data when the view is opened, to be implemented only for the local contacts and calendar backends. This would allow easier integration with the QContact API.&lt;br /&gt;
&lt;br /&gt;
The Fremantle EDS fork also had a “freezable” (static) capability for libebook, which should probably be investigated. See, for instance: http://maemo.org/api_refs/5.0/5.0-final/libebook/EBookView.html#e-book-view-set-freezable &lt;br /&gt;
&lt;br /&gt;
One possibility for adding the flag is to (ab)use the existing query language with a match for special fields:&lt;br /&gt;
* in the client: query = e_book_query_orv(e_book_query_field_exists(&amp;quot;X-EDS-QUERY-FLAG-SKIP-DATA-DUMP&amp;quot;), &amp;lt;real query&amp;gt;, NULL);&lt;br /&gt;
* in the server: &amp;quot;if (query is OR-Query and first clause is exists(&amp;quot;X-EDS-QUERY-FLAG-SKIP-DATA-DUMP&amp;quot;)) { skip_data_dump = TRUE; query = second clause; }&lt;br /&gt;
&lt;br /&gt;
=== Return UIDs Only ===&lt;br /&gt;
&lt;br /&gt;
The e_book_get_book_view() function takes a list of requested fields, to avoid returning unnecessary data, but this is apparently ignored for the local contacts backend. It would anyway require extra parsing and generation of smaller VCards, losing some possible advantages from delayed parsing of VCards.&lt;br /&gt;
&lt;br /&gt;
However, the UID is already stored separately for use as the primary key of the BDB database, so it would be worthwhile to support that particular requested field. This would allow easier integration with the QContact API. It would also offer much better performance in cases where the client already has the data but just wants to discover what subset of that data meets a certain criteria.&lt;br /&gt;
&lt;br /&gt;
Chris discovered a dedicated API for this in the Fremantle EDS fork. The new API call was accepted upstream and [https://bugzilla.gnome.org/show_bug.cgi?id=651446#c11 backported as a patch] (used in the Meego package) for the gnome-2-32, so no further work is needed?&lt;br /&gt;
&lt;br /&gt;
== Optional Parsing of ebook Data in Client ==&lt;br /&gt;
&lt;br /&gt;
The EDS client-side APIs currently parse and (temporarily) store the parsed details of VCards. However, this is often unnecessary because APIs such as e_book_get_book_view() cause it to return the whole VCard anyway. There will be some performance gain from delaying VCard parsing until it is really needed by calls to functions such as e_contact_new_from_vcard(). &lt;br /&gt;
&lt;br /&gt;
libebook provides different functionality:&lt;br /&gt;
# exchange data as vCard with EDS daemon&lt;br /&gt;
# parse items and wrap them in a C API&lt;br /&gt;
&lt;br /&gt;
QtContacts replaces the second part. An obvious performance improvement is to only do the second part if the additional C APIs are really called. The following calls then transfer data without any additional parsing in libebook:&lt;br /&gt;
* e_book_get_contact()/asynchronous read/view + e_vcard_to_string()&lt;br /&gt;
* e_contact_new_from_vcard() + e_book_add_contact()/e_book_commit_contact()/asynchronous storing&lt;br /&gt;
&lt;br /&gt;
Note that libecal (for iCalendar) can already do this, though libebook can't yet.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# add delayed parsing to libebook, triggered by API call which needs parsed data&lt;br /&gt;
&lt;br /&gt;
PROBLEM:&lt;br /&gt;
# If delayed parsing fails, how can error be reported?&lt;br /&gt;
# Should delayed parsing be done always (e_vcard_to_string())) or only if requested? How would that be configured by a libebook user?&lt;br /&gt;
&lt;br /&gt;
An existing (and in use) [http://build.meego.com/package/view_file?file=EBookView-Implement-delayed-vcard-parsing.patch&amp;amp;package=evolution-data-server&amp;amp;project=eds&amp;amp;srcmd5=977d2b885bed818cb616599749407e79 patch] might partly implement this already.&lt;br /&gt;
&lt;br /&gt;
== Asynchronous API for storing items in libecal ==&lt;br /&gt;
&lt;br /&gt;
libecal should allow the caller to request storing of data without blocking on processing of the data. It should notify the caller when the data has been stored, or when processing has failed.&lt;br /&gt;
&lt;br /&gt;
These functions may require async versions:&lt;br /&gt;
* icalcomponent_new_from_string()&lt;br /&gt;
* e_cal_modify_object[_with_mod]&lt;br /&gt;
* e_cal_create_object()&lt;br /&gt;
&lt;br /&gt;
Making libical asynchronous is almost impossible without going multithreaded. Let's focus on e_cal D-Bus communication first.&lt;br /&gt;
&lt;br /&gt;
Rob started some work on this in the rbradford-wip-ecal-async-api branch. Perhaps you can reuse some of that work. It is not functional, but might be a source of inspiration or code fragments.&lt;br /&gt;
&lt;br /&gt;
== More Efficient Access to Meta Data for Change Tracking ==&lt;br /&gt;
&lt;br /&gt;
This was discussed a while ago: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html &lt;br /&gt;
[Evolution-hackers] concurrent modifications of items in GUI and EDS database]]&lt;br /&gt;
&lt;br /&gt;
Data synchronization only needs to know which items exist (list of local IDs) and which revision of each item is currently stored. Revisions can be identified with a string which changes for each modification. Restoring an older revision should (but doesn't have to) restore the revision string.&lt;br /&gt;
&lt;br /&gt;
For calendar, UID+RECURRENCE-ID and LAST-MODIFIED can be used. For contacts, UID + REV.&lt;br /&gt;
&lt;br /&gt;
By comparing a stored list against the current one, changes can be detected without relying on journals in the daemon or comparison of time stamps. Journals are hard to maintain (how many of them, how long?). Comparison of time stamps has problems when changes are allowed while a sync runs and assumes that system time is linear (which is not always true).&lt;br /&gt;
&lt;br /&gt;
As an additional use case, local ID + revision string could be used to prevent overwriting stale data in the server, as in HTTP PUT eTag checks.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
The Maemo Fremantle port of EDS, which is of course already open source, apparently has some solution for this, according to Mathias Hasselman, so that should be investigated first.&lt;br /&gt;
&lt;br /&gt;
However, this should probably be made possible by:&lt;br /&gt;
&lt;br /&gt;
# Extending the EDS query language with a flag that limits the delivered data to just:&lt;br /&gt;
## UID and REV for libebook (REV is in VCard 3.0)&lt;br /&gt;
## UID+RECURRENCE-ID+LAST-MODIFIED, for libecal &lt;br /&gt;
# Implementing these queries for the local contact and calendar backends. The query would be rejected, with an error, for other backends.&lt;br /&gt;
&lt;br /&gt;
== Atomic Updates ==&lt;br /&gt;
&lt;br /&gt;
Later, implement atomic changes as discussed in the mail thread: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html&lt;br /&gt;
&lt;br /&gt;
== Quick check for &amp;quot;data changed&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
The libebook and libical APIs should offer a way to discover if any data whatsoever has changed. This would, for instance, help SyncEvolution to avoid unnecessary detailed checking. This could just check the modification dates of local storage files, such as the BDB .db file, or .ics file, as long as we do not use those files to store permanent caches of parsed data. This would be much quicker than listing items for the whole database and comparing their revisions strings, as is currently necessary.&lt;br /&gt;
&lt;br /&gt;
This would require small API additions, to check that the opaque revision strings are unchanged, such as&lt;br /&gt;
&lt;br /&gt;
 gchar* e_book_get_revision(EBook *book)&lt;br /&gt;
 gboolean e_book_check_revision(EBook *book , const gchar* revision)&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
 gchar* e_cal_get_revision(ECal *ecal)&lt;br /&gt;
 gboolean e_cal_check_revision(ECal ecal, const gchar revision)&lt;br /&gt;
&lt;br /&gt;
The semantic would be this:&lt;br /&gt;
* If the revision string is empty or different, then the content of the database '''might''' have changed. A more detailed check is necessary to determine if it has really changed. This will be the case for non-local storage.&lt;br /&gt;
* If it is non-empty and the same as before, the nothing has changed. No further check will be necessary.&lt;br /&gt;
&lt;br /&gt;
== Contacts: Store PHOTO Data as Plain Files ==&lt;br /&gt;
&lt;br /&gt;
Photos should be transferred over D-Bus via a filepath to a local file rather than transferring the actual photo data over D-Bus. The VCard format already allows this option (See the PHOTO property). We must be careful to keep these local files in sync and to remove them when contacts are removed, and to restrict access to the files from other processes. &lt;br /&gt;
&lt;br /&gt;
There should be utility code available to libebook users to convert between the different representations.&lt;br /&gt;
&lt;br /&gt;
Goals:&lt;br /&gt;
# Apps should be able to create photo files without ever passing the data to libebook.&lt;br /&gt;
# External PHOTO file and corresponding contact must be kept in sync:&lt;br /&gt;
** If a contact is deleted, the photo also needs to be removed.&lt;br /&gt;
** If a photo file is created and then storing the contact fails, who removes the file?&lt;br /&gt;
# Access to photo data must be limited to processes which have the right permissions.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* For each ~/.local/share/evolution/foo calendar, store photos in &amp;lt;photo path&amp;gt;=~/.local/share/evolution/foo/photos, with same permissions.&lt;br /&gt;
* New photo files are created with a [http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] as base name and suffix according to the file content.&lt;br /&gt;
* If a contact is deleted and has a PHOTO;VALUE=uri:file://&amp;lt;photo path&amp;gt;/*, delete that file.&lt;br /&gt;
* For apps which want to create the photo file directly:&lt;br /&gt;
** Apps get a file descriptor and the path from a new libebook API.&lt;br /&gt;
** They own the file until the EDS server acknowledges the successful storing of a contact with a matching PHOTO;VALUE=uri:file property. If that fails, the app must remove the file.&lt;br /&gt;
* Add new API calls to libebook which split out resp. include data inline.&lt;br /&gt;
** Must track ownership of file after splitting it out and before storing - might never get stored!&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
* Should there be automatic garbage collection of stale photos in case something went wrong and a photo wasn't properly deleted?&lt;br /&gt;
* Trust TYPE=JPEG/PNG/... or look into file content to determine type?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Future: Content Protection ==&lt;br /&gt;
&lt;br /&gt;
Only authorized applications (= processes) with the necessary permissions should be able to read/write data. Exact permissions and mechanisms for verifying them to be defined as part of the (revised?) MeeGo architecture.&lt;br /&gt;
&lt;br /&gt;
This can be added as follows:&lt;br /&gt;
# lock down file permissions&lt;br /&gt;
# add permission checks to EDS D-Bus servers&lt;br /&gt;
&lt;br /&gt;
Currently not planned. Depends on the future MeeGo security infrastructure.&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements</id>
		<title>Architecture/planning/evolution-data-server/eds-improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements"/>
				<updated>2011-06-08T14:24:56Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Change Tracking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes improvements that are desirable or even essential for good performance of Evolution Data Server (EDS) as PIM storage in MeeGo.&lt;br /&gt;
&lt;br /&gt;
All of these changes should be developed for the EDS master branch, reviewed by upstream maintainers and then back-ported to EDS 2.32, the version in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Change Tracking ==&lt;br /&gt;
&lt;br /&gt;
EDS is based on the model/view/controller principle: an application opens a database (calendar or addressbook) and requests a view with server-side filtering, then the application is sent:&lt;br /&gt;
# all data covered by the view&lt;br /&gt;
# the &amp;quot;all data sent&amp;quot; signal&lt;br /&gt;
# changes (add/update/remove) while the view exists&lt;br /&gt;
&lt;br /&gt;
Applications modify data with asynchronous requests (controller) and keep showing the old data until the change notification comes in. The exact changes made to the data are determined by the server (for example when meeting invitations are sent).&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore do not have such a strict model. With QtContacts the app simply loads and stores contacts and is responsible for maintaining its own view. Changes are sent for changes made after the database was opened. KCalCore is based on the concept of loading a calendar (partially) into the client, modifying it there, then writing it back. Changes are also sent while the storage is open.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* https://bugs.meego.com/show_bug.cgi?id=18760 - &amp;quot;QtContacts-EDS + EDS: more flexible EBookView (UID only, only future changes)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Suppress Unnecessary Data Transfer ===&lt;br /&gt;
&lt;br /&gt;
EDS currently sends all data when a view is requested, which is unnecessary when the client is only interested in change notifications. An extension to the EDS query language could optionally suppresses that sending of existing data when the view is opened, to be implemented only for the local contacts and calendar backends. This would allow easier integration with the QContact API.&lt;br /&gt;
&lt;br /&gt;
The Fremantle EDS fork also had a “freezable” (static) capability for libebook, which should probably be investigated. See, for instance: http://maemo.org/api_refs/5.0/5.0-final/libebook/EBookView.html#e-book-view-set-freezable &lt;br /&gt;
&lt;br /&gt;
One possibility for adding the flag is to (ab)use the existing query language with a match for special fields:&lt;br /&gt;
* in the client: query = e_book_query_orv(e_book_query_field_exists(&amp;quot;X-EDS-QUERY-FLAG-SKIP-DATA-DUMP&amp;quot;), &amp;lt;real query&amp;gt;, NULL);&lt;br /&gt;
* in the server: &amp;quot;if (query is OR-Query and first clause is exists(&amp;quot;X-EDS-QUERY-FLAG-SKIP-DATA-DUMP&amp;quot;)) { skip_data_dump = TRUE; query = second clause; }&lt;br /&gt;
&lt;br /&gt;
=== Return UIDs Only ===&lt;br /&gt;
&lt;br /&gt;
The e_book_get_book_view() function takes a list of requested fields, to avoid returning unnecessary data, but this is apparently ignored for the local contacts backend. It would anyway require extra parsing and generation of smaller VCards, losing some possible advantages from delayed parsing of VCards.&lt;br /&gt;
&lt;br /&gt;
However, the UID is already stored separately for use as the primary key of the BDB database, so it would be worthwhile to support that particular requested field. This would allow easier integration with the QContact API. It would also offer much better performance in cases where the client already has the data but just wants to discover what subset of that data meets a certain criteria.&lt;br /&gt;
&lt;br /&gt;
Chris discovered a dedicated API for this in the Fremantle EDS fork. The new API call was accepted upstream and [https://bugzilla.gnome.org/show_bug.cgi?id=651446#c11 backported as a patch] (used in the Meego package) for the gnome-2-32, so no further work is needed?&lt;br /&gt;
&lt;br /&gt;
== Optional Parsing of ebook Data in Client ==&lt;br /&gt;
&lt;br /&gt;
The EDS client-side APIs currently parse and (temporarily) store the parsed details of VCards. However, this is often unnecessary because APIs such as e_book_get_book_view() cause it to return the whole VCard anyway. There will be some performance gain from delaying VCard parsing until it is really needed by calls to functions such as e_contact_new_from_vcard(). &lt;br /&gt;
&lt;br /&gt;
libebook provides different functionality:&lt;br /&gt;
# exchange data as vCard with EDS daemon&lt;br /&gt;
# parse items and wrap them in a C API&lt;br /&gt;
&lt;br /&gt;
QtContacts replaces the second part. An obvious performance improvement is to only do the second part if the additional C APIs are really called. The following calls then transfer data without any additional parsing in libebook:&lt;br /&gt;
* e_book_get_contact()/asynchronous read/view + e_vcard_to_string()&lt;br /&gt;
* e_contact_new_from_vcard() + e_book_add_contact()/e_book_commit_contact()/asynchronous storing&lt;br /&gt;
&lt;br /&gt;
Note that libecal (for iCalendar) can already do this, though libebook can't yet.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# add delayed parsing to libebook, triggered by API call which needs parsed data&lt;br /&gt;
&lt;br /&gt;
PROBLEM:&lt;br /&gt;
# If delayed parsing fails, how can error be reported?&lt;br /&gt;
# Should delayed parsing be done always (e_vcard_to_string())) or only if requested? How would that be configured by a libebook user?&lt;br /&gt;
&lt;br /&gt;
An existing (and in use) [http://build.meego.com/package/view_file?file=EBookView-Implement-delayed-vcard-parsing.patch&amp;amp;package=evolution-data-server&amp;amp;project=eds&amp;amp;srcmd5=977d2b885bed818cb616599749407e79 patch] might partly implement this already.&lt;br /&gt;
&lt;br /&gt;
== Asynchronous API for storing items in libecal ==&lt;br /&gt;
&lt;br /&gt;
libecal should allow the caller to request storing of data without blocking on processing of the data. It should notify the caller when the data has been stored, or when processing has failed.&lt;br /&gt;
&lt;br /&gt;
These functions may require async versions:&lt;br /&gt;
* icalcomponent_new_from_string()&lt;br /&gt;
* e_cal_modify_object[_with_mod]&lt;br /&gt;
* e_cal_create_object()&lt;br /&gt;
&lt;br /&gt;
== More Efficient Access to Meta Data for Change Tracking ==&lt;br /&gt;
&lt;br /&gt;
This was discussed a while ago: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html &lt;br /&gt;
[Evolution-hackers] concurrent modifications of items in GUI and EDS database]]&lt;br /&gt;
&lt;br /&gt;
Data synchronization only needs to know which items exist (list of local IDs) and which revision of each item is currently stored. Revisions can be identified with a string which changes for each modification. Restoring an older revision should (but doesn't have to) restore the revision string.&lt;br /&gt;
&lt;br /&gt;
For calendar, UID+RECURRENCE-ID and LAST-MODIFIED can be used. For contacts, UID + REV.&lt;br /&gt;
&lt;br /&gt;
By comparing a stored list against the current one, changes can be detected without relying on journals in the daemon or comparison of time stamps. Journals are hard to maintain (how many of them, how long?). Comparison of time stamps has problems when changes are allowed while a sync runs and assumes that system time is linear (which is not always true).&lt;br /&gt;
&lt;br /&gt;
As an additional use case, local ID + revision string could be used to prevent overwriting stale data in the server, as in HTTP PUT eTag checks.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
The Maemo Fremantle port of EDS, which is of course already open source, apparently has some solution for this, according to Mathias Hasselman, so that should be investigated first.&lt;br /&gt;
&lt;br /&gt;
However, this should probably be made possible by:&lt;br /&gt;
&lt;br /&gt;
# Extending the EDS query language with a flag that limits the delivered data to just:&lt;br /&gt;
## UID and REV for libebook (REV is in VCard 3.0)&lt;br /&gt;
## UID+RECURRENCE-ID+LAST-MODIFIED, for libecal &lt;br /&gt;
# Implementing these queries for the local contact and calendar backends. The query would be rejected, with an error, for other backends.&lt;br /&gt;
&lt;br /&gt;
== Atomic Updates ==&lt;br /&gt;
&lt;br /&gt;
Later, implement atomic changes as discussed in the mail thread: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html&lt;br /&gt;
&lt;br /&gt;
== Quick check for &amp;quot;data changed&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
The libebook and libical APIs should offer a way to discover if any data whatsoever has changed. This would, for instance, help SyncEvolution to avoid unnecessary detailed checking. This could just check the modification dates of local storage files, such as the BDB .db file, or .ics file, as long as we do not use those files to store permanent caches of parsed data. This would be much quicker than listing items for the whole database and comparing their revisions strings, as is currently necessary.&lt;br /&gt;
&lt;br /&gt;
This would require small API additions, to check that the opaque revision strings are unchanged, such as&lt;br /&gt;
&lt;br /&gt;
 gchar* e_book_get_revision(EBook *book)&lt;br /&gt;
 gboolean e_book_check_revision(EBook *book , const gchar* revision)&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
 gchar* e_cal_get_revision(ECal *ecal)&lt;br /&gt;
 gboolean e_cal_check_revision(ECal ecal, const gchar revision)&lt;br /&gt;
&lt;br /&gt;
The semantic would be this:&lt;br /&gt;
* If the revision string is empty or different, then the content of the database '''might''' have changed. A more detailed check is necessary to determine if it has really changed. This will be the case for non-local storage.&lt;br /&gt;
* If it is non-empty and the same as before, the nothing has changed. No further check will be necessary.&lt;br /&gt;
&lt;br /&gt;
== Contacts: Store PHOTO Data as Plain Files ==&lt;br /&gt;
&lt;br /&gt;
Photos should be transferred over D-Bus via a filepath to a local file rather than transferring the actual photo data over D-Bus. The VCard format already allows this option (See the PHOTO property). We must be careful to keep these local files in sync and to remove them when contacts are removed, and to restrict access to the files from other processes. &lt;br /&gt;
&lt;br /&gt;
There should be utility code available to libebook users to convert between the different representations.&lt;br /&gt;
&lt;br /&gt;
Goals:&lt;br /&gt;
# Apps should be able to create photo files without ever passing the data to libebook.&lt;br /&gt;
# External PHOTO file and corresponding contact must be kept in sync:&lt;br /&gt;
** If a contact is deleted, the photo also needs to be removed.&lt;br /&gt;
** If a photo file is created and then storing the contact fails, who removes the file?&lt;br /&gt;
# Access to photo data must be limited to processes which have the right permissions.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* For each ~/.local/share/evolution/foo calendar, store photos in &amp;lt;photo path&amp;gt;=~/.local/share/evolution/foo/photos, with same permissions.&lt;br /&gt;
* New photo files are created with a [http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] as base name and suffix according to the file content.&lt;br /&gt;
* If a contact is deleted and has a PHOTO;VALUE=uri:file://&amp;lt;photo path&amp;gt;/*, delete that file.&lt;br /&gt;
* For apps which want to create the photo file directly:&lt;br /&gt;
** Apps get a file descriptor and the path from a new libebook API.&lt;br /&gt;
** They own the file until the EDS server acknowledges the successful storing of a contact with a matching PHOTO;VALUE=uri:file property. If that fails, the app must remove the file.&lt;br /&gt;
* Add new API calls to libebook which split out resp. include data inline.&lt;br /&gt;
** Must track ownership of file after splitting it out and before storing - might never get stored!&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
* Should there be automatic garbage collection of stale photos in case something went wrong and a photo wasn't properly deleted?&lt;br /&gt;
* Trust TYPE=JPEG/PNG/... or look into file content to determine type?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Future: Content Protection ==&lt;br /&gt;
&lt;br /&gt;
Only authorized applications (= processes) with the necessary permissions should be able to read/write data. Exact permissions and mechanisms for verifying them to be defined as part of the (revised?) MeeGo architecture.&lt;br /&gt;
&lt;br /&gt;
This can be added as follows:&lt;br /&gt;
# lock down file permissions&lt;br /&gt;
# add permission checks to EDS D-Bus servers&lt;br /&gt;
&lt;br /&gt;
Currently not planned. Depends on the future MeeGo security infrastructure.&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements</id>
		<title>Architecture/planning/evolution-data-server/eds-improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements"/>
				<updated>2011-06-08T10:49:39Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes improvements that are desirable or even essential for good performance of Evolution Data Server (EDS) as PIM storage in MeeGo.&lt;br /&gt;
&lt;br /&gt;
All of these changes should be developed for the EDS master branch, reviewed by upstream maintainers and then back-ported to EDS 2.32, the version in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Future: Content Protection ==&lt;br /&gt;
&lt;br /&gt;
Only authorized applications (= processes) with the necessary permissions should be able to read/write data. Exact permissions and mechanisms for verifying them to be defined as part of the (revised?) MeeGo architecture.&lt;br /&gt;
&lt;br /&gt;
This can be added as follows:&lt;br /&gt;
# lock down file permissions&lt;br /&gt;
# add permission checks to EDS D-Bus servers&lt;br /&gt;
&lt;br /&gt;
Currently not planned. Depends on the future MeeGo security infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Change Tracking ==&lt;br /&gt;
&lt;br /&gt;
EDS is based on the model/view/controller principle: an application opens a database (calendar or addressbook) and requests a view with server-side filtering, then the application is sent:&lt;br /&gt;
# all data covered by the view&lt;br /&gt;
# the &amp;quot;all data sent&amp;quot; signal&lt;br /&gt;
# changes (add/update/remove) while the view exists&lt;br /&gt;
&lt;br /&gt;
Applications modify data with asynchronous requests (controller) and keep showing the old data until the change notification comes in. The exact changes made to the data are determined by the server (for example when meeting invitations are sent).&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore do not have such a strict model. With QtContacts the app simply loads and stores contacts and is responsible for maintaining its own view. Changes are sent for changes made after the database was opened. KCalCore is based on the concept of loading a calendar (partially) into the client, modifying it there, then writing it back. Changes are also sent while the storage is open.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
=== Suppress Unnecessary Data Transfer ===&lt;br /&gt;
&lt;br /&gt;
EDS currently sends all data when a view is requested, which is unnecessary when the client is only interested in change notifications. An extension to the EDS query language could optionally suppresses that sending of existing data when the view is opened, to be implemented only for the local contacts and calendar backends. This would allow easier integration with the QContact API.&lt;br /&gt;
&lt;br /&gt;
The Fremantle EDS fork also had a “freezable” (static) capability for libebook, which should probably be investigated. See, for instance: http://maemo.org/api_refs/5.0/5.0-final/libebook/EBookView.html#e-book-view-set-freezable &lt;br /&gt;
&lt;br /&gt;
One possibility for adding the flag is to (ab)use the existing query language with a match for special fields:&lt;br /&gt;
* in the client: query = e_book_query_orv(e_book_query_field_exists(&amp;quot;X-EDS-QUERY-FLAG-SKIP-DATA-DUMP&amp;quot;), &amp;lt;real query&amp;gt;, NULL);&lt;br /&gt;
* in the server: &amp;quot;if (query is OR-Query and first clause is exists(&amp;quot;X-EDS-QUERY-FLAG-SKIP-DATA-DUMP&amp;quot;)) { skip_data_dump = TRUE; query = second clause; }&lt;br /&gt;
&lt;br /&gt;
=== Return UIDs Only ===&lt;br /&gt;
&lt;br /&gt;
The e_book_get_book_view() function takes a list of requested fields, to avoid returning unnecessary data, but this is apparently ignored for the local contacts backend. It would anyway require extra parsing and generation of smaller VCards, losing some possible advantages from delayed parsing of VCards.&lt;br /&gt;
&lt;br /&gt;
However, the UID is already stored separately for use as the primary key of the BDB database, so it would be worthwhile to support that particular requested field. This would allow easier integration with the QContact API. It would also offer much better performance in cases where the client already has the data but just wants to discover what subset of that data meets a certain criteria.&lt;br /&gt;
&lt;br /&gt;
Chris discovered a dedicated API for this in the Fremantle EDS fork. The new API call was accepted upstream and backported to gnome-2-32, so no further work is needed?&lt;br /&gt;
&lt;br /&gt;
== Optional Parsing of ebook Data in Client ==&lt;br /&gt;
&lt;br /&gt;
libebook provides different functionality:&lt;br /&gt;
# exchange data as vCard with EDS daemon&lt;br /&gt;
# parse items and wrap them in a C API&lt;br /&gt;
&lt;br /&gt;
QtContacts replaces the second part. An obvious performance improvement is to only do the second part if the additional C APIs are really called. The following calls then transfer data without any additional parsing in libebook:&lt;br /&gt;
* e_book_get_contact()/asynchronous read/view + e_vcard_to_string()&lt;br /&gt;
* e_contact_new_from_vcard() + e_book_add_contact()/e_book_commit_contact()/asynchronous storing&lt;br /&gt;
&lt;br /&gt;
Note that libecal (for iCalendar) can already do this, though libebook can't yet.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# add delayed parsing to libebook, triggered by API call which needs parsed data&lt;br /&gt;
&lt;br /&gt;
PROBLEM:&lt;br /&gt;
# If delayed parsing fails, how can error be reported?&lt;br /&gt;
# Should delayed parsing be done always (e_vcard_to_string())) or only if requested? How would that be configured by a libebook user?&lt;br /&gt;
&lt;br /&gt;
== More Efficient Access to Meta Data for Change Tracking ==&lt;br /&gt;
&lt;br /&gt;
This was discussed a while ago: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html &lt;br /&gt;
[Evolution-hackers] concurrent modifications of items in GUI and EDS database]]&lt;br /&gt;
&lt;br /&gt;
Data synchronization only needs to know which items exist (list of local IDs) and which revision of each item is currently stored. Revisions can be identified with a string which changes for each modification. Restoring an older revision should (but doesn't have to) restore the revision string.&lt;br /&gt;
&lt;br /&gt;
For calendar, UID+RECURRENCE-ID and LAST-MODIFIED can be used. For contacts, UID + REV.&lt;br /&gt;
&lt;br /&gt;
By comparing a stored list against the current one, changes can be detected without relying on journals in the daemon or comparison of time stamps. Journals are hard to maintain (how many of them, how long?). Comparison of time stamps has problems when changes are allowed while a sync runs and assumes that system time is linear (which is not always true).&lt;br /&gt;
&lt;br /&gt;
As an additional use case, local ID + revision string could be used to prevent overwriting stale data in the server, as in HTTP PUT eTag checks.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
The Maemo Fremantle port of EDS, which is of course already open source, apparently has some solution for this, according to Mathias Hasselman, so that should be investigated first.&lt;br /&gt;
&lt;br /&gt;
However, this should probably be made possible by:&lt;br /&gt;
&lt;br /&gt;
# Extending the EDS query language with a flag that limits the delivered data to just:&lt;br /&gt;
## UID and REV for libebook (REV is in VCard 3.0)&lt;br /&gt;
## UID+RECURRENCE-ID+LAST-MODIFIED, for libecal &lt;br /&gt;
# Implementing these queries for the local contact and calendar backends. The query would be rejected, with an error, for other backends.&lt;br /&gt;
&lt;br /&gt;
== Atomic Updates ==&lt;br /&gt;
&lt;br /&gt;
Later, implement atomic changes as discussed in the mail thread: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html&lt;br /&gt;
&lt;br /&gt;
== Quick check for &amp;quot;data changed&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
The libebook and libical APIs should offer a way to discover if any data whatsoever has changed. This would, for instance, help SyncEvolution to avoid unnecessary detailed checking. This could just check the modification dates of local storage files, such as the BDB .db file, or .ics file, as long as we do not use those files to store permanent caches of parsed data. This would be much quicker than listing items for the whole database and comparing their revisions strings, as is currently necessary.&lt;br /&gt;
&lt;br /&gt;
This would require small API additions, to check that the opaque revision strings are unchanged, such as&lt;br /&gt;
&lt;br /&gt;
 gchar* e_book_get_revision(EBook *book)&lt;br /&gt;
 gboolean e_book_check_revision(EBook *book , const gchar* revision)&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
 gchar* e_cal_get_revision(ECal *ecal)&lt;br /&gt;
 gboolean e_cal_check_revision(ECal ecal, const gchar revision)&lt;br /&gt;
&lt;br /&gt;
The semantic would be this:&lt;br /&gt;
* If the revision string is empty or different, then the content of the database '''might''' have changed. A more detailed check is necessary to determine if it has really changed. This will be the case for non-local storage.&lt;br /&gt;
* If it is non-empty and the same as before, the nothing has changed. No further check will be necessary.&lt;br /&gt;
&lt;br /&gt;
== Contacts: Store PHOTO Data as Plain Files ==&lt;br /&gt;
&lt;br /&gt;
Photos should be transferred over D-Bus via a filepath to a local file rather than transferring the actual photo data over D-Bus. The VCard format already allows this option (See the PHOTO property). We must be careful to keep these local files in sync and to remove them when contacts are removed, and to restrict access to the files from other processes. &lt;br /&gt;
&lt;br /&gt;
There should be utility code available to libebook users to convert between the different representations.&lt;br /&gt;
&lt;br /&gt;
Goals:&lt;br /&gt;
# Apps should be able to create photo files without ever passing the data to libebook.&lt;br /&gt;
# External PHOTO file and corresponding contact must be kept in sync:&lt;br /&gt;
** If a contact is deleted, the photo also needs to be removed.&lt;br /&gt;
** If a photo file is created and then storing the contact fails, who removes the file?&lt;br /&gt;
# Access to photo data must be limited to processes which have the right permissions.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* For each ~/.local/share/evolution/foo calendar, store photos in &amp;lt;photo path&amp;gt;=~/.local/share/evolution/foo/photos, with same permissions.&lt;br /&gt;
* New photo files are created with a [http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] as base name and suffix according to the file content.&lt;br /&gt;
* If a contact is deleted and has a PHOTO;VALUE=uri:file://&amp;lt;photo path&amp;gt;/*, delete that file.&lt;br /&gt;
* For apps which want to create the photo file directly:&lt;br /&gt;
** Apps get a file descriptor and the path from a new libebook API.&lt;br /&gt;
** They own the file until the EDS server acknowledges the successful storing of a contact with a matching PHOTO;VALUE=uri:file property. If that fails, the app must remove the file.&lt;br /&gt;
* Add new API calls to libebook which split out resp. include data inline.&lt;br /&gt;
** Must track ownership of file after splitting it out and before storing - might never get stored!&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
* Should there be automatic garbage collection of stale photos in case something went wrong and a photo wasn't properly deleted?&lt;br /&gt;
* Trust TYPE=JPEG/PNG/... or look into file content to determine type?&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-30T18:48:13Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Contact Storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
[[File:Qtcontacts-kcal-eds.png]]&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (MeeGo) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + KCalCore (KDE-compatible) + [[/KCal-EDS/]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd()), with those changes that are necessary to run in MeeGo (embedded KDateTime, timed integration)&lt;br /&gt;
* write [[/KCal-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (mapping to storage, searching) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS]] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com Kaitlin Rupert]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging (API) + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtMessaging (API) + QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/email-design|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps and QtMobility/QtMessaging requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
Some possible variations of plan A:&lt;br /&gt;
* rewrite mail app and QtMobility/QtMessaging to use Camel daemon via D-Bus&lt;br /&gt;
* QMF (source code) compatible replacement, used by mail app and Messaging (proposal above)&lt;br /&gt;
* rewrite mail app to use Messaging, rewrite Messaging to use Camel via D-Bus&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:Qtcontacts-kcal-eds.png</id>
		<title>File:Qtcontacts-kcal-eds.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:Qtcontacts-kcal-eds.png"/>
				<updated>2011-04-21T13:34:34Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-21T13:32:15Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
[[File:Qtcontacts-kcal-eds.png]]&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (MeeGo) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + KCalCore (KDE-compatible) + [[/KCal-EDS/]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd()), with those changes that are necessary to run in MeeGo (embedded KDateTime, timed integration)&lt;br /&gt;
* write [[/KCal-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS]] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging (API) + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtMessaging (API) + QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/email-design|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps and QtMobility/QtMessaging requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
Some possible variations of plan A:&lt;br /&gt;
* rewrite mail app and QtMobility/QtMessaging to use Camel daemon via D-Bus&lt;br /&gt;
* QMF (source code) compatible replacement, used by mail app and Messaging (proposal above)&lt;br /&gt;
* rewrite mail app to use Messaging, rewrite Messaging to use Camel via D-Bus&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-21T13:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
[[File:qtcontacts-kcal-eds.png]]&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (MeeGo) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + KCalCore (KDE-compatible) + [[/KCal-EDS/]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd()), with those changes that are necessary to run in MeeGo (embedded KDateTime, timed integration)&lt;br /&gt;
* write [[/KCal-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS]] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging (API) + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtMessaging (API) + QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/email-design|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps and QtMobility/QtMessaging requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
Some possible variations of plan A:&lt;br /&gt;
* rewrite mail app and QtMobility/QtMessaging to use Camel daemon via D-Bus&lt;br /&gt;
* QMF (source code) compatible replacement, used by mail app and Messaging (proposal above)&lt;br /&gt;
* rewrite mail app to use Messaging, rewrite Messaging to use Camel via D-Bus&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:Qtcontact-kcal-eds.png</id>
		<title>File:Qtcontact-kcal-eds.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:Qtcontact-kcal-eds.png"/>
				<updated>2011-04-21T13:27:15Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-13T07:04:39Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Mail Storage and Transports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (MeeGo) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + KCalCore (KDE-compatible) + [[/KCal-EDS/]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd()), with those changes that are necessary to run in MeeGo (embedded KDateTime, timed integration)&lt;br /&gt;
* write [[/KCal-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS]] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging (API) + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtMessaging (API) + QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/email-design|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps and QtMobility/QtMessaging requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
Some possible variations of plan A:&lt;br /&gt;
* rewrite mail app and QtMobility/QtMessaging to use Camel daemon via D-Bus&lt;br /&gt;
* QMF (source code) compatible replacement, used by mail app and Messaging (proposal above)&lt;br /&gt;
* rewrite mail app to use Messaging, rewrite Messaging to use Camel via D-Bus&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-06T10:56:53Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Calendar Storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (MeeGo) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + KCalCore (KDE-compatible) + [[/KCal-EDS|KCal-EDS]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd()), with those changes that are necessary to run in MeeGo (embedded KDateTime, timed integration)&lt;br /&gt;
* write [[/KCal-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS]] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging (API) + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtMessaging (API) + QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/QMF client lib substitution|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps and QtMobility/QtMessaging requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
Some possible variations of plan A:&lt;br /&gt;
* rewrite mail app and QtMobility/QtMessaging to use Camel daemon via D-Bus&lt;br /&gt;
* QMF (source code) compatible replacement, used by mail app and Messaging (proposal above)&lt;br /&gt;
* rewrite mail app to use Messaging, rewrite Messaging to use Camel via D-Bus&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-06T10:50:44Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Calendar Storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (KDE) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + [[/KCal-EDS|KCal-EDS]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd())&lt;br /&gt;
* write [[/KCal-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS]] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging (API) + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtMessaging (API) + QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/QMF client lib substitution|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps and QtMobility/QtMessaging requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
Some possible variations of plan A:&lt;br /&gt;
* rewrite mail app and QtMobility/QtMessaging to use Camel daemon via D-Bus&lt;br /&gt;
* QMF (source code) compatible replacement, used by mail app and Messaging (proposal above)&lt;br /&gt;
* rewrite mail app to use Messaging, rewrite Messaging to use Camel via D-Bus&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-06T10:49:21Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Contact Storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (KDE) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + [[/KCalCore-EDS]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd())&lt;br /&gt;
* write [[/KCalCore-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS]] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging (API) + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtMessaging (API) + QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/QMF client lib substitution|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps and QtMobility/QtMessaging requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
Some possible variations of plan A:&lt;br /&gt;
* rewrite mail app and QtMobility/QtMessaging to use Camel daemon via D-Bus&lt;br /&gt;
* QMF (source code) compatible replacement, used by mail app and Messaging (proposal above)&lt;br /&gt;
* rewrite mail app to use Messaging, rewrite Messaging to use Camel via D-Bus&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements</id>
		<title>Architecture/planning/evolution-data-server/eds-improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements"/>
				<updated>2011-04-05T09:49:35Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: added ideas for sending only UIDs in contact view and setting EBook query flags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes improvements that are desirable or even essential for good performance of Evolution Data Server (EDS) as PIM storage in MeeGo.&lt;br /&gt;
&lt;br /&gt;
All of these changes should be developed for the EDS master branch, reviewed by upstream maintainers and then back-ported to EDS 2.32, the version in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== content protection ==&lt;br /&gt;
&lt;br /&gt;
Only authorized applications (= processes) with the necessary permissions should be able to read/write data. Exact permissions and mechanisms for verifying them to be defined as part of the (revised?) MeeGo architecture.&lt;br /&gt;
&lt;br /&gt;
This can be added as follows:&lt;br /&gt;
# lock down file permissions&lt;br /&gt;
# add permission checks to EDS D-Bus servers&lt;br /&gt;
&lt;br /&gt;
== change tracking ==&lt;br /&gt;
&lt;br /&gt;
EDS is based on the model/view/controller principle: an app opens a database (calendar or addresbook) and requests a view with server-side filtering, then is sent:&lt;br /&gt;
# all data covered by the view&lt;br /&gt;
# &amp;quot;all data sent&amp;quot; signal&lt;br /&gt;
# changes (add/update/remove) while the view exists&lt;br /&gt;
&lt;br /&gt;
Applications modify data with asynchronous requests (controller) and keep showing the old data until the change notification comes in. The exact changes made to the data are determined by the server (for example when meeting invitations are sent).&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore do not have such a strict model. With QtContacts the app simply loads and stores contacts and is responsible for maintaining its own view. Changes are sent for changes made after the database was opened. KCalCore is based on the concept of loading a calendar (partially) into the client, modifying it there, then writing it back. Changes are also sent while the storage is open.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# extend EDS query language with a flag that suppresses sending existing data when the view is opened&lt;br /&gt;
# implement for local contact and calendar backend, reject with error in others&lt;br /&gt;
# contacts: implement special case where view with &amp;quot;requested_fields = UID&amp;quot; only returns UID&lt;br /&gt;
&lt;br /&gt;
One possibility for adding the flag is to (ab)use the existing query language with a match for special fields:&lt;br /&gt;
* in the client: query = e_book_query_orv(e_book_query_field_exists(&amp;quot;X-EDS-QUERY-FLAG-SKIP-DATA-DUMP&amp;quot;), &amp;lt;real query&amp;gt;, NULL);&lt;br /&gt;
* in the server: &amp;quot;if (query is OR-Query and first clause is exists(&amp;quot;X-EDS-QUERY-FLAG-SKIP-DATA-DUMP&amp;quot;)) { skip_data_dump = TRUE; query = second clause; }&lt;br /&gt;
&lt;br /&gt;
== optional parsing of data in client ==&lt;br /&gt;
&lt;br /&gt;
libebook/ecal provide different functionality:&lt;br /&gt;
# exchange data as vCard/iCalendar with EDS daemon&lt;br /&gt;
# parse items and wrap them in a C API&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore replace the second part. An obvious performance improvement is to only do the second part if the additional C APIs are really called. The following calls then transfer data without any additional parsing in libebook/libecal:&lt;br /&gt;
* e_book_get_contact()/asynchronous read/view + e_vcard_to_string()&lt;br /&gt;
* e_contact_new_from_vcard() + e_book_add_contact()/e_book_commit_contact()/asynchronous storing&lt;br /&gt;
* e_cal_get_object_list_as_comp()/asynchronous read/view + e_cal_get_component_as_string()&lt;br /&gt;
* icalcomponent_new_from_string() + e_cal_modify_object[_with_mod]()/e_cal_create_object()&lt;br /&gt;
* e_cal_get_object_list_as_comp()/e_cal_get_object()/asynchronous view + e_cal_get_component_as_string()&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# add delayed parsing to libebook, triggered by API call which needs parsed data&lt;br /&gt;
# add delayed parsing to libical, again triggered by API call&lt;br /&gt;
&lt;br /&gt;
PROBLEM:&lt;br /&gt;
# If delayed parsing fails, how can error be reported?&lt;br /&gt;
# Should delayed parsing be done always (e_vcard_to_string()/icalcomponent_new_from_string()) or only if requested? How would that be configured by a libebook/libecal user?&lt;br /&gt;
&lt;br /&gt;
== more efficient access to meta data for change tracking + atomic updates ==&lt;br /&gt;
&lt;br /&gt;
This was discussed a while ago: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html &lt;br /&gt;
[Evolution-hackers] concurrent modifications of items in GUI and EDS database]]&lt;br /&gt;
&lt;br /&gt;
Data synchronization only needs to know which items exist (list of local IDs) and which revision of each item is currently stored. Revisions can be identified with a string which changes for each modification. Restoring an older revision should (but doesn't have to) restore the revision string.&lt;br /&gt;
&lt;br /&gt;
For calendar, UID+RECURRENCE-ID and LAST-MODIFIED can be used. For contacts, UID + REV.&lt;br /&gt;
&lt;br /&gt;
By comparing a stored list against the current one, changes can be detected without relying on journals in the daemon or comparison of time stamps. Journals are hard to maintain (how many of them, how long?). Comparison of time stamps has problems when changes are allowed while a sync runs and assumes that system time is linear (which is not always true).&lt;br /&gt;
&lt;br /&gt;
As an additional use case, local ID + revision string could be used to prevent overwriting stale data in the server, as in HTTP PUT eTag checks.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# extend EDS query language with a flag that limits delivered data to just UID+RECURRENCE-ID+LAST-MODIFIED resp. UID+REV&lt;br /&gt;
# implement this query for local contact and calendar storage, reject with error in others&lt;br /&gt;
# later: implement atomic changes as discussed in the mail thread&lt;br /&gt;
&lt;br /&gt;
== quick check for &amp;quot;data changed&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Even quicker than listing items and comparing their revisions strings would be a comparison of a revision string for the whole database. The semantic would be this:&lt;br /&gt;
* If the revision string is empty or different, then the content of the database '''might''' have changed. A more detailed check is necessary to determine that.&lt;br /&gt;
* If it is non-empty and the same as before, nothing has changed. No further check necessary.&lt;br /&gt;
&lt;br /&gt;
The modification time stamp of the .ics or .db files could be used. Probably need a new &amp;quot;query property&amp;quot; API. e_cal_get_static_capability() only returns bool. Same with e_book_get_static_capabilities()/e_book_check_static_capability().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== contacts: store PHOTO data as plain files ==&lt;br /&gt;
&lt;br /&gt;
Transfering PHOTO data over D-Bus as base64 encoded data in each vCard has obvious performance issues. Instead the PHOTO property should be a link to a local file (supported by vCard), with utility code available to libebook users to convert between the different representations.&lt;br /&gt;
&lt;br /&gt;
Goals:&lt;br /&gt;
# Apps should be able to create photo files without ever passing the data to libebook.&lt;br /&gt;
# External PHOTO file and corresponding contact must be kept in sync:&lt;br /&gt;
** If a contact is deleted, the photo also needs to be removed.&lt;br /&gt;
** If a photo file is created and then storing the contact fails, who removes the file?&lt;br /&gt;
# Access to photo data must be limited to processes which have the right permissions.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* For each ~/.local/share/evolution/foo calendar, store photos in &amp;lt;photo path&amp;gt;=~/.local/share/evolution/foo/photos, with same permissions.&lt;br /&gt;
* New photo files are created with a [http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] as base name and suffix according to the file content.&lt;br /&gt;
* If a contact is deleted and has a PHOTO;VALUE=uri:file://&amp;lt;photo path&amp;gt;/*, delete that file.&lt;br /&gt;
* For apps which want to create the photo file directly:&lt;br /&gt;
** Apps get a file descriptor and the path from a new libebook API.&lt;br /&gt;
** They own the file until the EDS server acknowledges the successful storing of a contact with a matching PHOTO;VALUE=uri:file property. If that fails, the app must remove the file.&lt;br /&gt;
* Add new API calls to libebook which split out resp. include data inline.&lt;br /&gt;
** Must track ownership of file after splitting it out and before storing - might never get stored!&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
* Should there be automatic garbage collection of stale photos in case something went wrong and a photo wasn't properly deleted?&lt;br /&gt;
* Trust TYPE=JPEG/PNG/... or look into file content to determine type?&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements</id>
		<title>Architecture/planning/evolution-data-server/eds-improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements"/>
				<updated>2011-04-04T11:11:49Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* change tracking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes improvements that are desirable or even essential for good performance of Evolution Data Server (EDS) as PIM storage in MeeGo.&lt;br /&gt;
&lt;br /&gt;
All of these changes should be developed for the EDS master branch, reviewed by upstream maintainers and then back-ported to EDS 2.32, the version in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== content protection ==&lt;br /&gt;
&lt;br /&gt;
Only authorized applications (= processes) with the necessary permissions should be able to read/write data. Exact permissions and mechanisms for verifying them to be defined as part of the (revised?) MeeGo architecture.&lt;br /&gt;
&lt;br /&gt;
This can be added as follows:&lt;br /&gt;
# lock down file permissions&lt;br /&gt;
# add permission checks to EDS D-Bus servers&lt;br /&gt;
&lt;br /&gt;
== change tracking ==&lt;br /&gt;
&lt;br /&gt;
EDS is based on the model/view/controller principle: an app opens a database (calendar or addresbook) and requests a view with server-side filtering, then is sent:&lt;br /&gt;
# all data covered by the view&lt;br /&gt;
# &amp;quot;all data sent&amp;quot; signal&lt;br /&gt;
# changes (add/update/remove) while the view exists&lt;br /&gt;
&lt;br /&gt;
Applications modify data with asynchronous requests (controller) and keep showing the old data until the change notification comes in. The exact changes made to the data are determined by the server (for example when meeting invitations are sent).&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore do not have such a strict model. With QtContacts the app simply loads and stores contacts and is responsible for maintaining its own view. Changes are sent for changes made after the database was opened. KCalCore is based on the concept of loading a calendar (partially) into the client, modifying it there, then writing it back. Changes are also sent while the storage is open.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# extend EDS query language with a flag that suppresses sending existing data when the view is opened&lt;br /&gt;
# implement for local contact and calendar backend, reject with error in others&lt;br /&gt;
&lt;br /&gt;
== optional parsing of data in client ==&lt;br /&gt;
&lt;br /&gt;
libebook/ecal provide different functionality:&lt;br /&gt;
# exchange data as vCard/iCalendar with EDS daemon&lt;br /&gt;
# parse items and wrap them in a C API&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore replace the second part. An obvious performance improvement is to only do the second part if the additional C APIs are really called. The following calls then transfer data without any additional parsing in libebook/libecal:&lt;br /&gt;
* e_book_get_contact()/asynchronous read/view + e_vcard_to_string()&lt;br /&gt;
* e_contact_new_from_vcard() + e_book_add_contact()/e_book_commit_contact()/asynchronous storing&lt;br /&gt;
* e_cal_get_object_list_as_comp()/asynchronous read/view + e_cal_get_component_as_string()&lt;br /&gt;
* icalcomponent_new_from_string() + e_cal_modify_object[_with_mod]()/e_cal_create_object()&lt;br /&gt;
* e_cal_get_object_list_as_comp()/e_cal_get_object()/asynchronous view + e_cal_get_component_as_string()&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# add delayed parsing to libebook, triggered by API call which needs parsed data&lt;br /&gt;
# add delayed parsing to libical, again triggered by API call&lt;br /&gt;
&lt;br /&gt;
PROBLEM:&lt;br /&gt;
# If delayed parsing fails, how can error be reported?&lt;br /&gt;
# Should delayed parsing be done always (e_vcard_to_string()/icalcomponent_new_from_string()) or only if requested? How would that be configured by a libebook/libecal user?&lt;br /&gt;
&lt;br /&gt;
== more efficient access to meta data for change tracking + atomic updates ==&lt;br /&gt;
&lt;br /&gt;
This was discussed a while ago: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html &lt;br /&gt;
[Evolution-hackers] concurrent modifications of items in GUI and EDS database]]&lt;br /&gt;
&lt;br /&gt;
Data synchronization only needs to know which items exist (list of local IDs) and which revision of each item is currently stored. Revisions can be identified with a string which changes for each modification. Restoring an older revision should (but doesn't have to) restore the revision string.&lt;br /&gt;
&lt;br /&gt;
For calendar, UID+RECURRENCE-ID and LAST-MODIFIED can be used. For contacts, UID + REV.&lt;br /&gt;
&lt;br /&gt;
By comparing a stored list against the current one, changes can be detected without relying on journals in the daemon or comparison of time stamps. Journals are hard to maintain (how many of them, how long?). Comparison of time stamps has problems when changes are allowed while a sync runs and assumes that system time is linear (which is not always true).&lt;br /&gt;
&lt;br /&gt;
As an additional use case, local ID + revision string could be used to prevent overwriting stale data in the server, as in HTTP PUT eTag checks.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# extend EDS query language with a flag that limits delivered data to just UID+RECURRENCE-ID+LAST-MODIFIED resp. UID+REV&lt;br /&gt;
# implement this query for local contact and calendar storage, reject with error in others&lt;br /&gt;
# later: implement atomic changes as discussed in the mail thread&lt;br /&gt;
&lt;br /&gt;
== quick check for &amp;quot;data changed&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Even quicker than listing items and comparing their revisions strings would be a comparison of a revision string for the whole database. The semantic would be this:&lt;br /&gt;
* If the revision string is empty or different, then the content of the database '''might''' have changed. A more detailed check is necessary to determine that.&lt;br /&gt;
* If it is non-empty and the same as before, nothing has changed. No further check necessary.&lt;br /&gt;
&lt;br /&gt;
The modification time stamp of the .ics or .db files could be used. Probably need a new &amp;quot;query property&amp;quot; API. e_cal_get_static_capability() only returns bool. Same with e_book_get_static_capabilities()/e_book_check_static_capability().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== contacts: store PHOTO data as plain files ==&lt;br /&gt;
&lt;br /&gt;
Transfering PHOTO data over D-Bus as base64 encoded data in each vCard has obvious performance issues. Instead the PHOTO property should be a link to a local file (supported by vCard), with utility code available to libebook users to convert between the different representations.&lt;br /&gt;
&lt;br /&gt;
Goals:&lt;br /&gt;
# Apps should be able to create photo files without ever passing the data to libebook.&lt;br /&gt;
# External PHOTO file and corresponding contact must be kept in sync:&lt;br /&gt;
** If a contact is deleted, the photo also needs to be removed.&lt;br /&gt;
** If a photo file is created and then storing the contact fails, who removes the file?&lt;br /&gt;
# Access to photo data must be limited to processes which have the right permissions.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* For each ~/.local/share/evolution/foo calendar, store photos in &amp;lt;photo path&amp;gt;=~/.local/share/evolution/foo/photos, with same permissions.&lt;br /&gt;
* New photo files are created with a [http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] as base name and suffix according to the file content.&lt;br /&gt;
* If a contact is deleted and has a PHOTO;VALUE=uri:file://&amp;lt;photo path&amp;gt;/*, delete that file.&lt;br /&gt;
* For apps which want to create the photo file directly:&lt;br /&gt;
** Apps get a file descriptor and the path from a new libebook API.&lt;br /&gt;
** They own the file until the EDS server acknowledges the successful storing of a contact with a matching PHOTO;VALUE=uri:file property. If that fails, the app must remove the file.&lt;br /&gt;
* Add new API calls to libebook which split out resp. include data inline.&lt;br /&gt;
** Must track ownership of file after splitting it out and before storing - might never get stored!&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
* Should there be automatic garbage collection of stale photos in case something went wrong and a photo wasn't properly deleted?&lt;br /&gt;
* Trust TYPE=JPEG/PNG/... or look into file content to determine type?&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-04T11:10:26Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Mail Storage and Transports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (KDE) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + [[/KCalCore-EDS]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd())&lt;br /&gt;
* write [[/KCalCore-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging (API) + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtMessaging (API) + QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/QMF client lib substitution|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps and QtMobility/QtMessaging requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
Some possible variations of plan A:&lt;br /&gt;
* rewrite mail app and QtMobility/QtMessaging to use Camel daemon via D-Bus&lt;br /&gt;
* QMF (source code) compatible replacement, used by mail app and Messaging (proposal above)&lt;br /&gt;
* rewrite mail app to use Messaging, rewrite Messaging to use Camel via D-Bus&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-04T11:05:48Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Contact Storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (KDE) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + [[/KCalCore-EDS]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd())&lt;br /&gt;
* write [[/KCalCore-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage) + contactsd (updating presence information in Tracker)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtContacts (API) + [[/QtContacts storage plugin|QtContacts-EDS] + libebook (client side) + EDS (server side, storage of vCards in Berkley DB); libfolks as replacement for contactsd&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
* libfolks provides a QtContacts API (in addition to native APIs) and can use either Tracker or EDS directly as backends. Additional work will be needed to improve the EDS part and performance/memory usage.&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging API + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/QMF client lib substitution|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-04-04T10:57:04Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Calendar Storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (KDE) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS proposal''': QtMobility/QtOrganizer (API) + [[/KCalCore-EDS]] + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (not used by calendar app); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal (current implementation)''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore (current MeeGo version has semantic differences in event-&amp;gt;dtEnd())&lt;br /&gt;
* write [[/KCalCore-EDS|storage which uses libecal/EDS]]&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QtContacts (API) + libebook (client side) + EDS (server side, storage of vCards in Berkley DB)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin, libfolks)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
* correlate presence information from Telepathy with address book (&amp;quot;who is online?&amp;quot;) - was done with contactsd+Tracker (not used by us), meant to be done with libfolks&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging API + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/QMF client lib substitution|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-03-30T11:00:00Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Data Synchronization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (KDE) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QtMobility/QtOrganizer (API) + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt], currently no active maintainer (?))&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (theoretic, in practice it was too hard to use and/or faulty); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
* until recently, iCalendar 2.0 support was faulty&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore&lt;br /&gt;
* write storage which uses libecal/EDS&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QtContacts (API) + libebook (client side) + EDS (server side, storage of vCards in Berkley DB)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin, libfolks)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
* correlate presence information from Telepathy with address book (&amp;quot;who is online?&amp;quot;) - was done with contactsd+Tracker (not used by us), meant to be done with libfolks&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging API + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/QMF client lib substitution|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis:&lt;br /&gt;
** The [http://meego.gitorious.org/meego-middleware/syncevolution/blobs/master/src/backends/buteo/ButeoBridge.cpp existing Buteo sync plugin] must also [https://bugs.meego.com/show_bug.cgi?id=15031 support Google Contacts]. No support for any other SyncML peer. This is the only SyncML peer which was tested with Buteo in MeeGo (done by the Intel Tablet team), so not supporting other SyncML peers in step 1 is not a regression.&lt;br /&gt;
** [https://bugs.meego.com/show_bug.cgi?id=15030 Preserving local extensions] when synchronizing with Google depends on [https://bugs.meego.com/show_bug.cgi?id=15029 hard-coding capabilities of that peer] and [https://bugs.meego.com/show_bug.cgi?id=15030 support for unknown properties].&lt;br /&gt;
** Google Contact sync might run in parallel with CalDAV sync. The SyncEvolution sync plugin must support that. Must [https://bugs.meego.com/show_bug.cgi?id=681 replace global variables].&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture</id>
		<title>Architecture</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture"/>
				<updated>2011-03-30T10:27:37Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Upcoming Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MeeGo Architecture ==&lt;br /&gt;
&lt;br /&gt;
MeeGo architecture team is responsible for defining and managing the MeeGo architecture. MeeGo architecture consists of Core OS layer and number of UX verticals on top the Core OS layer. The architecture team decides which component to use for the functionality needed in MeeGo with the objective of consistency inside the Core OS and to the applications that run above it.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
&lt;br /&gt;
* '''[http://meego.com/users/arjan Arjan van de Ven]''', Chief Architect, responsible for MeeGo architecture&lt;br /&gt;
* '''[http://meego.com/users/poussa Sakari Poussa]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
* '''[http://meego.com/users/mythi Mikko Ylinen]''', Handset UX Architect, responsible for Handset UX architecture&lt;br /&gt;
* '''[http://meego.com/users/sunilsaxena Sunil Saxena]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
*  [http://lists.meego.com/listinfo/meego-architecture MeeGo architecture mailing list]&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
* Architecture team meets once a week. Currently the meetings are not public.&lt;br /&gt;
* Agenda and minutes of the meetings will be posted to the meego-architecture mailing list&lt;br /&gt;
* Anyone can propose topics to the architecture team agenda&lt;br /&gt;
* Architecture topics can and should be discussed on meego-architecture mailing list&lt;br /&gt;
* Architecture team is responsible of making the decision in case consensus is not reached&lt;br /&gt;
&lt;br /&gt;
=== Process Improvement Topics ===&lt;br /&gt;
&lt;br /&gt;
* How to make the architecture meetings open. Not all the topics can be open but most can be. Examples of non-open parts includes topics which involves IPR, legal, patent, business, product or schedule sensitive material.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* Developer Documentation: APIs, tutorials, videos, examples ([http://developer.meego.com]), to be published soon&lt;br /&gt;
* Architecture Documentation: High level architecture pictures and description ([http://meego.com/developers/meego-architecture])&lt;br /&gt;
* Developer and Subsystem Documentation: Detailed technical description of each MeeGo subsystem. Guidelines for developers working on MeeGo. ([[Architecture/Documentation]])&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
* [[Architecture/Meetings]] - Meetings - agenda, minutes&lt;br /&gt;
&lt;br /&gt;
== Upcoming Features ==&lt;br /&gt;
&lt;br /&gt;
MeeGo Bugzilla lists the following features for MeeGo 1.2. The below proposal are all accepted and are on their way to MeeGo 1.2 release.&lt;br /&gt;
&lt;br /&gt;
* Display backlight and keyboard backlight control: [http://bugs.meego.com/show_bug.cgi?id=5525 5525], [http://bugs.meego.com/show_bug.cgi?id=5526 5526], [http://bugs.meego.com/show_bug.cgi?id=5527 5527], [http://bugs.meego.com/show_bug.cgi?id=5528 5528]&lt;br /&gt;
** Proposal 1: Maemo 6 MCE&lt;br /&gt;
*** ''MCE provides activity monitoring and notifications via D-Bus, controls display and backlight, ALS reading and display tuning, airplane mode''&lt;br /&gt;
&lt;br /&gt;
* Sharing: [http://bugs.meego.com/show_bug.cgi?id=8179 8179], [http://bugs.meego.com/show_bug.cgi?id=8180 8180], [http://bugs.meego.com/show_bug.cgi?id=8181 8181]&lt;br /&gt;
** Proposal 1: Maemo6 Sharing framework&lt;br /&gt;
*** ''Sharing framework provides a unified API for sharing files via, e.g., BT, email, web services. It includes webupload engine and an API for transfer UI''&lt;br /&gt;
&lt;br /&gt;
* Qt style APIs (that are not covered by Qt Mobility) for display backlight control, alarm/time, heartbeat, system state, thermal&lt;br /&gt;
** Proposal 1: Maemo6 QmSystem&lt;br /&gt;
*** ''QmSystem provides Qt style public APIs for various system services that are not covered by Qt Mobility''&lt;br /&gt;
&lt;br /&gt;
* Profiles: [http://bugs.meego.com/show_bug.cgi?id=5771 5771], [http://bugs.meego.com/show_bug.cgi?id=5750 5750], [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 profiled&lt;br /&gt;
*** ''profiled provides a daemon and libraries to access and control profiles related data in the device. The libprofile (C) and libprofile-qt (Qt) are interfaces for the profile client to connect to the server using D-Bus. The profiled data is stored in ‘ini’ files which can be customized per different releases.''&lt;br /&gt;
&lt;br /&gt;
* Ringtones+feedback: [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 NGF (non-graphic feedback)&lt;br /&gt;
*** ''The device has functionality to alert user of a call, alarms and notification (SMS, email, chat, system update) events. Events may or may not have a graphical part and it may have different behavior depending on the system state. Example of this is receiving an SMS message when there is no other activity and SMS message during a call. NGF provides a unified API for apps to request logical events. The actions (e.g,. play/show LED+audio+vibra) are combined in NGF and consistent look&amp;amp;feel is provided''.&lt;br /&gt;
&lt;br /&gt;
* PIM Storage in Evolution Data Server (EDS) and email via Camel, SyncEvolution as sync engine&lt;br /&gt;
** architecture decision to move towards EDS and Camel [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html announced]&lt;br /&gt;
** planning [[/planning/evolution-data-server|in progress]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==   &lt;br /&gt;
&lt;br /&gt;
Architecture tools   &lt;br /&gt;
&lt;br /&gt;
*   Architecture navigation tool - able to browse meego packages and visually see the dependencies (coming in Nov)&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements</id>
		<title>Architecture/planning/evolution-data-server/eds-improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements"/>
				<updated>2011-03-29T15:10:33Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes improvements that are desirable or even essential for good performance of Evolution Data Server (EDS) as PIM storage in MeeGo.&lt;br /&gt;
&lt;br /&gt;
All of these changes should be developed for the EDS master branch, reviewed by upstream maintainers and then back-ported to EDS 2.32, the version in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== content protection ==&lt;br /&gt;
&lt;br /&gt;
Only authorized applications (= processes) with the necessary permissions should be able to read/write data. Exact permissions and mechanisms for verifying them to be defined as part of the (revised?) MeeGo architecture.&lt;br /&gt;
&lt;br /&gt;
This can be added as follows:&lt;br /&gt;
# lock down file permissions&lt;br /&gt;
# add permission checks to EDS D-Bus servers&lt;br /&gt;
&lt;br /&gt;
== change tracking ==&lt;br /&gt;
&lt;br /&gt;
EDS is based on the model/view/controller principle: an app opens a database (calendar or addresbook) and requests a view with server-side filtering, then is sent:&lt;br /&gt;
# all data covered by the view&lt;br /&gt;
# &amp;quot;all data sent&amp;quot; signal&lt;br /&gt;
# changes (add/update/remove) while the view exists&lt;br /&gt;
&lt;br /&gt;
Applications modify data with asynchronous requests (controller) and keep showing the old data until the change notification comes in. The exact changes made to the data are determined by the server (for example when meeting invitations are sent).&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore do not have such a strict model. With QtContacts the app simply loads and stores contacts and is responsible for maintaining its own view. Changes are sent for changes made after the database was opened. KCalCore is based on the concept of loading a calendar (partially) into the client, modifying it there, then writing it back. Changes are also sent while the storage is open.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# extend EDS query language with a flag that suppresses existing data&lt;br /&gt;
# implement for local contact and calendar backend, reject with error in others&lt;br /&gt;
&lt;br /&gt;
== optional parsing of data in client ==&lt;br /&gt;
&lt;br /&gt;
libebook/ecal provide different functionality:&lt;br /&gt;
# exchange data as vCard/iCalendar with EDS daemon&lt;br /&gt;
# parse items and wrap them in a C API&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore replace the second part. An obvious performance improvement is to only do the second part if the additional C APIs are really called. The following calls then transfer data without any additional parsing in libebook/libecal:&lt;br /&gt;
* e_book_get_contact()/asynchronous read/view + e_vcard_to_string()&lt;br /&gt;
* e_contact_new_from_vcard() + e_book_add_contact()/e_book_commit_contact()/asynchronous storing&lt;br /&gt;
* e_cal_get_object_list_as_comp()/asynchronous read/view + e_cal_get_component_as_string()&lt;br /&gt;
* icalcomponent_new_from_string() + e_cal_modify_object[_with_mod]()/e_cal_create_object()&lt;br /&gt;
* e_cal_get_object_list_as_comp()/e_cal_get_object()/asynchronous view + e_cal_get_component_as_string()&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# add delayed parsing to libebook, triggered by API call which needs parsed data&lt;br /&gt;
# add delayed parsing to libical, again triggered by API call&lt;br /&gt;
&lt;br /&gt;
PROBLEM:&lt;br /&gt;
# If delayed parsing fails, how can error be reported?&lt;br /&gt;
# Should delayed parsing be done always (e_vcard_to_string()/icalcomponent_new_from_string()) or only if requested? How would that be configured by a libebook/libecal user?&lt;br /&gt;
&lt;br /&gt;
== more efficient access to meta data for change tracking + atomic updates ==&lt;br /&gt;
&lt;br /&gt;
This was discussed a while ago: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html &lt;br /&gt;
[Evolution-hackers] concurrent modifications of items in GUI and EDS database]]&lt;br /&gt;
&lt;br /&gt;
Data synchronization only needs to know which items exist (list of local IDs) and which revision of each item is currently stored. Revisions can be identified with a string which changes for each modification. Restoring an older revision should (but doesn't have to) restore the revision string.&lt;br /&gt;
&lt;br /&gt;
For calendar, UID+RECURRENCE-ID and LAST-MODIFIED can be used. For contacts, UID + REV.&lt;br /&gt;
&lt;br /&gt;
By comparing a stored list against the current one, changes can be detected without relying on journals in the daemon or comparison of time stamps. Journals are hard to maintain (how many of them, how long?). Comparison of time stamps has problems when changes are allowed while a sync runs and assumes that system time is linear (which is not always true).&lt;br /&gt;
&lt;br /&gt;
As an additional use case, local ID + revision string could be used to prevent overwriting stale data in the server, as in HTTP PUT eTag checks.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# extend EDS query language with a flag that limits delivered data to just UID+RECURRENCE-ID+LAST-MODIFIED resp. UID+REV&lt;br /&gt;
# implement this query for local contact and calendar storage, reject with error in others&lt;br /&gt;
# later: implement atomic changes as discussed in the mail thread&lt;br /&gt;
&lt;br /&gt;
== quick check for &amp;quot;data changed&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Even quicker than listing items and comparing their revisions strings would be a comparison of a revision string for the whole database. The semantic would be this:&lt;br /&gt;
* If the revision string is empty or different, then the content of the database '''might''' have changed. A more detailed check is necessary to determine that.&lt;br /&gt;
* If it is non-empty and the same as before, nothing has changed. No further check necessary.&lt;br /&gt;
&lt;br /&gt;
The modification time stamp of the .ics or .db files could be used. Probably need a new &amp;quot;query property&amp;quot; API. e_cal_get_static_capability() only returns bool. Same with e_book_get_static_capabilities()/e_book_check_static_capability().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== contacts: store PHOTO data as plain files ==&lt;br /&gt;
&lt;br /&gt;
Transfering PHOTO data over D-Bus as base64 encoded data in each vCard has obvious performance issues. Instead the PHOTO property should be a link to a local file (supported by vCard), with utility code available to libebook users to convert between the different representations.&lt;br /&gt;
&lt;br /&gt;
Goals:&lt;br /&gt;
# Apps should be able to create photo files without ever passing the data to libebook.&lt;br /&gt;
# External PHOTO file and corresponding contact must be kept in sync:&lt;br /&gt;
** If a contact is deleted, the photo also needs to be removed.&lt;br /&gt;
** If a photo file is created and then storing the contact fails, who removes the file?&lt;br /&gt;
# Access to photo data must be limited to processes which have the right permissions.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* For each ~/.local/share/evolution/foo calendar, store photos in &amp;lt;photo path&amp;gt;=~/.local/share/evolution/foo/photos, with same permissions.&lt;br /&gt;
* New photo files are created with a [http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] as base name and suffix according to the file content.&lt;br /&gt;
* If a contact is deleted and has a PHOTO;VALUE=uri:file://&amp;lt;photo path&amp;gt;/*, delete that file.&lt;br /&gt;
* For apps which want to create the photo file directly:&lt;br /&gt;
** Apps get a file descriptor and the path from a new libebook API.&lt;br /&gt;
** They own the file until the EDS server acknowledges the successful storing of a contact with a matching PHOTO;VALUE=uri:file property. If that fails, the app must remove the file.&lt;br /&gt;
* Add new API calls to libebook which split out resp. include data inline.&lt;br /&gt;
** Must track ownership of file after splitting it out and before storing - might never get stored!&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
* Should there be automatic garbage collection of stale photos in case something went wrong and a photo wasn't properly deleted?&lt;br /&gt;
* Trust TYPE=JPEG/PNG/... or look into file content to determine type?&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements</id>
		<title>Architecture/planning/evolution-data-server/eds-improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/eds-improvements"/>
				<updated>2011-03-29T14:20:29Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: Created page with &amp;quot;This page describes improvements that are desirable or even essential for good performance of Evolution Data Server (EDS) as PIM storage in MeeGo.  All of these changes should be…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes improvements that are desirable or even essential for good performance of Evolution Data Server (EDS) as PIM storage in MeeGo.&lt;br /&gt;
&lt;br /&gt;
All of these changes should be developed for the EDS master branch, reviewed by upstream maintainers and then back-ported to EDS 2.32, the version in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== content protection ==&lt;br /&gt;
&lt;br /&gt;
Only authorized applications (= processes) with the necessary permissions should be able to read/write data. Exact permissions and mechanisms for verifying them to be defined as part of the (revised?) MeeGo architecture.&lt;br /&gt;
&lt;br /&gt;
This can be added as follows:&lt;br /&gt;
# lock down file permissions&lt;br /&gt;
# add permission checks to EDS D-Bus servers&lt;br /&gt;
&lt;br /&gt;
== change tracking ==&lt;br /&gt;
&lt;br /&gt;
EDS is based on the model/view/controller principle: an app opens a database (calendar or addresbook) and requests a view with server-side filtering, then is sent:&lt;br /&gt;
# all data covered by the view&lt;br /&gt;
# &amp;quot;all data sent&amp;quot; signal&lt;br /&gt;
# changes (add/update/remove) while the view exists&lt;br /&gt;
&lt;br /&gt;
Applications modify data with asynchronous requests (controller) and keep showing the old data until the change notification comes in. The exact changes made to the data are determined by the server (for example when meeting invitations are sent).&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore do not have such a strict model. With QtContacts the app simply loads and stores contacts and is responsible for maintaining its own view. Changes are sent for changes made after the database was opened. KCalCore is based on the concept of loading a calendar (partially) into the client, modifying it there, then writing it back. Changes are also sent while the storage is open.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# extend EDS query language with a flag that suppresses existing data&lt;br /&gt;
# implement for local contact and calendar backend, reject with error in others&lt;br /&gt;
&lt;br /&gt;
== optional parsing of data in client ==&lt;br /&gt;
&lt;br /&gt;
libebook/ecal provide different functionality:&lt;br /&gt;
# exchange data as vCard/iCalendar with EDS daemon&lt;br /&gt;
# parse items and wrap them in a C API&lt;br /&gt;
&lt;br /&gt;
QtContacts and KCalCore replace the second part. An obvious performance improvement is to only do the second part if the additional C APIs are really called. The following calls then transfer data without any additional parsing in libebook/libecal:&lt;br /&gt;
* e_book_get_contact()/asynchronous read/view + e_vcard_to_string()&lt;br /&gt;
* e_contact_new_from_vcard() + e_book_add_contact()/e_book_commit_contact()/asynchronous storing&lt;br /&gt;
* e_cal_get_object_list_as_comp()/asynchronous read/view + e_cal_get_component_as_string()&lt;br /&gt;
* icalcomponent_new_from_string() + e_cal_modify_object[_with_mod]()/e_cal_create_object()&lt;br /&gt;
* e_cal_get_object_list_as_comp()/e_cal_get_object()/asynchronous view + e_cal_get_component_as_string()&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# add delayed parsing to libebook, triggered by API call which needs parsed data&lt;br /&gt;
# add delayed parsing to libical, again triggered by API call&lt;br /&gt;
&lt;br /&gt;
PROBLEM:&lt;br /&gt;
# If delayed parsing fails, how can error be reported?&lt;br /&gt;
# Should delayed parsing be done always (e_vcard_to_string()/icalcomponent_new_from_string()) or only if requested? How would that be configured by a libebook/libecal user?&lt;br /&gt;
&lt;br /&gt;
== more efficient access to meta data for change tracking + atomic updates ==&lt;br /&gt;
&lt;br /&gt;
This was discussed a while ago: [[http://www.mail-archive.com/evolution-hackers@gnome.org/msg03029.html &lt;br /&gt;
[Evolution-hackers] concurrent modifications of items in GUI and EDS database]]&lt;br /&gt;
&lt;br /&gt;
Data synchronization only needs to know which items exist (list of local IDs) and which revision of each item is currently stored. Revisions can be identified with a string which changes for each modification. Restoring an older revision should (but doesn't have to) restore the revision string.&lt;br /&gt;
&lt;br /&gt;
For calendar, UID+RECURRENCE-ID and LAST-MODIFIED can be used. For contacts, UID + REV.&lt;br /&gt;
&lt;br /&gt;
By comparing a stored list against the current one, changes can be detected without relying on journals in the daemon or comparison of time stamps. Journals are hard to maintain (how many of them, how long?). Comparison of time stamps has problems when changes are allowed while a sync runs and assumes that system time is linear (which is not always true).&lt;br /&gt;
&lt;br /&gt;
As an additional use case, local ID + revision string could be used to prevent overwriting stale data in the server, as in HTTP PUT eTag checks.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
# extend EDS query language with a flag that limits delivered data to just UID+RECURRENCE-ID+LAST-MODIFIED resp. UID+REV&lt;br /&gt;
# implement this query for local contact and calendar storage, reject with error in others&lt;br /&gt;
# later: implement atomic changes as discussed in the mail thread&lt;br /&gt;
&lt;br /&gt;
== contacts: store PHOTO data as plain files ==&lt;br /&gt;
&lt;br /&gt;
Transfering PHOTO data over D-Bus as base64 encoded data in each vCard has obvious performance issues. Instead the PHOTO property should be a link to a local file (supported by vCard), with utility code available to libebook users to convert between the different representations.&lt;br /&gt;
&lt;br /&gt;
Goals:&lt;br /&gt;
# Apps should be able to create photo files without ever passing the data to libebook.&lt;br /&gt;
# External PHOTO file and corresponding contact must be kept in sync:&lt;br /&gt;
** If a contact is deleted, the photo also needs to be removed.&lt;br /&gt;
** If a photo file is created and then storing the contact fails, who removes the file?&lt;br /&gt;
# Access to photo data must be limited to processes which have the right permissions.&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
* For each ~/.local/share/evolution/foo calendar, store photos in &amp;lt;photo path&amp;gt;=~/.local/share/evolution/foo/photos, with same permissions.&lt;br /&gt;
* New photo files are created with a [http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] as base name and suffix according to the file content.&lt;br /&gt;
* If a contact is deleted and has a PHOTO;VALUE=uri:file://&amp;lt;photo path&amp;gt;/*, delete that file.&lt;br /&gt;
* For apps which want to create the photo file directly:&lt;br /&gt;
** Apps get a file descriptor and the path from a new libebook API.&lt;br /&gt;
** They own the file until the EDS server acknowledges the successful storing of a contact with a matching PHOTO;VALUE=uri:file property. If that fails, the app must remove the file.&lt;br /&gt;
* Add new API calls to libebook which split out resp. include data inline.&lt;br /&gt;
** Must track ownership of file after splitting it out and before storing - might never get stored!&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
* Should there be automatic garbage collection of stale photos in case something went wrong and a photo wasn't properly deleted?&lt;br /&gt;
* Trust TYPE=JPEG/PNG/... or look into file content to determine type?&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/QtContacts_storage_plugin</id>
		<title>Architecture/planning/evolution-data-server/QtContacts storage plugin</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/QtContacts_storage_plugin"/>
				<updated>2011-03-29T12:15:41Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: Created page with &amp;quot;== QtContacts-EDS ==  Can be based on http://www.qt.gitorious.org/qt-mobility/contacts/blobs/master/plugins/contacts/maemo5/qcontactabook.cpp existing Harmattan EDS plugin, w…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== QtContacts-EDS ==&lt;br /&gt;
&lt;br /&gt;
Can be based on [[http://www.qt.gitorious.org/qt-mobility/contacts/blobs/master/plugins/contacts/maemo5/qcontactabook.cpp existing Harmattan EDS plugin]], which does not work as-is because of Nokia-specific API extensions.&lt;br /&gt;
&lt;br /&gt;
Necessary changes:&lt;br /&gt;
* avoid ID mapping because it requires reading all contacts at startup:&lt;br /&gt;
** must change EDS to use 32 bit integers as local IDs for that (patch ready)&lt;br /&gt;
* convert between QtContacts and vCard using QtVersit, with EDS specific properties and including custom properties for QtContactDetails which have no other mapping to vCard (same approach as in SyncEvolution QtContacts backend)&lt;br /&gt;
&lt;br /&gt;
Goals for initial milestone:&lt;br /&gt;
* full support for all QContactDetails, including custom ones, but with some limitations:&lt;br /&gt;
** additional fields of details which map to well-known vCard properties (full name, address) cannot be stored if they have no corresponding representation in vCard&lt;br /&gt;
** TODO: complete list&lt;br /&gt;
* change notifications (added/updated/removed)&lt;br /&gt;
* mapping of QtContacts filters to EDS queries, with unsupported filters implemented by QtContacts after retrieving contacts (slower than filtering in EDS daemon)&lt;br /&gt;
** TODO: complete list of native searches&lt;br /&gt;
* change notifications via ebook view: created when opened, initial data dump ignored (performance problem!), report all following changes&lt;br /&gt;
&lt;br /&gt;
Goals for later milestones:&lt;br /&gt;
* error handling&lt;br /&gt;
* performance&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server/QMF_client_lib_substitution</id>
		<title>Architecture/planning/evolution-data-server/QMF client lib substitution</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server/QMF_client_lib_substitution"/>
				<updated>2011-03-29T12:10:16Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: Created page with &amp;quot;Author and contact: srinivasa.ragavan.venkateswaran@intel.com  To be documented in more detail.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author and contact: srinivasa.ragavan.venkateswaran@intel.com&lt;br /&gt;
&lt;br /&gt;
To be documented in more detail.&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture/planning/evolution-data-server</id>
		<title>Architecture/planning/evolution-data-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture/planning/evolution-data-server"/>
				<updated>2011-03-29T12:08:31Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: Created page with &amp;quot;== Introduction ==  The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, a…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The architecture decision to make the transition from Nokia-supported components for contacts and calendar data (PIM) storage, email storage and transports, and sync back to the components used in MeeGo Netbook (Evolution Data Server and SyncEvolution) [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html was announced publicly] on March 7th. Planning the execution of that change is currently (end of March 2011) in progress.&lt;br /&gt;
&lt;br /&gt;
This page gathers information about the PIM + mail storages and sync. Main author and point of contact is [mailto:patrick.ohly@intel.com Patrick Ohly]. It includes information contributed by various people, mentioned with email address below.&lt;br /&gt;
&lt;br /&gt;
Information that has not been confirmed is marked with a question mark.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Calendar Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtOrganizer (API) + KCalCore (KDE) + modifications + mKCal (sqlite storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QtMobility/QtOrganizer (API) + libecal/libical (client side) + EDS (server side, stored in iCalendar 2.0 text file)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': calendar app ([mailto:sirisha.muppavarapu@intel.com Sirisha Muppavarapu]), clock app (originally [mailto:todd.e.brandt@intel.com Todd Brandt], currently no active maintainer (?))&lt;br /&gt;
&lt;br /&gt;
'''Advantages of mKCal''':&lt;br /&gt;
* partial loading of data from sqlite (theoretic, in practice it was too hard to use and/or faulty); EDS holds complete calendar in memory&lt;br /&gt;
* incremental changes to database; EDS must rewrite complete file&lt;br /&gt;
'''Disadvantages of mKCal''':&lt;br /&gt;
* only provides single &amp;quot;database changed&amp;quot; signal, forces apps to reload everything (not currently done in calendar app); EDS sends add/update/delete notifications to apps watching a calendar&lt;br /&gt;
* until recently, iCalendar 2.0 support was faulty&lt;br /&gt;
&lt;br /&gt;
Plan:&lt;br /&gt;
* use upstream KDE version of KCalCore&lt;br /&gt;
* write storage which uses libecal/EDS&lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
== Contact Storage ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtContacts (API) + QtContacts-Tracker (glue code) + Tracker (storage)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QtContacts (API) + libebook (client side) + EDS (server side, storage of vCards in Berkley DB)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': libseaside/meego-app-contacts/meego-handset-people/ContactPicker.qml ([mailto:connie.berardi@intel.com Connie Berardi] and [mailto:kaitlin.rupert@intel.com]), SMS and Messaging apps ([mailto:benjamin.t.drucker@intel.com Ben Drucker]), various parts of Tablet UX via QML binding, obexd for Phone Book Access Protocol (PBAP) plugin, libfolks)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Tracker''':&lt;br /&gt;
* supports potential future use cases (combining data from different categories, partial reading/writing, fine-grained annotations on data origin)&lt;br /&gt;
* better searching&lt;br /&gt;
* scalability (?)&lt;br /&gt;
* read performance (?)&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Tracker''':&lt;br /&gt;
* data protection missing in both EDS and Tracker, but less obvious how to implement it in Tracker&lt;br /&gt;
* slow write performance in QtContacts-Tracker (?)&lt;br /&gt;
&lt;br /&gt;
'''Plan''':&lt;br /&gt;
* write a QtContacts storage plugin ([[/QtContacts storage plugin|details on QtContacts-EDS]]), &lt;br /&gt;
* [[/eds-improvements|EDS improvements]]&lt;br /&gt;
&lt;br /&gt;
'''Opens''':&lt;br /&gt;
* obexd has PBAP plugin for EDS, needs to be tested/improved/adapted (photo support, vCard 2.1/3.0); can't use QtContacts-EDS because obexd accesses Tracker directly&lt;br /&gt;
* [http://lists.meego.com/pipermail/meego-dev/2011-March/482065.html communication history], currently done with QSettings in dialer app - how will that be done in the future?&lt;br /&gt;
* correlate presence information from Telepathy with address book (&amp;quot;who is online?&amp;quot;) - was done with contactsd+Tracker (not used by us), meant to be done with libfolks&lt;br /&gt;
&lt;br /&gt;
== Mail Storage and Transports ==&lt;br /&gt;
&lt;br /&gt;
'''Maemo solution''': QtMobility/QtMessaging API + Qt Messaging Framework (QMF, actual implementation)&amp;lt;br&amp;gt;&lt;br /&gt;
'''EDS''': QMF-compatible API (?) + Camel library (part of EDS, but not running in the daemon itself yet)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Used by''': mail app ([mailto:carl.wong@intel.com Carl Wong]), SMS storage plugin ([mailto:benjamin.t.drucker@intel.com Ben Drucker])&lt;br /&gt;
&lt;br /&gt;
'''Advantages of QMF''':&lt;br /&gt;
* already works as a stand-alone daemon&lt;br /&gt;
&lt;br /&gt;
'''Plan A [[/QMF client lib substitution|(details)]]'''&lt;br /&gt;
* kudos to [mailto:srinivasa.ragavan.venkateswaran@intel.com Srinivasa (Srini) Venkateswaran] for this proposal&lt;br /&gt;
* write simplistic server which runs Camel&lt;br /&gt;
* replace QMF client library with one which accesses that server - ideally this library is at least QMF API source code compatible (=&amp;gt; adapting apps requires recompilation, not rewriting)&lt;br /&gt;
* account setup UI&lt;br /&gt;
&lt;br /&gt;
'''Plan B''':&lt;br /&gt;
* keep QMF as mail infrastructure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Synchronization ==&lt;br /&gt;
'''Maemo solution''': Buteo Sync Framework, Buteo SyncML, Buteo Sync Plugins, Buteo Media Transfer Protocol (MTP)&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alternative''': SyncEvolution, Synthesis SyncML, Buteo Media Transfer Protocol&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Buteo''':&lt;br /&gt;
* plugable sync engines, more sophisticated scheduling of time-based syncs&lt;br /&gt;
* Tablet Google Contact sync preserves properties not supported by Google&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Buteo''':&lt;br /&gt;
* incomplete, untested (in MeeGo)&lt;br /&gt;
* no support for incoming SyncML over OBEX/Bluetooth&lt;br /&gt;
&lt;br /&gt;
'''Step 1''':&lt;br /&gt;
* keep Buteo Sync Framework&lt;br /&gt;
* replace SyncML engine for Google Contact sync in Tablet with SyncEvolution + Synthesis: SyncEvolution can already run inside Buteo, but needs Buteo configs+bridge code, still need to add the &amp;quot;preserve properties&amp;quot; part&lt;br /&gt;
&lt;br /&gt;
'''Step 2''':&lt;br /&gt;
* rewrite QML settings backend to use SyncEvolution D-Bus API&lt;br /&gt;
* remove Buteo msyncd/framework, run Buteo MTP as part of syncevo-dbus-server or stand-alone&lt;br /&gt;
&lt;br /&gt;
'''Further improvements to SyncEvolution/MTP''':&lt;br /&gt;
* code refactoring of libsynthesis to support non-SyncML sync scenarios and plain C code which needs data conversion (obexd plugin?)&lt;br /&gt;
* support push sync&lt;br /&gt;
* redesign daemon to run syncs in forked processes (security, responsiveness of D-Bus API)&lt;br /&gt;
* device-to-device sync over WLAN&lt;br /&gt;
* MTP over WLAN and Bluetooth&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture</id>
		<title>Architecture</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture"/>
				<updated>2011-03-29T11:29:13Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* Upcoming Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MeeGo Architecture ==&lt;br /&gt;
&lt;br /&gt;
MeeGo architecture team is responsible for defining and managing the MeeGo architecture. MeeGo architecture consists of Core OS layer and number of UX verticals on top the Core OS layer. The architecture team decides which component to use for the functionality needed in MeeGo with the objective of consistency inside the Core OS and to the applications that run above it.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
&lt;br /&gt;
* '''[http://meego.com/users/arjan Arjan van de Ven]''', Chief Architect, responsible for MeeGo architecture&lt;br /&gt;
* '''[http://meego.com/users/poussa Sakari Poussa]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
* '''[http://meego.com/users/mythi Mikko Ylinen]''', Handset UX Architect, responsible for Handset UX architecture&lt;br /&gt;
* '''[http://meego.com/users/sunilsaxena Sunil Saxena]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
*  [http://lists.meego.com/listinfo/meego-architecture MeeGo architecture mailing list]&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
* Architecture team meets once a week. Currently the meetings are not public.&lt;br /&gt;
* Agenda and minutes of the meetings will be posted to the meego-architecture mailing list&lt;br /&gt;
* Anyone can propose topics to the architecture team agenda&lt;br /&gt;
* Architecture topics can and should be discussed on meego-architecture mailing list&lt;br /&gt;
* Architecture team is responsible of making the decision in case consensus is not reached&lt;br /&gt;
&lt;br /&gt;
=== Process Improvement Topics ===&lt;br /&gt;
&lt;br /&gt;
* How to make the architecture meetings open. Not all the topics can be open but most can be. Examples of non-open parts includes topics which involves IPR, legal, patent, business, product or schedule sensitive material.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* Developer Documentation: APIs, tutorials, videos, examples ([http://developer.meego.com]), to be published soon&lt;br /&gt;
* Architecture Documentation: High level architecture pictures and description ([http://meego.com/developers/meego-architecture])&lt;br /&gt;
* Developer and Subsystem Documentation: Detailed technical description of each MeeGo subsystem. Guidelines for developers working on MeeGo. ([[Architecture/Documentation]])&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
* [[Architecture/Meetings]] - Meetings - agenda, minutes&lt;br /&gt;
&lt;br /&gt;
== Upcoming Features ==&lt;br /&gt;
&lt;br /&gt;
MeeGo Bugzilla lists the following features for MeeGo 1.2. The below proposal are all accepted and are on their way to MeeGo 1.2 release.&lt;br /&gt;
&lt;br /&gt;
* Display backlight and keyboard backlight control: [http://bugs.meego.com/show_bug.cgi?id=5525 5525], [http://bugs.meego.com/show_bug.cgi?id=5526 5526], [http://bugs.meego.com/show_bug.cgi?id=5527 5527], [http://bugs.meego.com/show_bug.cgi?id=5528 5528]&lt;br /&gt;
** Proposal 1: Maemo 6 MCE&lt;br /&gt;
*** ''MCE provides activity monitoring and notifications via D-Bus, controls display and backlight, ALS reading and display tuning, airplane mode''&lt;br /&gt;
&lt;br /&gt;
* Sharing: [http://bugs.meego.com/show_bug.cgi?id=8179 8179], [http://bugs.meego.com/show_bug.cgi?id=8180 8180], [http://bugs.meego.com/show_bug.cgi?id=8181 8181]&lt;br /&gt;
** Proposal 1: Maemo6 Sharing framework&lt;br /&gt;
*** ''Sharing framework provides a unified API for sharing files via, e.g., BT, email, web services. It includes webupload engine and an API for transfer UI''&lt;br /&gt;
&lt;br /&gt;
* Qt style APIs (that are not covered by Qt Mobility) for display backlight control, alarm/time, heartbeat, system state, thermal&lt;br /&gt;
** Proposal 1: Maemo6 QmSystem&lt;br /&gt;
*** ''QmSystem provides Qt style public APIs for various system services that are not covered by Qt Mobility''&lt;br /&gt;
&lt;br /&gt;
* Profiles: [http://bugs.meego.com/show_bug.cgi?id=5771 5771], [http://bugs.meego.com/show_bug.cgi?id=5750 5750], [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 profiled&lt;br /&gt;
*** ''profiled provides a daemon and libraries to access and control profiles related data in the device. The libprofile (C) and libprofile-qt (Qt) are interfaces for the profile client to connect to the server using D-Bus. The profiled data is stored in ‘ini’ files which can be customized per different releases.''&lt;br /&gt;
&lt;br /&gt;
* Ringtones+feedback: [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 NGF (non-graphic feedback)&lt;br /&gt;
*** ''The device has functionality to alert user of a call, alarms and notification (SMS, email, chat, system update) events. Events may or may not have a graphical part and it may have different behavior depending on the system state. Example of this is receiving an SMS message when there is no other activity and SMS message during a call. NGF provides a unified API for apps to request logical events. The actions (e.g,. play/show LED+audio+vibra) are combined in NGF and consistent look&amp;amp;feel is provided''.&lt;br /&gt;
&lt;br /&gt;
* PIM Storage in Evolution Data Server (EDS) and email via Camel&lt;br /&gt;
** architecture decision to move towards EDS and Camel [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html announced]&lt;br /&gt;
** planning [[/planning/evolution-data-server|in progress]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==   &lt;br /&gt;
&lt;br /&gt;
Architecture tools   &lt;br /&gt;
&lt;br /&gt;
*   Architecture navigation tool - able to browse meego packages and visually see the dependencies (coming in Nov)&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Mailing_list_guidelines</id>
		<title>Mailing list guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Mailing_list_guidelines"/>
				<updated>2010-10-06T16:13:47Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Before You Start==&lt;br /&gt;
&lt;br /&gt;
Please remember that when you are posting to a community mailing list, you are in effect asking a large group of people to give you some of their time and attention - to download your message, read it, and potentially reply to it. It is simply polite to ensure that your message is relevant to as many of the people receiving the message as possible. All of these guidelines stem from this basic principle.&lt;br /&gt;
&lt;br /&gt;
* '''Read the [[Community_communication]] document''': Do not post without reviewing this document.&lt;br /&gt;
* '''[[Community_communication#Search_for_existing_answers|Search for existing answers]]''': Believe it or not, your question might not be new - do a [[Community_communication#Search_for_existing_answers|thorough search]] to see if it has been answered before.&lt;br /&gt;
* '''Post in the right place''': Review the [[Community_communication]] document and make sure that you are posting in the right place for your topic.&lt;br /&gt;
&lt;br /&gt;
==Posting Guidelines==&lt;br /&gt;
&lt;br /&gt;
===Be Nice===&lt;br /&gt;
&lt;br /&gt;
Be courteous and polite to fellow members in the list:&lt;br /&gt;
* Keep the language clean (no swearing)&lt;br /&gt;
* Respect other people: No regional, racial, gender or other abuse will be tolerated.&lt;br /&gt;
&lt;br /&gt;
===Keep it Legal===&lt;br /&gt;
&lt;br /&gt;
Make sure that you have the legal right to post your content and are not violating copyright or other laws.&lt;br /&gt;
&lt;br /&gt;
===Keep It Short===&lt;br /&gt;
&lt;br /&gt;
Remember that thousands of copies of your message will exist in mailboxes:&lt;br /&gt;
* Keep your messages as short as possible. &lt;br /&gt;
* Avoid including log output (select only the most relevant lines, or place the log on a website or in a [http://pastebin.com/ pastebin] instead)&lt;br /&gt;
* Don't excessively quote previous messages in the thread (trim the quoted text down to the most recent/relevant messages only). &lt;br /&gt;
&lt;br /&gt;
===Use Proper Posting Style===&lt;br /&gt;
&lt;br /&gt;
* '''No HTML or Rich Text''': Set your mailer to send only plain text messages to avoid getting caught in our spam filters.&lt;br /&gt;
* '''Do not top post''': Top posting is replying to a message on &amp;quot;top&amp;quot; of the quoted text of the previous correspondence. This is highly unwanted in mailing lists because it increases the size of the daily digests to be sent out &amp;amp; is highly confusing and incoherent. By default, most email clients top post. Please, remove the irrelevant part of the previous communication(in case of more than a single correspondence) and use bottom, interleaved posting.&lt;br /&gt;
* '''Using interleaved posting''': Bottom, interleaved posting is replying to the relevant parts of the previous correspondence just below the block(s) of sentences. For a comment to another block of sentences of the same quoted text, you should move below that relevant block again. Do not reply below the whole of the quoted text. Also remove any irrelevant text.&lt;br /&gt;
* '''Use links''': Please provide URLs to articles wherever possible. Avoid cutting and pasting whole articles especially considering the fact that all may not be interested.&lt;br /&gt;
* '''Don't include attached files''': Instead of including attached files, please upload your file to the [[Special:Upload|MeeGo wiki]] and post a link to the file from your email message.&lt;br /&gt;
&lt;br /&gt;
===Do Not Hijack Threads ===&lt;br /&gt;
&lt;br /&gt;
Post new questions or new topics as new threads (new email message). Please do not reply to a random thread with a new question or start an unrelated topic of conversation in an existing thread. This creates confusion and makes it much less likely that you will get a response. &lt;br /&gt;
&lt;br /&gt;
===Do Not Cross Post===&lt;br /&gt;
&lt;br /&gt;
Avoid posting to multiple lists simultaneously. Pick a mailing list that is most suitable for your post and just use that. CC'ing multiple lists should be avoided.&lt;br /&gt;
&lt;br /&gt;
===Subscribers Only===&lt;br /&gt;
&lt;br /&gt;
Only subscribers can post to our mailing lists. If you would like to contribute to our mailing lists, we think it is only fair that you be a subscriber. Please note that if you want to participate only occasionally, you can subscribe to a list and set your email options to digest or no mail and read the web archives when you want to catch up. Some of the MeeGo lists are archived on [http://gmane.org/find.php?list=meego gmane.org]. gmane's web and news interface can be used to reply to archived emails without breaking the email thread.&lt;br /&gt;
&lt;br /&gt;
===Recipients===&lt;br /&gt;
&lt;br /&gt;
Always group-reply to an email. Some of the email recipients might not be subscribed, might have turned off email delivery, or read list emails with lower priority than emails addressed to them directly. For the same reasons it is advisable to add relevant people to the recipient list explicitly.&lt;br /&gt;
&lt;br /&gt;
==Guideline Violations==&lt;br /&gt;
&lt;br /&gt;
See our [[Community guidelines|process for dealing with violations]] for more details.&lt;br /&gt;
&lt;br /&gt;
==Requesting a New Mailing List==&lt;br /&gt;
&lt;br /&gt;
Keep in mind that we already have many mailing lists, so new lists need to be justified. Sending a request that has nothing more that &amp;quot;create mailing list x for me&amp;quot; will not be approved without additional justification.&lt;br /&gt;
&lt;br /&gt;
'''Before you request a new list'''&lt;br /&gt;
* Review '''all''' of our [[Community_communication#Mailing_Lists_and_Forums|existing mailing lists]]. Is there any way that you can use one of our existing lists to collaborate on your project.&lt;br /&gt;
* Think about the upstream lists. Most of the MeeGo components are based on upstream projects. Can you use the upstream infrastructure?&lt;br /&gt;
&lt;br /&gt;
'''How to make the request'''&lt;br /&gt;
* Send an email to [[User:Dawnfoster|Dawn Foster]] to request the list. &lt;br /&gt;
* Include answers to the following questions in your email.&lt;br /&gt;
&lt;br /&gt;
'''Answer the following questions in the request'''&lt;br /&gt;
* Why do you need this list?&lt;br /&gt;
* Who will be using this list?&lt;br /&gt;
* Who can I name as a co-owner of the list (this should be someone technical who is involved in the day to day working of the project)?&lt;br /&gt;
* Why are all of the the [[Community_communication#Mailing_Lists_and_Forums|existing lists]] unsuitable for your project?&lt;br /&gt;
* If it relates to an upstream project:&lt;br /&gt;
** Is there a reason you need a meego list and aren't using the upstream infrastructure?&lt;br /&gt;
** How do you you plan to use this list to contribute back to the upstream project and how will the 2 activities relate to each other?&lt;br /&gt;
&lt;br /&gt;
==Additional Resources==&lt;br /&gt;
* [http://www.shakthimaan.com/downloads/glv/presentations/mailing-list-etiquette.pdf Mailing list guidelines by Shakthi Kannan (PDF)]: Great guideline summary and examples of posting styles.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgements==&lt;br /&gt;
Credit to the [http://fedoraproject.org/wiki/Communicate/MailingListGuidelines Fedora Mailing List Guidelines] as a starting point under the [http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 Unported] license.&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Buteo/SyncFWClient</id>
		<title>Buteo/SyncFWClient</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Buteo/SyncFWClient"/>
				<updated>2010-08-30T06:05:59Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Synchronization Framework Client ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For reference headers, please see [http://meego.gitorious.org/meego-middleware/buteo-syncfw/blobs/master/libsyncfwclient/SyncClientInterface.h SyncClientInterface.h] and [http://meego.gitorious.org/meego-middleware/buteo-syncfw/blobs/master/libsyncprofile/Profile.h Profile.h]&lt;br /&gt;
&lt;br /&gt;
Create a new SyncClientInterface:&lt;br /&gt;
&lt;br /&gt;
    sci = new SyncClientInterface();&lt;br /&gt;
&lt;br /&gt;
Connect relevant signals (notification about sync progress and completion):&lt;br /&gt;
&lt;br /&gt;
    connect(sci, SIGNAL(syncStatus(QString,int,QString,int)), this, SLOT(slotSyncStatus(QString,int,QString,int)));&lt;br /&gt;
    connect(sci, SIGNAL(profileChanged(QString,int,Buteo::SyncProfile)), this, SLOT(profileChanged(QString,int,Buteo::SyncProfile)));&lt;br /&gt;
    connect(sci, SIGNAL(resultsAvailable(QString,Buteo::SyncResults)), this, SLOT(resultsAvailable(QString,Buteo::SyncResults)));&lt;br /&gt;
    connect(sci, SIGNAL(transferProgress(QString,int,int,QString)), this, SLOT(slotTransferProgress(QString,int,int,QString)));&lt;br /&gt;
&lt;br /&gt;
To load a profile one approach is to use a premade XML-file containing the settings:&lt;br /&gt;
&lt;br /&gt;
    QString file = &amp;quot;testsync-scheduleworld.xml&amp;quot;;&lt;br /&gt;
    QString profile = &amp;quot;scheduleworld&amp;quot;;&lt;br /&gt;
    QDomElement root = loadProfileFromXML(file);&lt;br /&gt;
&lt;br /&gt;
Where loadProfileFromXML is implemented as:&lt;br /&gt;
&lt;br /&gt;
    QDomDocument doc(&amp;quot;profile&amp;quot;);&lt;br /&gt;
    QFile file(fileName);&lt;br /&gt;
    doc.setContent(&amp;amp;file);&lt;br /&gt;
    file.close();&lt;br /&gt;
    QDomElement root = doc.documentElement();&lt;br /&gt;
    return root;&lt;br /&gt;
&lt;br /&gt;
Create a SyncProfile (which can then be modified to update settings etc):&lt;br /&gt;
&lt;br /&gt;
    SyncProfile syncProfile(root);&lt;br /&gt;
&lt;br /&gt;
'''Note that this is not the recommended approach.''' Clients should ask the framework for profiles that were added to the framework. TODO: add example for that part of the API.&lt;br /&gt;
&lt;br /&gt;
Change a setting for the profile:&lt;br /&gt;
&lt;br /&gt;
    syncProfile.setKey(&amp;quot;Username&amp;quot;, “myusername”);&lt;br /&gt;
    syncProfile.setKey(&amp;quot;Password&amp;quot;, “mypassword”);&lt;br /&gt;
&lt;br /&gt;
Add the profile, and start the sync:&lt;br /&gt;
&lt;br /&gt;
    sci-&amp;gt;addProfile(syncProfile);&lt;br /&gt;
    sci-&amp;gt;startSync(profile);&lt;br /&gt;
&lt;br /&gt;
To get a list of the running syncs:&lt;br /&gt;
   &lt;br /&gt;
    QStringList lst = sci-&amp;gt;getRunningSyncList();&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;Running syncs:&amp;quot; &amp;lt;&amp;lt; lst.length();&lt;br /&gt;
    for(int i = 0; i &amp;lt; lst.length(); i++) {&lt;br /&gt;
        qDebug() &amp;lt;&amp;lt; &amp;quot;Running&amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot;:&amp;quot; &amp;lt;&amp;lt; lst.at(i);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
For up to date information regarding the meaning of different status code, see [http://meego.gitorious.org/meego-middleware/buteo-syncfw/blobs/master/libsyncfwclient/SyncClientInterface.h SyncClientInterface.h].&lt;br /&gt;
&lt;br /&gt;
  void SyncHandler::slotSyncStatus(QString aProfileId, int aStatus, QString aMessage, int aErrorCode)&lt;br /&gt;
  {&lt;br /&gt;
    QString stat = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (aStatus == 0) {&lt;br /&gt;
        stat = &amp;quot;QUEUED&amp;quot;;&lt;br /&gt;
    } else if (aStatus == 1) {&lt;br /&gt;
        stat = &amp;quot;RUNNING&amp;quot;;&lt;br /&gt;
    } else if (aStatus == 2) {&lt;br /&gt;
        stat = &amp;quot;PROGRESSING&amp;quot;;&lt;br /&gt;
    } else if (aStatus == 3) {&lt;br /&gt;
        stat = &amp;quot;ERROR&amp;quot;;&lt;br /&gt;
        emit syncDone(-3);&lt;br /&gt;
    } else if (aStatus == 4) {&lt;br /&gt;
        stat = &amp;quot;DONE&amp;quot;;&lt;br /&gt;
    } else if (aStatus == 5) {&lt;br /&gt;
        stat = &amp;quot;ABORTED&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;STATUS CHANGE:&amp;quot; &amp;lt;&amp;lt; aProfileId &amp;lt;&amp;lt; stat &amp;lt;&amp;lt; aMessage &amp;lt;&amp;lt; aErrorCode;&lt;br /&gt;
  }&lt;br /&gt;
  void SyncHandler::profileChanged(QString aProfileId, int aChangeType, Buteo::SyncProfile aProfile)&lt;br /&gt;
  {&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;Profile changed:&amp;quot; &amp;lt;&amp;lt; aProfileId &amp;lt;&amp;lt; aChangeType;&lt;br /&gt;
  }&lt;br /&gt;
  void SyncHandler::resultsAvailable(QString aProfileId, Buteo::SyncResults aResults)&lt;br /&gt;
  {&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;Results available&amp;quot; &amp;lt;&amp;lt; aProfileId &amp;lt;&amp;lt; aResults.resultCode();&lt;br /&gt;
    if (aResults.resultCode() == Buteo::SyncResults::SYNC_RESULT_SUCCESS) {&lt;br /&gt;
        // Do something nice when we succeed&lt;br /&gt;
    } else if (aResults.resultCode() == Buteo::SyncResults::SYNC_RESULT_FAILED) {&lt;br /&gt;
        // Do something nice when there is a failure&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  void SyncHandler::slotTransferProgress(QString aProfileId, int aTransferDatabase, int aTransferType, QString aMimeType)&lt;br /&gt;
  {&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;Progress:&amp;quot; &amp;lt;&amp;lt; aProfileId &amp;lt;&amp;lt; aTransferDatabase &amp;lt;&amp;lt; aTransferType &amp;lt;&amp;lt; aMimeType;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sample XML files for Scheduleworld ==&lt;br /&gt;
&lt;br /&gt;
scheduleworld.com.xml (goes to /etc/sync/profiles/service/):&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;profile  name=&amp;quot;scheduleworld&amp;quot; type=&amp;quot;service&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;Remote database&amp;quot; value=&amp;quot;http://sync.scheduleworld.com/funambol/ds&amp;quot; /&amp;gt;&lt;br /&gt;
       &lt;br /&gt;
    &amp;lt;key name=&amp;quot;http_proxy_host&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;http_proxy_port&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;key name=&amp;quot;destinationtype&amp;quot; value=&amp;quot;online&amp;quot;/&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;profile name=&amp;quot;syncml&amp;quot; type=&amp;quot;client&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;use_wbxml&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Sync Transport&amp;quot; value=&amp;quot;HTTP&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Sync Direction&amp;quot; value=&amp;quot;two-way&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Sync Protocol&amp;quot; value=&amp;quot;SyncML12&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;profile name=&amp;quot;hcontacts&amp;quot; type=&amp;quot;storage&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Local URI&amp;quot; value=&amp;quot;./contacts&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Target URI&amp;quot; value=&amp;quot;./card&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/profile&amp;gt;&lt;br /&gt;
  &amp;lt;/profile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
scheduleworld.xml (goes to /etc/sync/profiles/sync/):&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;profile name=&amp;quot;scheduleworld&amp;quot; type=&amp;quot;sync&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;displayname&amp;quot; value=&amp;quot;scheduleworld&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;enabled&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;use_accounts&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;profile type=&amp;quot;service&amp;quot; name=&amp;quot;scheduleworld.com&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;profile name=&amp;quot;hcontacts&amp;quot; type=&amp;quot;storage&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;key name=&amp;quot;enabled&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/profile&amp;gt;&lt;br /&gt;
  &amp;lt;/profile&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Buteo/SyncFWClient</id>
		<title>Buteo/SyncFWClient</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Buteo/SyncFWClient"/>
				<updated>2010-08-18T13:07:58Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Synchronization Framework Client ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For reference headers, please see [http://meego.gitorious.org/meego-middleware/buteo-syncfw/blobs/master/libsyncfwclient/SyncClientInterface.h SyncClientInterface.h] and [http://meego.gitorious.org/meego-middleware/buteo-syncfw/blobs/master/libsyncprofile/Profile.h Profile.h]&lt;br /&gt;
&lt;br /&gt;
Create a new SyncClientInterface:&lt;br /&gt;
&lt;br /&gt;
    sci = new SyncClientInterface();&lt;br /&gt;
&lt;br /&gt;
Connect relevant signals (notification about sync progress and completion):&lt;br /&gt;
&lt;br /&gt;
    connect(sci, SIGNAL(syncStatus(QString,int,QString,int)), this, SLOT(slotSyncStatus(QString,int,QString,int)));&lt;br /&gt;
    connect(sci, SIGNAL(profileChanged(QString,int,Buteo::SyncProfile)), this, SLOT(profileChanged(QString,int,Buteo::SyncProfile)));&lt;br /&gt;
    connect(sci, SIGNAL(resultsAvailable(QString,Buteo::SyncResults)), this, SLOT(resultsAvailable(QString,Buteo::SyncResults)));&lt;br /&gt;
    connect(sci, SIGNAL(transferProgress(QString,int,int,QString)), this, SLOT(slotTransferProgress(QString,int,int,QString)));&lt;br /&gt;
&lt;br /&gt;
To load a profile one approach is to use a premade XML-file containing the settings:&lt;br /&gt;
&lt;br /&gt;
    QString file = &amp;quot;testsync-scheduleworld.xml&amp;quot;;&lt;br /&gt;
    QString profile = &amp;quot;scheduleworld&amp;quot;;&lt;br /&gt;
    QDomElement root = loadProfileFromXML(file);&lt;br /&gt;
&lt;br /&gt;
Where loadProfileFromXML is implemented as:&lt;br /&gt;
&lt;br /&gt;
    QDomDocument doc(&amp;quot;profile&amp;quot;);&lt;br /&gt;
    QFile file(fileName);&lt;br /&gt;
    doc.setContent(&amp;amp;file);&lt;br /&gt;
    file.close();&lt;br /&gt;
    QDomElement root = doc.documentElement();&lt;br /&gt;
    return root;&lt;br /&gt;
&lt;br /&gt;
Create a SyncProfile (which can then be modified to update settings etc):&lt;br /&gt;
&lt;br /&gt;
    SyncProfile syncProfile(root);&lt;br /&gt;
&lt;br /&gt;
'''Note that this is not the recommended approach.''' Clients should ask the framework for profiles that were added to the framework. TODO: add example for that part of the API.&lt;br /&gt;
&lt;br /&gt;
Change a setting for the profile:&lt;br /&gt;
&lt;br /&gt;
    syncProfile.setKey(&amp;quot;Username&amp;quot;, “myusername”);&lt;br /&gt;
    syncProfile.setKey(&amp;quot;Password&amp;quot;, “mypassword”);&lt;br /&gt;
&lt;br /&gt;
Add the profile, and start the sync:&lt;br /&gt;
&lt;br /&gt;
    sci-&amp;gt;addProfile(syncProfile);&lt;br /&gt;
    sci-&amp;gt;startSync(profile);&lt;br /&gt;
&lt;br /&gt;
To get a list of the running syncs:&lt;br /&gt;
   &lt;br /&gt;
    QStringList lst = sci-&amp;gt;getRunningSyncList();&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;Running syncs:&amp;quot; &amp;lt;&amp;lt; lst.length();&lt;br /&gt;
    for(int i = 0; i &amp;lt; lst.length(); i++) {&lt;br /&gt;
        qDebug() &amp;lt;&amp;lt; &amp;quot;Running&amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot;:&amp;quot; &amp;lt;&amp;lt; lst.at(i);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Slots ==&lt;br /&gt;
&lt;br /&gt;
For up to date information regarding the meaning of different status code, see [http://meego.gitorious.org/meego-middleware/buteo-syncfw/blobs/master/libsyncfwclient/SyncClientInterface.h SyncClientInterface.h].&lt;br /&gt;
&lt;br /&gt;
  void SyncHandler::slotSyncStatus(QString aProfileId, int aStatus, QString aMessage, int aErrorCode)&lt;br /&gt;
  {&lt;br /&gt;
    QString stat = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (aStatus == 0) {&lt;br /&gt;
        stat = &amp;quot;QUEUED&amp;quot;;&lt;br /&gt;
    } else if (aStatus == 1) {&lt;br /&gt;
        stat = &amp;quot;RUNNING&amp;quot;;&lt;br /&gt;
    } else if (aStatus == 2) {&lt;br /&gt;
        stat = &amp;quot;PROGRESSING&amp;quot;;&lt;br /&gt;
    } else if (aStatus == 3) {&lt;br /&gt;
        stat = &amp;quot;ERROR&amp;quot;;&lt;br /&gt;
        emit syncDone(-3);&lt;br /&gt;
    } else if (aStatus == 4) {&lt;br /&gt;
        stat = &amp;quot;DONE&amp;quot;;&lt;br /&gt;
    } else if (aStatus == 5) {&lt;br /&gt;
        stat = &amp;quot;ABORTED&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;STATUS CHANGE:&amp;quot; &amp;lt;&amp;lt; aProfileId &amp;lt;&amp;lt; stat &amp;lt;&amp;lt; aMessage &amp;lt;&amp;lt; aErrorCode;&lt;br /&gt;
  }&lt;br /&gt;
  void SyncHandler::profileChanged(QString aProfileId, int aChangeType, Buteo::SyncProfile aProfile)&lt;br /&gt;
  {&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;Profile changed:&amp;quot; &amp;lt;&amp;lt; aProfileId &amp;lt;&amp;lt; aChangeType;&lt;br /&gt;
  }&lt;br /&gt;
  void SyncHandler::resultsAvailable(QString aProfileId, Buteo::SyncResults aResults)&lt;br /&gt;
  {&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;Results available&amp;quot; &amp;lt;&amp;lt; aProfileId &amp;lt;&amp;lt; aResults.resultCode();&lt;br /&gt;
    if (aResults.resultCode() == Buteo::SyncResults::SYNC_RESULT_SUCCESS) {&lt;br /&gt;
        // Do something nice when we succeed&lt;br /&gt;
    } else if (aResults.resultCode() == Buteo::SyncResults::SYNC_RESULT_FAILED) {&lt;br /&gt;
        // Do something nice when there is a failure&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  void SyncHandler::slotTransferProgress(QString aProfileId, int aTransferDatabase, int aTransferType, QString aMimeType)&lt;br /&gt;
  {&lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; &amp;quot;Progress:&amp;quot; &amp;lt;&amp;lt; aProfileId &amp;lt;&amp;lt; aTransferDatabase &amp;lt;&amp;lt; aTransferType &amp;lt;&amp;lt; aMimeType;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sample XML files for Scheduleworld ==&lt;br /&gt;
&lt;br /&gt;
scheduleworld.com.xml (goes to /etc/sync/profiles/service/):&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;profile  name=&amp;quot;scheduleworld&amp;quot; type=&amp;quot;service&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;Remote database&amp;quot; value=&amp;quot;http://sync.scheduleworld.com/funambol/ds&amp;quot; /&amp;gt;&lt;br /&gt;
       &lt;br /&gt;
    &amp;lt;key name=&amp;quot;Username&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;Password&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;key name=&amp;quot;http_proxy_host&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;http_proxy_port&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;key name=&amp;quot;destinationtype&amp;quot; value=&amp;quot;online&amp;quot;/&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;profile name=&amp;quot;syncml&amp;quot; type=&amp;quot;client&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;use_wbxml&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Sync Transport&amp;quot; value=&amp;quot;HTTP&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Sync Direction&amp;quot; value=&amp;quot;two-way&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Sync Protocol&amp;quot; value=&amp;quot;SyncML12&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;profile name=&amp;quot;hcontacts&amp;quot; type=&amp;quot;storage&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Local URI&amp;quot; value=&amp;quot;./contacts&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;key name=&amp;quot;Target URI&amp;quot; value=&amp;quot;./card&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/profile&amp;gt;&lt;br /&gt;
  &amp;lt;/profile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
scheduleworld.xml (goes to /etc/sync/profiles/sync/):&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;profile name=&amp;quot;scheduleworld&amp;quot; type=&amp;quot;sync&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;displayname&amp;quot; value=&amp;quot;scheduleworld&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;enabled&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;use_accounts&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;key name=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;profile type=&amp;quot;service&amp;quot; name=&amp;quot;scheduleworld.com&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;profile name=&amp;quot;hcontacts&amp;quot; type=&amp;quot;storage&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;key name=&amp;quot;enabled&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/profile&amp;gt;&lt;br /&gt;
  &amp;lt;/profile&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Buteo</id>
		<title>Buteo</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Buteo"/>
				<updated>2010-08-18T12:41:30Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Buteo Sync Solution =&lt;br /&gt;
The Buteo Sync solution is a complete solution that broadly provides the following synchronization services:&lt;br /&gt;
* Device to device synchronization of PIM data (Contacts and Calendar for now) based on SyncML&lt;br /&gt;
* Device to cloud synchronization of PIM data (ovi.com, Scheduleworld.com etc.) based on SyncML&lt;br /&gt;
* Synchronization of media content to PC based on MTP&lt;br /&gt;
* Device to PC synchronization (currently only OviSuite, but this requires contract with OviSuite to support a particular device)&lt;br /&gt;
&lt;br /&gt;
In order to cater to the above service, the following components are available in the Buteo Sync solution:&lt;br /&gt;
* Synchronization Framework - a generic framework providing a pluggable architecture. More information [[http://wiki.meego.com/Buteo/Framework here]]&lt;br /&gt;
* SyncML stack - a OMA DS 1.1 and 1.2 compliant SyncML stack More information [[http://wiki.meego.com/Buteo/SyncML here]]&lt;br /&gt;
* MTP stack - A Media Transfer Protocol 1.0 compliant MTP implemenation. More information [[http://wiki.meego.com/Buteo/MTP here]]&lt;br /&gt;
* Sync plugins - a syncml sync plugin and a MTP sync plugin that hook into the synchronization framework&lt;br /&gt;
&lt;br /&gt;
All the above components make up the Buteo Sync solution with the capability of being extended to accommodate more protocols. Refer to the individual pages to understand more about the individual components&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
&lt;br /&gt;
To request enhancements or report bugs, please check the [[http://bugs.meego.com/buglist.cgi?type0-1-0=notequals&amp;amp;field0-1-0=product&amp;amp;field0-0-0=component&amp;amp;query_format=advanced&amp;amp;value0-2-0=SyncEvolution&amp;amp;value0-1-0=SyncEvolution&amp;amp;bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=REOPENED&amp;amp;field0-2-0=component&amp;amp;type0-0-0=substring&amp;amp;value0-0-0=sync&amp;amp;type0-2-0=notequals list of known issues]] and then [[http://bugs.meego.com/enter_bug.cgi?product=OS%20Middleware&amp;amp;component=Buteo%20Sync report new issues]] or [[http://bugs.meego.com/enter_bug.cgi?product=MeeGo%20Core%20OS%20Features&amp;amp;component=Device%20sync propose new features]].&lt;br /&gt;
&lt;br /&gt;
Discussion of Buteo development happens in the issue tracker, on the [[http://lists.meego.com/listinfo/meego-dev Meego Developer list]] and on IRC (freenode.org, #meego-sync).&lt;br /&gt;
&lt;br /&gt;
Source code can be found in the [[http://meego.gitorious.org/meego-middleware Buteo repositories on meego.gitorious.org]].&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Buteo</id>
		<title>Buteo</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Buteo"/>
				<updated>2010-07-14T09:27:53Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Buteo Sync Solution =&lt;br /&gt;
The Buteo Sync solution is a complete solution that broadly provides the following synchronization services:&lt;br /&gt;
* Device to device synchronization of PIM data (Contacts and Calendar for now) based on SyncML&lt;br /&gt;
* Device to cloud synchronization of PIM data (ovi.com, Scheduleworld.com etc.) based on SyncML&lt;br /&gt;
* Synchronization of media content to PC based on MTP&lt;br /&gt;
* Device to PC synchronization (currently only OviSuite, but this requires contract with OviSuite to support a particular device)&lt;br /&gt;
&lt;br /&gt;
In order to cater to the above service, the following components are available in the Buteo Sync solution:&lt;br /&gt;
* Synchronization Framework - a generic framework providing a pluggable architecture. More information [[http://wiki.meego.com/Buteo/Framework here]]&lt;br /&gt;
* SyncML stack - a OMA DS 1.1 and 1.2 compliant SyncML stack More information [[http://wiki.meego.com/Buteo/SyncML here]]&lt;br /&gt;
* MTP stack - A Media Transfer Protocol 1.0 compliant MTP implemenation. More information [[http://wiki.meego.com/Buteo/MTP here]]&lt;br /&gt;
* Sync plugins - a syncml sync plugin and a MTP sync plugin that hook into the synchronization framework&lt;br /&gt;
&lt;br /&gt;
All the above components make up the Buteo Sync solution with the capability of being extended to accommodate more protocols. Refer to the individual pages to understand more about the individual components&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
&lt;br /&gt;
To request enhancements or report bugs, please check the [[http://bugs.meego.com/buglist.cgi?classification=MeeGo%20Platform&amp;amp;query_format=advanced&amp;amp;bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=REOPENED&amp;amp;component=Buteo%20Sync&amp;amp;product=OS%20Middleware list of known issues]] and then [[http://bugs.meego.com/enter_bug.cgi?product=OS%20Middleware&amp;amp;component=Buteo%20Sync file new issues]].&lt;br /&gt;
&lt;br /&gt;
Discussion of Buteo development happens in the issue tracker, on the [[http://lists.meego.com/listinfo/meego-dev Meego Developer list]] and on IRC (freenode.org, #meego-sync).&lt;br /&gt;
&lt;br /&gt;
Source code can be found in the [[http://meego.gitorious.org/meego-middleware Buteo repositories on meego.gitorious.org]].&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Talk:SDK/Docs/1.0/Building_a_MeeGo_chroot_on_Linux</id>
		<title>Talk:SDK/Docs/1.0/Building a MeeGo chroot on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Talk:SDK/Docs/1.0/Building_a_MeeGo_chroot_on_Linux"/>
				<updated>2010-06-28T14:04:34Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some of the content on this page duplicates the content on [[Hello World - MeeGo x86 development on Linux]].&lt;br /&gt;
&lt;br /&gt;
It would be nice to remove this duplication, but the problem is that the manual Simulator build needs you install packages from within the chroot; while the tarball has the required packages installed already. Finding a way to separate out the chroot explanation has proved difficult as a result.&lt;br /&gt;
&lt;br /&gt;
I've been trying to think of an approach which removes the redundancy, but have not come up with anything reasonable yet. I'll keep trying.&lt;br /&gt;
&lt;br /&gt;
The page uses sdk.download.location in some URLs.&lt;br /&gt;
&lt;br /&gt;
Should that be download3.meego.com?&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Who%27s_who</id>
		<title>Who's who</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Who%27s_who"/>
				<updated>2010-02-19T14:54:04Z</updated>
		
		<summary type="html">&lt;p&gt;Pohly: /* MeeGo developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Technical Steering Group ==&lt;br /&gt;
''Members of the [http://meego.com/about/governance TSG]''&lt;br /&gt;
&lt;br /&gt;
* [http://meego.com/users/imad Imad Sousou/imad] - Benevolent dictator&lt;br /&gt;
* [http://meego.com/users/valhalla Valtteri Halla] - Benevolent dictator&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
== Maemo community stakeholders ==&lt;br /&gt;
'' Official representatives of the Maemo community''&lt;br /&gt;
&lt;br /&gt;
* [http://meego.com/users/qgil Quim Gil/qgil] - Nokia's Maemo Community Manager&lt;br /&gt;
* [http://meego.com/users/tekojo Tero Kojo/tekojo] - Nokia's Maemo Technical Project Manager&lt;br /&gt;
* [http://meego.com/users/xfade Niels Breet/X-Fade] - maemo.org webmaster&lt;br /&gt;
* Dave Neary/dneary - maemo.org docmaster&lt;br /&gt;
* [http://meego.com/users/andre André Klapper/andre__] - maemo.org bugmaster&lt;br /&gt;
* [http://meego.com/users/jeremiah Jeremiah Foster/jeremiah] - maemo.org debmaster &lt;br /&gt;
* [http://meego.com/users/reggie Reggie Suplido] - maemo.org talkmaster&lt;br /&gt;
* [http://meego.com/users/stskeeps Carsten Munk/Stskeeps] - maemo.org distmaster &amp;amp; Mer project lead&lt;br /&gt;
* [http://meego.com/users/bergie Henri Bergius/bergie] - maemo.org web/Midgard developer&lt;br /&gt;
* [http://meego.com/users/vdvsx Valerio Valerio/VDVsx] - Maemo Community Council chair&lt;br /&gt;
* [http://meego.com/users/texrat Randall Arnold/Texrat] - Maemo Community Council member&lt;br /&gt;
* [http://meego.com/users/qole Alan Bruce/qole] - Maemo Community Council member&lt;br /&gt;
* [http://meego.com/users/penguinbait Matthew Lewis/penguinbait] - Maemo Community Council member&lt;br /&gt;
* Graham Cobb - Maemo Commnunity Council member&lt;br /&gt;
&lt;br /&gt;
== Moblin community stakeholders ==&lt;br /&gt;
''Representatives of the Moblin community''&lt;br /&gt;
&lt;br /&gt;
* [http://meego.com/users/dirkhh Dirk Hohndel/dirkhh] - Chief Linux and open source technologist at Intel&lt;br /&gt;
* [http://meego.com/users/townxelliot Elliot Smith/townxelliot] - Moblin.org &amp;amp; meego.com website techy&lt;br /&gt;
* [http://meego.com/users/mshaver Michael Shaver/mshaver] - Moblin.org webmaster &amp;amp; meego.com website developer&lt;br /&gt;
* [http://meego.com/users/margie Margie Foster/mlfoster] - Localization project manager for Moblin &amp;amp; meego.com website developer&lt;br /&gt;
&lt;br /&gt;
== MeeGo developers ==&lt;br /&gt;
'' People paid to contribute to MeeGo and/or have commit rights''&lt;br /&gt;
&lt;br /&gt;
* [http://meego.com/users/nashif Anas Nashif/anaZ] - Random developer&lt;br /&gt;
* [http://meego.com/users/auke Auke Kok/auke] - Developer&lt;br /&gt;
* [http://meego.com/users/hbons Hylke Bons/hbons] - User Experience Designer&lt;br /&gt;
* [http://meego.com/users/jku Jussi Kukkonen/jku] - Developer&lt;br /&gt;
* [http://meego.com/users/nmcgovern Neil McGovern/nmcgovern] - Developer&lt;br /&gt;
* [http://meego.com/users/pohly Patrick Ohly/pohly] - Developer&lt;br /&gt;
* [http://meego.com/users/quang Quang Pham/quang] - Developer&lt;br /&gt;
&lt;br /&gt;
== MeeGo community ==&lt;br /&gt;
''Anyone not in the above sections'' (Please keep this list alphabetically-ordered, as it will make finding people easier.)&lt;br /&gt;
&lt;br /&gt;
* [http://meego.com/users/aboaboit Andrea Borgia/aboaboit] - Maemo community member&lt;br /&gt;
* [http://meego.com/users/jaffa Andrew Flegg/Jaffa] - Long term gadget freak &amp;amp; Maemo community member&lt;br /&gt;
* [http://meego.com/users/lbt David Greaves/lbt] - Mer OBS build guy&lt;br /&gt;
* [http://meego.com/users/glezos Dimitris Glezos/glezos] - Localization Engineer ([http://www.transifex.net/ Transifex])&lt;br /&gt;
* [http://borasky-research.net M. Edward (Ed) Borasky] - Linux capacity planning / audio / openSUSE / Twitter geek&lt;br /&gt;
* [http://meego.com/users/debernardis Ernesto de Bernardis/debernardis] - Maemo community member, mobile device tinkerer&lt;br /&gt;
* [http://meego.com/users/fabo Fathi Boudra / fabo] - Debian developer, Maemo community member, software engineer&lt;br /&gt;
* [http://meego.com/users/slaine Glen Gray / slaine] - Moblin community member, software engineer&lt;br /&gt;
* [http://meego.com/users/dl9pf Jan-Simon Möller / dl9pf ] - Build service developer, Linux Foundation&lt;br /&gt;
* [http://meego.com/users/zerojay Jason Carter/zerojay] - Long term Maemo community member&lt;br /&gt;
* [http://meego.com/users/lpotter Lorn Potter/lpotter/ljp] - QDF, Mobility, Nokia,&lt;br /&gt;
* [http://meego.com/users/martinmohring Martin Mohring / ScriptRipper] - Buildservice developer, Linux Foundation&lt;br /&gt;
* [http://meego.com/users/niqt Nicola De FIlippo/niqt] - Qt4 Maemo Contributor, Maemo community member, software engineer&lt;br /&gt;
* [http://meego.com/users/rhertzog Raphaël Hertzog / buxy ] - Debian developer, [http://www.freexian.com self-employed] as free software consultant/developer.&lt;br /&gt;
* [http://meego.com/users/w00t Robin Burchell/w00t] - Developer of random things, gadget enthusiast, Maemo community member&lt;br /&gt;
* [http://meego.com/users/generalantilles Ryan Abel/GeneralAntilles] - Long term Maemo community member&lt;br /&gt;
* [http://meego.com/users/slauwers Sebastian Lauwers/crashanddie] - Community member, talk.maemo.org moderator / ActivIdentity Professional Services Technical Consultant&lt;br /&gt;
* [http://meego.com/users/timeless timeless/timeless] - Mozilla contributor, Nokia employee.&lt;br /&gt;
* [http://meego.com/users/timsamoff Tim Samoff / timsamoff] - Designer (graphic, UI, interaction, web), long-time Maemo Community member (two-term Maemo Community Council Member), and forever open source advocate&lt;br /&gt;
* [http://meego.com/users/corsac Yves-Alexis Perez / Corsac] - Debian developer, Maemo community member, security engineer&lt;br /&gt;
__NOTOC__ &amp;lt;!-- disable the table of contents from ever being shown --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Pohly</name></author>	</entry>

	</feed>