App-Todo

 view release on metacpan or  search on metacpan

bin/todo.pl  view on Meta::CPAN


use App::Todo;
use Config;
use Encode ();
use LWP::UserAgent;
use Number::RecordLocator;
use Getopt::Long;
use Pod::Usage;
use Email::Address;
use Fcntl qw(:mode);
use File::Temp;
use Digest::MD5 qw(md5_hex);

BEGIN {
    local $@;
    no strict 'refs';
    no warnings 'once';

    if ( eval { require YAML::Syck; YAML::Syck->VERSION(0.71) } ) {
        $YAML::Syck::ImplicitUnicode++;
        *Load     = *YAML::Syck::Load;
        *Dump     = *YAML::Syck::Dump;
        *LoadFile = *YAML::Syck::LoadFile;
        *DumpFile = *YAML::Syck::DumpFile;
    } else {
        require YAML;
        *Load     = *YAML::Load;
        *Dump     = *YAML::Dump;
        *LoadFile = *YAML::LoadFile;
        *DumpFile = *YAML::DumpFile;
    }
}

our $CONFFILE = "$ENV{HOME}/.hiveminder";
our $VERSION = $App::Todo::VERSION;
our %config = ();
our $ua = LWP::UserAgent->new;
our $locator = Number::RecordLocator->new();
our $default_query = "not/complete/starts/before/tomorrow/accepted/but_first/nothing";
our $unaccepted_query = "unaccepted/not/complete";
our $requests_query = "requestor/me/not/owner/me/not/complete";
our %args;
our $command;
our %commands;

# Setup our user agent string (useful for feedback)
$ua->agent("todo.pl/$VERSION ($Config{osname} $Config{osvers}; perl v$Config{version}, $Config{archname}) ");

$ua->cookie_jar({});

# Load the user's proxy settings from %ENV
$ua->env_proxy;

my $encoding;
eval {
    require Term::Encoding;
    $encoding = Term::Encoding::get_encoding();
};
$encoding ||= "utf-8";

binmode STDOUT, ":encoding($encoding)";

# Setup colored output if we have it
eval { require Term::ANSIColor };
if ( not $@ and supports_color() ) {
    *color   = *_color_real;
    *colored = *_colored_real;
}
else {
    *color   = *_color_passthru;
    *colored = *_colored_passthru;
}

sub _color_passthru   { }
sub _colored_passthru { return shift }
sub _color_real       { Term::ANSIColor::color(@_) }
sub _colored_real     { Term::ANSIColor::colored(@_) }

main();

sub main {
    GetOptions(\%args,
               "tags=s",
               "tag=s@", "group=s",
               "priority|pri=s",
               "due=s",
               "hide=s",
               "owner=s",
               "help",
               "version",
               "config=s",)
      or pod2usage(2);

    $CONFFILE = $args{config} if $args{config};

    pod2usage(0) if $args{help};
    if ($args{version}) {
        version();
        exit();
    }

    setup_config();

    # If they don't want color, switch it off
    if ( defined $config{color} and $config{color} eq 'off' ) {
        *color   = *_color_passthru;
        *colored = *_colored_passthru;
    }

    push @{$args{tag}}, split /\s+/, $args{tags} if $args{tags};

    if($args{priority}) {
        $args{priority} = priority_from_string($args{priority})
          unless $args{priority} =~ /^[1-5]$/;
        die("Invalid priority: $args{priority}")
          unless$args{priority} =~ /^[1-5]$/;
    }

    $args{owner} ||= "me";

    do_login() or die("Bad username/password -- edit $CONFFILE and try again.");



( run in 3.722 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )