#!/env perl
use strict;
use warnings;
use 5.010;
use File::Find::Rule;
use Data::Dumper;
use App::TimeTracker::Data::Task;
use DateTime;
use Path::Class;
use Try::Tiny;
$|=1;
my ($in, $out) = @ARGV;
die "please specify dir containing old-style files" unless -d $in;
die "please specify dir to contain new-style files" unless -d $out;
$out = Path::Class::dir($out);
my @files = File::Find::Rule->file()->name(qr/\.(done|current)$/)
->in( $in );
foreach my $old (@files) {
open( my $fh, "<", $old ) || die "Cannot read file $old: $!";
try {
my %data;
while ( my $line = <$fh> ) {
chomp($line);
next unless $line =~ /^(\w+): (.*)/;
$data{$1} = $2;
}
my @tags;
if ($data{tags}) {
foreach (split(/\s+/,$data{tags})) {
push(@tags,$_);
}
}
my $task = App::TimeTracker::Data::Task->new({
start=>DateTime->from_epoch(epoch=>$data{start}, time_zone=>'local'),
stop=>DateTime->from_epoch(epoch=>$data{stop}, time_zone=>'local'),
project=>$data{project},
tags=>\@tags,
});
$task->save($out);
print '.';
}
catch {
die "An error occurred converting $old";
}
}
say "Finished processing " . scalar @files . " historic Tasks";