Kontact / Akonadi <-> Horde Sync

Posted by on 08 Jul 2010 | Tagged as: hyper_ch, KDE

Ich habe eine Horde Installation (eine mit H3 und noch eine Testinstallation mit H4 – die ich aber erst noch am testen bin) und ich musste feststellen, dass die ToDos nicht sauber von Kontact / Akonadi nach Horde synchronisizert werden.

Der Grund dafür ist ziemlich banal. Wenn in Kontact ein Todo als “fertig” markiert wird, dann benutzt es PERCENTAGE-COMPLETE:100. Horde hingegen betrachtet Todos nur als “fertig” an, wenn STATUS:COMPLETED ist. Ich habe dies entsprechend den Horde wie auch Akonadi Enwicklern mitgeteilt, aber beide weigern sich auch nur einen Schritt auf den andern zu zugehen. Die Folge ist, dass die Todos nicht sauber abgeschlossen werden können.

Wie man sieht, sollte das Problem eigentlich ganz einfach zu beheben sein. Trotz vieler Monate die vergangen sind, wurde bisher nichts unternommen.

Also habe ich mich dann dran gesetzt und eine Lösung gesucht und bin zu folgendem Schluss gekommen:

(1) Man öffne folgende Datei horde/nag/lib/api.php

(2) Man suche

function _nag_put($path, $content, $content_type)
{
    require_once dirname(__FILE__) . '/base.php';

(3) Man füge darunter ein:

$tmp = explode('BEGIN:VTODO', $content);
        foreach ($tmp as $val) {
                $findme   = 'PERCENT-COMPLETE:100';
                $pos = strpos($val, $findme);
                if ($pos !== false) {
                        $tmp2[] = str_replace('STATUS:NEEDS-ACTION', 'STATUS:COMPLETED', $val);
                } else {
                        $tmp2[] = str_replace('STATUS:COMPLETED', 'STATUS:NEEDS-ACTION', $val);
                }
        }
        $content = implode('BEGIN:VTODO', $tmp2);

(4) So dass es nun folgendermassen aussieht:

function _nag_put($path, $content, $content_type)
{
    require_once dirname(__FILE__) . '/base.php';
        $tmp = explode('BEGIN:VTODO', $content);
        foreach ($tmp as $val) {
                $findme   = 'PERCENT-COMPLETE:100';
                $pos = strpos($val, $findme);
                if ($pos !== false) {
                        $tmp2[] = str_replace('STATUS:NEEDS-ACTION', 'STATUS:COMPLETED', $val);
                } else {
                        $tmp2[] = str_replace('STATUS:COMPLETED', 'STATUS:NEEDS-ACTION', $val);
                }
        }
        $content = implode('BEGIN:VTODO', $tmp2);
    if (substr($path, 0, 3) == 'nag') {
        $path = substr($path, 3);
    }

(5) Man speichere die Datei und nun sollte es funktionieren.

Grundsätzlich wird damit folgendes gemacht:

– es wird der Input übernommen
– es wird der gesamte Input bei jedem ‘BEGIN:VTODO’ in einen Array gespalten
– danach wird jedes Array-Element durchsucht, ob dort der String ‘PERCENT-COMPLETE:100’ vorkommt.
– ist dies der Fall, dann sollen alle STATUS Felder auf COMPLETE gesetzt werden in diesem Array-Element; ist dies nicht der Fall, dann sollen alle STATUS Felder auf NEEDS-ACTION gesetzt werden
– mit dem Implode am Schluss wird der Array wieder in einen String umgewandelt und ‘BEGIN:VTODO’ wird als Verbindungselement zwischen den Array-Elementen eingefügt.

Ich habe das nur auf H3 getestet und habe mir die H4 nag/lib/api.php nicht angeschaut. Ich gehe aber davon aus, dass es dort ähnlich funktionieren dürfte.

4 Responses to “Kontact / Akonadi <-> Horde Sync”

  1. on 15 Aug 2010 at 19:24 1.Nils said …

    wie synchronisierst du bitte zwischen akonadi und horde? Ich habe bisher noch keine brauchbare Lösung gefunden. Für einen Tipp wäre ich dankbar!

  2. on 15 Aug 2010 at 19:38 2.hyper_ch said …

    (1) Zuerst mal Akonadi GUI starten (KMenu -> Akonadi Configuration)
    (2) Add KDE calendar (traditional)
    (3) Dann Download/Upload irgendwas wie: http://www.domain.ch/horde/rpc.php/kronolith/USER/USER.ics resp. http://www.domain.com/horde/rpc.php/nag/USER/USER.ics

  3. on 30 Aug 2011 at 17:44 3.Fabian said …

    Hallo,
    Dieser Beitrag ist hier zwar schon etwas älter, aber meines Wissens besteht das Problem immer noch zwischen Akonadi/Kontact und Horde 3. Außerdem werden auch die Informationen über Erinnerungen und Teilnehmern eines Termins vergessen, nachdem sie einmal per Webdav an Horde geschickt wurden. Alles in allem ziemlich nervig. Gibt es da schon Erfahrungswerte mit Horde 4?

  4. on 30 Aug 2011 at 18:57 4.hyper_ch said …

    Webdav auf H4 ist für mich immer noch problematisch… :(