#!/usr/bin/perl

# Convert ToDo.pdb to iCalendar
# Copyleft 2006 Yoshizumi Endo <y-endo@ceres.dti.ne.jp>

use Palm::PDB;
use Palm::ToDo;
use encoding "shift-jis", STDOUT=>"euc-jp";

my $pri=3;

my $dbfile = "$ENV{HOME}/.jpilot/ToDoDB.pdb";        
my $todofile ="$ENV{HOME}/.evolution/tasks/local/system/tasks.ics";
my $data_server = "evolution-data-server-1.4";

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) 
    = gmtime(time);
my $gmt = sprintf("%04d%02d%02dT%02d%02d%02d", 
	       $year + 1900, $mon +1, $mday, $hour, $min, $sec);

my $pdb = new Palm::PDB;
$pdb->Load($dbfile) || die "Can't open: $dbfile!\n";
my @categories = @{$pdb->{appinfo}{categories}}; # extract each category names

open(ICS, ">:utf8", $todofile) || die "Can't open: $todofile!\n";
select(ICS);

print "BEGIN:VCALENDAR\nVERSION:2.0\n";
print "PRODID:-//Yoshizumi Endo//NONSGML todo2ical.pl//EN\n";

my $i=0;

foreach $record (@{$pdb->{records}}) {

    if ($record->{completed} eq "" && $record->{priority} <= $pri) {

	print "BEGIN:VTODO\n";
	print "UID:todo2ical-$gmt-$record->{id}-$ENV{USER}\@$ENV{HOST}\n";
	print "DTSTAMP:$gmt\n";
	print "CATEGORIES:$categories[$record->{category}]->{name}\n";
	print "SUMMARY:$record->{description}\n";
	print "DESCRIPTION:$record->{description}\n";
	print "STATUS:NEEDS-ACTION\n";
	print "PRIORITY:$record->{priority}\n";
	if ($record->{due_year}) {
	    printf ("DUE;VALUE=DATE:%04d%02d%02d\n", $record->{due_year}, 
		    $record->{due_month}, $record->{due_day});}	    
	print "END:VTODO\n";

	$i++;
    }
}    

print "END:VCALENDAR\n";

# exec ("killall -HUP $data_server");

