\section{Implementation of the Backends} Opie Backends have implementations for XML, VCF and SQL. We can group the VCF and XML Backend in the File Family. \section{Locking, Journal and Visibility} Opie PIM encourages that all changes are made visible immediately and are propagated by Qt Signals by the Frontend but we recognize that not every Backend - specially the File Family - is capable of making every change physically available instantly or it would be too complex to develop this is why this feature is nice to have but not necessary implement by the Backend.\\ By default changes may not be lost by concurrent access and two different saves. The feature to implement is called Auto-Update the Backends can utilize QCOP for the communication. When one Backend saves the data it needs to lock the access (it can use API), check if external changes occurred and reload the data if necessary and then save the merged changes and finally to give up the lock. The user may call reload() any time and the access needs to be locked for that. The Backends can use the appropriate techniques to provide fast and secure operation.\\ The reload feature may be turned off for the Frontend so that a save() might possible override changes that occurred. \subsubsection{Journal and Out Of Memory} The Backend need to make sure that it is capable of surviving crashes and storage out of memory situation without losing data and changes.\\ The File Family is encouraged to use the journal on a per user basis to keep track of changes. The journal can be applied in case of a crash.\\ In out of disk storage situation the user needs to be informed so it might free space. \subsubsection{Features of the Backends} \begin{center} \begin{tabular}{|l|l|l|l|l|} \hline Backend & Live Update & Auto Update & Journal & Available\\ \hline XML & no & yes & no but SQL & after save \\ \hline SQL & yes & yes & yes & immediately \\ \hline VCF & no & no & no & never \\ \hline \end{tabular} \label{Feature of Backends} \end{center} \subsection{Generic Implementation} \subsubsection{Recurrence} FIXME \subsubsection{OPimState} FIXME \subsubsection{Reminders and Alarms} \subsection{Todo} \subsubsection{XML} % supported attributes \begin{tabular}{|l|l|} \hline Key & Possible Values \\ \hline Categories & Comma separated list of Integers \\ \hline Uid & Unique negative Integer generated by timet \\ \hline HasDate & 0 for false and 1 for true \\ \hline Completed & 1 for completed and 0 for not completed \\ \hline Description & Escaped multi line Text \\ \hline Summary & One line summary \\ \hline Priority & Between 0 and 5, 5 high priority \\ \hline DateDay & The Day for the DueDate \\ \hline DateMonth & The Month for the DueDate \\ \hline DateYear & The year for the DueDate \\ \hline Progress & 0,10,20,30,40,50,60,70,80,90,100 \\ \hline CompleteDate & YYYYMMDD formated Date \\ \hline StartDate & YYYYMMDD formated Date \\ \hline CrossReference & TODO!! \\ \hline State & Relates to OPimState 0-4 arre current values \\ \hline Alarms & YYYYMMDD:durationOfTheAlarm:sound:future multiple alarams are joined with ; \\ \hline Reminders & Notused TODO!!! \\ \hline rtype & Daily, Weekly, MonthlyDay, MonthlyDate, Yearly, None\\ \hline rweekdays & Char OPimReccruence::Days ored together \\ \hline rposition & The day in the week TODO\\ \hline rfreq & Every n (as int) \\ \hline start & The creation of the recurrence in UTC time\\ \hline rhasenddate & 1 if the recurrence has an end \\ \hline enddt & The end date of the recurrence from UTC time\\ \hline \end{tabular} \subsubsection{VCF} \subsubsection{SQL} \subsection{Contact} \subsubsection{XML} \subsubsection{VCF} \subsubsection{SQL} \subsection{Datebook} \subsubsection{XML} \subsubsection{VCF} \subsubsection{SQL}