App-TimeTracker-Command-Trello
view release on metacpan or search on metacpan
lib/App/TimeTracker/Command/Trello.pm view on Meta::CPAN
$conf->{token} = $global{token} = $token;
if ( $self->trello_client ) {
$self->trello_client->token($token);
}
else {
$self->config->{trello} = $conf;
$self->trello_client( $self->_build_trello_client );
}
print "\n";
}
$self->config->{trello} = $conf;
if ( $conf->{member_id} ) {
say "member_id is already set.";
}
else {
$conf->{member_id} = $global{member_id} =
$self->_do_trello( 'get', 'members/me' )->{id};
say "Your member_id is " . $conf->{member_id};
print "\n";
}
if ( $conf->{board_id} ) {
say "board_id is already set.";
}
unless ( $conf->{board_id} ) {
print "Do you want to set a Board? [y/N] ";
my $in = <STDIN>;
$in =~ s/\s+//;
if ( $in =~ /^y/i ) {
say "Your Boards:";
my $boards = $self->_do_trello( 'get',
'members/' . $conf->{member_id} . '/boards' );
my $cnt = 1;
foreach (@$boards) {
printf( "%i: %s\n", $cnt, $_->{name} );
$cnt++;
}
print "Your selection (number or nothing to skip): ";
my $in = <STDIN>;
$in =~ s/\D//;
if ($in) {
$conf->{board_id} = $local{board_id} =
$boards->[ $in - 1 ]->{id};
}
}
}
if ( keys %global ) {
$self->_trello_update_config( \%global,
$self->config->{_used_config_files}->[-1], 'global' );
}
if ( keys %local ) {
$self->_trello_update_config( \%local,
$self->config->{_used_config_files}->[0], 'local' );
}
}
sub _do_trello {
my ( $self, $method, $endpoint, @args ) = @_;
my $client = $self->trello_client;
exit 1 unless $client;
my $res = $client->$method( $endpoint, @args );
if ( $res->failed ) {
error_message(
"Cannot talk to Trello API: " . $res->error . ' ' . $res->code );
if ( $res->code == 401 ) {
say "Maybe running 'tracker setup_trello' will help...";
}
exit 1;
}
else {
return $res->data;
}
}
sub _trello_update_config {
my ( $self, $update, $file, $type ) = @_;
print "I will store the following keys\n\t"
. join( ', ', sort keys %$update )
. "\nin your $type config file\n$file\n";
print "(Y|n): ";
my $in = <STDIN>;
$in =~ s/\s+//;
unless ( $in =~ /^n/i ) {
my $f = file($file);
my $old = JSON::XS->new->utf8->relaxed->decode(
scalar $f->slurp( iomode => '<:encoding(UTF-8)' ) );
while ( my ( $k, $v ) = each %$update ) {
$old->{trello}{$k} = $v;
}
$f->spew(
iomode => '>:encoding(UTF-8)',
JSON::XS->new->utf8->pretty->encode($old)
);
}
}
sub _trello_fetch_card {
my ( $self, $trello_tag ) = @_;
my %search = (
query => $trello_tag,
card_fields => 'shortLink',
modelTypes => 'cards'
);
if ( my $board_id = $self->config->{trello}{board_id} ) {
$search{idBoards} = $board_id;
}
my $result = $self->_do_trello( 'get', 'search', \%search );
my $cards = $result->{cards};
unless ( @$cards == 1 ) {
warning_message(
"Could not identify trello card via '" . $trello_tag . "'" );
return;
}
my $id = $cards->[0]{id};
my $card = $self->_do_trello( 'get', 'cards/' . $id );
return $card;
}
( run in 3.106 seconds using v1.01-cache-2.11-cpan-63c85eba8c4 )