View source for PIM Storage

From Openmoko

Jump to: navigation, search

You do not have permission to edit this page, for the following reasons:

  • The action you have requested is limited to users in the group: Administrators.
  • You must confirm your email address before editing pages. Please set and validate your email address through your user preferences.

You can view and copy the source of this page:

Return to PIM Storage.

Personal tools


PIM storage describes a means of storing data in an extensible and cross-referencable way.

Goals & Objectives

  • Method to exchange data between all applications completely transparent
  • Personal data security / encryption
  • Great bidirectional sync of personal data
  • Easy method for backup (ideally this should be automatic)
  • Real-time incremental search
  • Autocomplete of personal data information

Use Cases

  • I would like to attach arbitrary data to a contact (AKA: custom fields)
  • I would like some level of integration with automatic switching of profiles. For example, it would be cool to automatically backup my personal data to my desktop PC when I get home.
  • I want to type the first few numbers of a phone number and be presented a list of matching contacts.
    • I'd rather take a person, choose home/work, choose land-line/mobile and not bother with numbers anymore. Useful when I'm on my way to meet that person, or the person has his/her birthday, i.e. the person is already listed on my screen!
  • I want to add a contact to multiple groups (AKA: categories)
  • I want to be able to send my contact info to other Openmoko devices over bluetooth
  • I want to be able to two-way sync all calendar, contacts (and tasks) with a GroupDAV server (e.g. Citadel) over-the-air



Implementation Recommendations

  • This will be based on Embedded EDS, this way we will can directly use Evolution data, get OpenSync for free, and eventually be able to talk to a Microsoft Exchange Server using the Novell Connector.
  • Alternatively: Go for a radically different approach: Use Topic Maps to store PIM data, use Topic Map's integrated merging features for syncing. --xbaldauf
    • Topic Maps allow multi-way sync, storage of arbitrary data (including categories, and even a hierarchy of categories), integration of PIM data which is separated otherwise (calendar, addressbook, personal notes, representing networks who knows whom and who works for whom and on which project, ...), multiple entries for each field (e.g. multiple addresses, multiple names, multiple phone numbers, ...)


  • Embedded EDS needs libglade2, D-Bus, and libdb.

Unresolved Issues

  • Synchronizing w/ Outlook
  • Synchronizing w/ MacOS X - most Macs have bluetooth builtin and OSX addressbook supports BT sync.
  • Synchronizing w/ Google services

Possible solutions:

  • mokod - An Openmoko daemon to run on host operating systems
  • Syncevolution can sync with Scheduleworld which can sync with Google, and other programs.
  • Hack the libsyncml stack to work in OpenMoko and sync with OpenSync. Solve the connectivity problem and move the supporting-the-other-peers to modular, plugin based OpenSync.

Import/Export of Calendar Data for PIM-Storage

This Import/Export can be realized by syncing an ics Calendar File (e.g. std.ics from Kontact-KDE, ...) by parsing this ICS-file (iCal) and import the ics-file to the PIM-Storage on the OpenMoko device. Make sure you have sqlite3 client installed

opkg install sqlite3

The PIM database file on the OpenMoko device is located at


You can handle the file with sqlite (see Import Vcf Contacts):

  sqlite3 ~/Applications/Qtopia/qtopia_db.sqlite

For parsing the ics-File (iCal) on the OpenMoko device you need to install Perl

opkg install perl

Remark: The following desciption shows a possbible additional concept for PIM storage for import/export by application of OpenSource perl libraries that can be used to realized the concept.

Lets name the perl scripts and

  • will parse the ics-file and import it to the qtopia PIM storage. The script should have 2 parameters: (Par1) Input ics-file e.g. std.ics (Par2) Ouput sqlite-file - e.g. qtopia_db.sqlite.
  • will export the qtopia PIM storage to an ics-file. The script should have 2 parameters: (Par1) Input sqlite-file - e.g. qtopia_db.sqlite (Par2) Ouput ics-file - e.g. std.ics.

For parsing the ICS-file there are several CPAN perl libraries available

After parsing a file with SQL-Commands can be generated for the ics input file of that are used by sqlite3 to import the dates in the qtopia PIM storage In a first step of realisation of the old qtopia-db can be backuped and a full import of.

When all scripts are in place generate an icon in /usr/share/application that call and rsync command from to Openmoko device to copy the kontact-KDE ics-file parse it and copy it to the qtopia database. Create a directory remotecal in ~/Applications/Qtopia

  mkdir ~/Applications/Qtopia/remotecal

All temporary data during the import/export process can be stored in that directory. The ics-File is on the Linux-Computer with IP and an accout user. Lets assume that the ics-file is stored by the PIM Kontact in the directory /home/user/.kde/share/apps/korganizer/ on an Linux maschine with SSH daemon running, that is not blocked by the firewall (check firewall on Desktop computer). KDE-Kontact stores the calendar data in std.ics. This file should be used to update PIM storage. To automate this task a shell script might be useful. Lets call the following script for syncing the ics-file to OpenMoko device

 cd ~/Applications/Qtopia
 rsync -avz -e ssh user@ std.ics
 mv qtopia_db.sqlite qtopia_db.sqlite.backup
 perl /path_to_the_script/ std.ics qtopia_db.sqlite

You can execute the script by calling:

 sh /path_to_the_script/

When you call the script you have to enter the password of the aacount user on the desktop computer. is the IP of the desktop computer. It can be replaced by any IP you have your home directory with the ICS file on. Because you need to enter a password so far, it might be inconvient for an automated update. To automate this process see for using rsync and ssh without authentication. calls the perl script The perl script generates the SQL commands, store the commands in the file import.sql and calls the sqlite3 and import the calendar data in the sqlite-database via executing the SQL-Commands in import.sql.

To avoid to have the same events 2 times in the PIM storage the existing OpenMoko database should be exported first via to the file qtopia removing events from the SQL imput that already exist in the SQL database. Records that have changed should be updated via SQL commands.

 mv qtopia_db.sqlite qtopia_db.sqlite.backup
 perl /path_to_the_script/ qtopia_db.sqlite qtopia.ics 
 perl /path_to_the_script/ std.ics qtopia_db.sqlite qtopia.ics

Remark: The perl scripts mentioned above are not programmed yet (19.01.2009), they show a solution for syncing. The development of the perl scripts and mentioned above can be helpful in converting ical formats to and from the OpenMoko device anyway.

Questions and Answers

  • Q: When will an Embedded EDS specification be available? i.e. How I can get applications to store and retrieve data from in it, in a compatible way?
  • Q: Will it out of the box synchronize with the Kontact PIM suite (KDE)?