PalmDatebook-Klasse

Liest die Kalenderdatenbank der Palm-Desktop-Anwendung ein.

Palm Tungsten T3 and Palm Desktop screenshot

Früher, als PDAs modern waren, habe ich zuerst einen Palm Vx und später einen Palm Tungsten T3 (Abb. rechts) mein Eigen genannt. Die mitgelieferte Windows-Software Palm Desktop diente dabei als komfortablere Eingabe von Terminen, Kontakten und Notizen, die mit der praktischen HotSync-Funktion zum PDA synchronisiert wurden. Einen Papierkalender brauchte ich seitdem nicht mehr. Den PDA habe ich irgendwann wieder verkauft, das Desktop-Programm mit allen bereits getätigten Eingaben aber weiterhin verwendet. Das funktioniert zwar immer noch genauso gut wie früher, aber ein bisschen mehr Komfort und ein paar intelligentere Automatismen hätte ich langsam schon gerne gehabt. Die Entwicklung einer eigenen Kalender-Anwendung war die eine Sache, die Übernahme der Daten die andere. Nach ersten unglücklichen Versuchen, die Palm-Desktop-GUI zu steuern, habe ich ein Perl-Skript gefunden, das die Datebook-Datei direkt auslesen kann.

Dieses Perl-Skript diente mir dann als Grundlage, das Dateiformat zu verstehen. Weitere Details habe ich noch von einer anderen Webseite gelernt. So entstand diese PalmDatebook-Klasse, die alle gespeicherten Termine für C#-Programme zugänglich macht. Damit konnte ich schließlich auch die Palm-Import-Funktion für meinen Kalender fertigstellen. Das Beispiel unten zeigt einen vereinfachten Ausschnitt aus diesem Quelltext.

Kompatibilität: .NET Ab Version 2.0

Beispiel

Der folgende Beispielcode zeigt, wie die PalmDatebook-Klasse verwendet werden kann:

// Open the Palm Datebook file
var palmfile = new Unclassified.Interop.PalmDatebook(fileName);

// Read all appointment categories
Dictionary<uint, Category> categoryMap = new Dictionary<uint, Category>();
foreach (var category in palmfile.Categories)
{
    // Convert into application-specific category structure
    Category newCategory = new Category();
    newCategory.Name = category.Name;
    newCategory.BackColor = category.Color;
    newCategory.TextColor = Color.Black;
    db.AddCategory(newCategory);
    // Keep a reference on the category ID to assign it to appointments later
    categoryMap.Add(category.Id, newCategory);
}

// Read all appointments
foreach (var entry in palmfile.Entries)
{
    Appointment app = new Appointment();
    app.Text = entry.Description;
    app.EndTime = entry.EndTime;
    app.Location = entry.Location;
    app.Notes = entry.Note;
    app.StartTime = entry.StartTime;
    app.AllDay = entry.Untimed;
    app.Deleted = entry.Deleted;

    // Assign category instances
    if (entry.Category != null)
    {
        app.Categories.Add(categoryMap[entry.Category.Id]);
    }

    if (entry.Repeat != null &&
        entry.Repeat.Interval != PalmDatebook.RepeatInterval.None)
    {
        // Special repeat case: daily repeat with no exclusion
        // -> combine to a single spanning appointment
        if (app.AllDay &&
            entry.Repeat.Interval == PalmDatebook.RepeatInterval.Daily &&
            entry.Repeat.Frequency == 1 &&
            entry.Repeat.Exceptions.Length == 0)
        {
            app.EndTime = entry.Repeat.EndTime.AddDays(1);
        }
        else
        {
            // TODO: It's up to you to handle the recurrence data. :)
        }
    }
    if (app != null)
    {
        db.AddAppointment(app);
    }
}

Download

PalmDatebook.cs14,2 KiBQuelltext der PalmDatebook-Klasse

Änderungen

2012Jan18
Auslesen der Kategoriefarben hinzugefügt.

Lizenz und Nutzungsbedingungen

Diese Software wird unter den Bedingungen der vereinfachten BSD-Lizenz veröffentlicht. Die genauen Lizenzbedingungen befinden sich im Download.

Statistische Daten

  • Erstellt am 2007-09-23, aktualisiert am 2012-01-18.
  • Erstmals in Ready Calendar verwendet.
  • Ca. 260 Codezeilen, geschätzte Ent­wick­lungs­kos­ten: 260 - 1 000 €