[BACK]Return to Todo.pm CVS log [TXT][DIR] Up to [local] / todotxt / Text-Todo / lib / Text

Diff for /todotxt/Text-Todo/lib/Text/Todo.pm between version 1.11 and 1.16

version 1.11, 2010/01/10 01:01:45 version 1.16, 2010/01/12 19:40:52
Line 1 
Line 1 
 package Text::Todo;  package Text::Todo;
   
 # $RedRiver: Todo.pm,v 1.10 2010/01/09 20:41:45 andrew Exp $  # $AFresh1: Todo.pm,v 1.15 2010/01/11 19:52:06 andrew Exp $
   
 use warnings;  use warnings;
 use strict;  use strict;
Line 25 
Line 25 
         my $ident = ident($self);          my $ident = ident($self);
   
         $path_of{$ident} = {          $path_of{$ident} = {
             todo_dir    => undef,              todo_dir  => undef,
             todo_file   => 'todo.txt',              todo_file => 'todo.txt',
             done_file   => undef,              done_file => undef,
             report_file => undef,  
         };          };
   
         if ($options) {          if ($options) {
Line 38 
Line 37 
                         $self->_path_to( $opt, $options->{$opt} );                          $self->_path_to( $opt, $options->{$opt} );
                     }                      }
                     else {                      else {
                         carp "Invalid option [$opt]";  
                           #carp "Invalid option [$opt]";
                     }                      }
                 }                  }
             }              }
Line 160 
Line 160 
         open my $fh, '<', $file or croak "Couldn't open [$file]: $!";          open my $fh, '<', $file or croak "Couldn't open [$file]: $!";
         while (<$fh>) {          while (<$fh>) {
             s/\r?\n$//xms;              s/\r?\n$//xms;
             next if !length $_;  
             push @list, Text::Todo::Entry->new($_);              push @list, Text::Todo::Entry->new($_);
         }          }
         close $fh or croak "Couldn't close [$file]: $!";          close $fh or croak "Couldn't close [$file]: $!";
Line 198 
Line 197 
     }      }
   
     sub listpri {      sub listpri {
         my ($self) = @_;          my ( $self, $pri ) = @_;
   
         my @list = grep { $_->priority } $self->list;          my @list;
           if ($pri) {
               $pri = uc $pri;
               if ( $pri !~ /^[A-Z]$/xms ) {
                   croak "PRIORITY must a single letter from A to Z.";
               }
               @list = grep { defined $_->priority && $_->priority eq $pri }
                   $self->list;
           }
           else {
               @list = grep { $_->priority } $self->list;
           }
   
         return wantarray ? @list : \@list;          return wantarray ? @list : \@list;
     }      }
Line 250 
Line 260 
     }      }
   
     sub listproj {      sub listproj {
         my ( $self, $entry, $dst ) = @_;          my ( $self ) = @_;
           return $self->listtag('project');
       }
   
       sub listcon {
           my ( $self ) = @_;
           return $self->listtag('context');
       }
   
       sub listtag {
           my ( $self, $tag ) = @_;
         my $ident = ident($self);          my $ident = ident($self);
   
           my $accessor = $tag . 's';
   
         my %available_projects;          my %available;
         foreach my $e ( $self->list ) {          foreach my $e ( $self->list ) {
             foreach my $p ( $e->projects ) {              foreach my $p ( $e->$accessor ) {
                 $available_projects{$p} = 1;                  $available{$p} = 1;
             }              }
         }          }
   
         my @projects = sort keys %available_projects;          my @tags = sort keys %available;
   
         return wantarray ? @projects : \@projects;          return wantarray ? @tags: \@tags;
     }      }
   
     sub archive {      sub archive {
Line 276 
Line 298 
             return;              return;
         }          }
   
         my $archived = 0;          my $changed = 0;
     ENTRY: foreach my $e ( $self->list ) {      ENTRY: foreach my $e ( $self->list ) {
             if ( $e->done ) {              if ( $e->done ) {
                 if ( $self->addto( 'done_file', $e ) && $self->del($e) ) {                  if ( $self->addto( 'done_file', $e ) && $self->del($e) ) {
                     $archived++;                      $changed++;
                 }                  }
                 else {                  else {
                     carp q{Couldn't archive entry [} . $e->text . ']';                      carp q{Couldn't archive entry [} . $e->text . ']';
                     last ENTRY;                      last ENTRY;
                 }                  }
             }              }
               elsif ( $e->text eq q{} ) {
                   if ( $self->del($e) ) {
                       $changed++;
                   }
                   else {
                       carp q{Couldn't delete blank entry};
                       last ENTRY;
                   }
               }
         }          }
   
         if ($archived) {          if ($changed) {
             $self->save;              $self->save;
         }          }
   
         return $archived;          return $changed;
     }      }
   
     sub addto {      sub addto {
Line 439 
Line 470 
 then, $todo_file eq 'todo/todo.txt'  then, $todo_file eq 'todo/todo.txt'
   
 =head2 load  =head2 load
   - Reads a list from a file into the current object.
   
 Allows you to load a different file into the object.  Allows you to load a different file into the object.
   
Line 447 
Line 479 
 This effects the other functions that act on the list.  This effects the other functions that act on the list.
   
 =head2 save  =head2 save
   - Writes the list to disk.
   
     $todo->save(['new/path/to/todo']);      $todo->save(['new/path/to/todo']);
   
 Writes the list to the file. Either the current working file or something  Either writes the current working file or the passed in argument
 that can be recognized by file().  that can be recognized by file().
   
 If you specify a filename it will save to that file and update the paths.  If you specify a filename it will save to that file and update the paths.
 Additional changes to the object work on that file.  Additional changes to the object work on that file.
   
 =head2 list  =head2 list
   - get the curently loaded list
   
     my @todo_list = $todo->list;      my @todo_list = $todo->list;
   
   In list context returns a list, it scalar context returns an array reference to the list.
   
 =head2 listpri  =head2 listpri
   - get the list items that are marked priority
   
 Like list, but only returns entries that have priority set.  Like list, but only returns entries that have priority set.
   
     my @priority_list = $todo->listpri;      my @priority_list = $todo->listpri;
   
 =head2 listproj  Since this is so easy to write as:
   
 Returns projects in the list sorted by name.      my @priority_list = grep { $_->priority } $todo->list;
 If there were projects +GarageSale and +Shopping  
   
     my @projects = $todo->listproj;  I think it may become depreciated unless there is demand.
   
   =head2 listtag
   
   Returns tags found in the list sorted by name.
   
   If there were projects +GarageSale and +Shopping then
   
       my @projects = $todo->listtag('project');
   
 is the same as  is the same as
   
     @projects = ( 'GarageSale', 'Shopping' );      @projects = ( 'GarageSale', 'Shopping' );
   
   =head2 listcon
   - Shortcut to listtag('context')
   
   =head2 listproj
   - Shortcut to listtag('project')
   
 =head2 add  =head2 add
   

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.16

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>