package Data::Plist::Foundation::LibraryToDo; use strict; use warnings; use base qw/Data::Plist::Foundation::ToDo Class::Accessor/; my %mapping = ( alarms => "ToDo Alarms", cal_id => "ToDo Calendar ID", calendar => "ToDo Calendar Title", complete => "ToDo Completed", completed_at => "ToDo Date Completed", created => "ToDo Date Created", due => "ToDo Due Date", notes => "ToDo Notes", priority => "ToDo Priority", title => "ToDo Title", url => "ToDo URL", id => "ToDo iCal ID", keys_digest => "ToDo Keys Digest", ); my %lookup = ( reverse %mapping ); sub init { my $self = shift; __PACKAGE__->mk_accessors( grep { not $self->can($_) } keys %mapping ); $self->{ $lookup{$_} } = delete $self->{$_} for grep { exists $lookup{$_} } keys %{$self}; $self->due(undef) unless delete $self->{"ToDo Due Date Enabled"}; $self->priority(undef) unless delete $self->{"ToDo Priority Enabled"}; } sub serialize_equiv { my $self = shift; my $hash = {}; $hash->{ $mapping{$_} } = $self->{$_} for keys %{$self}; return $hash; } sub serialize { my $self = shift; my $ret = $self->SUPER::serialize; $ret->[1]{"ToDo Completed"} = $self->{complete} ? [ true => 1 ] : [ false => 0 ]; if ( $self->{due} ) { $ret->[1]{"ToDo Due Date Enabled"} = [ true => 1 ]; } else { delete $ret->[1]{"ToDo Due Date"}; $ret->[1]{"ToDo Due Date Enabled"} = [ false => 0 ]; } if ( defined $self->{priority} ) { $ret->[1]{"ToDo Priority Enabled"} = [ true => 1 ]; } else { $ret->[1]{"ToDo Priority"} = [ integer => 1 ]; $ret->[1]{"ToDo Priority Enabled"} = [ false => 0 ]; } return $ret; } 1;