PalmDatebook-Klasse
Liest die Kalenderdatenbank der Palm-Desktop-Anwendung ein.
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:
Beispiel
Der folgende Beispielcode zeigt, wie die PalmDatebook-Klasse verwendet werden kann:
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
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 Entwicklungskosten: 260 - 1 000 €