App-todoist
view release on metacpan or search on metacpan
lib/App/todoist.pm view on Meta::CPAN
package App::todoist;
$App::todoist::VERSION = '0.04';
use 5.006;
use strict;
use warnings;
use Net::Todoist;
use Carp qw/ croak /;
use AppConfig::Std;
use File::Slurper qw/ read_lines /;
sub new
{
my $class = shift;
my $obj = bless({}, $class)
|| croak "Can't instantiate App::todoist\n";
return $obj;
}
sub process_options
{
my ($self, $opts) = @_;
my $config = AppConfig::Std->new()
|| croak "Can't instantiate AppConfig::Std\n";
$config->define('token', { ARGCOUNT => 1 });
$config->define('project', { ARGCOUNT => 1 });
$config->define('importfile', { ARGCOUNT => 1, ALIAS => 'i' });
$config->define('priority', { ARGCOUNT => 1, ALIAS => 'p', DEFAULT => 4 });
$config->define('add-project', { ARGCOUNT => 1, ALIAS => 'ap' });
if (defined($ENV{HOME}) && -f "$ENV{HOME}/.todoist") {
my $filename = "$ENV{HOME}/.todoist";
if (((stat($filename))[2] & 36) != 0) {
croak "your config file ($filename) is readable by others!\n";
}
$config->file($filename) || exit 1;
}
if ($opts->{argv}) {
$config->args($opts->{argv})
|| die "run \"$0 -help\" to see valid options\n";
}
croak "you must provide a token\n" unless $config->token;
if (!$config->project && !$config->get('add-project')) {
croak "you must either project a project, or add a project\n";
}
$self->{config} = $config;
my $todoist = Net::Todoist->new(token => $config->token)
|| croak "failed to connect to todoist\n";
$self->{todoist} = $todoist;
if ($config->project) {
my @projects = $todoist->getProjects;
my ($project) = grep { $_->{name} eq $config->project } @projects;
if (not defined $project) {
croak "couldn't find project '", $config->project, "' in todoist\n"
}
$self->{project_id} = $project->{id};
}
}
sub config
{
my $self = shift;
return $self->{config};
}
sub todoist
{
my $self = shift;
return $self->{todoist};
}
sub run
{
my ($self, $opts) = @_;
$self->process_options($opts);
if ($self->config->importfile) {
my @tasks = read_lines($self->config->importfile);
foreach my $task (@tasks) {
$self->todoist->addItem(
project_id => $self->{project_id},
content => $task,
priority => $self->config->priority,
);
}
printf STDERR "%d tasks added from %s\n", int(@tasks),
( run in 1.590 second using v1.01-cache-2.11-cpan-5735350b133 )