PalmDatebook class

Reads the calendar database of the Palm Desktop application.

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.

Compatibility: .NET Version 2.0 or newer

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.

Licence and terms of use

This software is released under the terms of the simplified BSD licence. You can find the detailed terms and conditions in the download.

Statistic data

  • Created on 2007-09-23, updated on 2012-01-18.
  • First used in Ready Calendar.
  • Ca. 260 lines of code, estimated development costs: 260 - 1 000 €