App-gcal
view release on metacpan or search on metacpan
lib/App/gcal.pm view on Meta::CPAN
use strict;
use warnings;
package App::gcal;
{
$App::gcal::VERSION = '1.121460';
}
use Class::ReturnValue;
use Data::ICal;
use DateTime::TimeZone;
# ABSTRACT: Command Line Interface interface to Google Calendar.
# cache the timezone lookup
my $localTZ = DateTime::TimeZone->new( name => 'local' );
my $gcal;
# entry point
sub run {
my ( $args, $username, $password ) = @_;
# loop over args
for my $arg (@$args) {
my $cal;
if ( ( -e $arg ) && ( -r $arg ) ) {
# looks like a file
$cal = _process_file($arg);
}
else {
# give to ICal::QuickAdd
$cal = _process_text($arg);
}
if ($cal) {
_save_to_gcal( $cal, $username, $password );
}
else {
print STDERR $cal->error_message . "\n";
}
}
}
# process an ics file
sub _process_file {
my ($file) = @_;
my $calendar = Data::ICal->new( filename => $file );
unless ($calendar) {
return _error("error parsing $file");
}
return $calendar;
}
# process a text event
sub _process_text {
my ($text) = @_;
my $error_msg = 'error parsing text';
unless ($text) {
return _error($error_msg);
}
require ICal::Format::Natural;
my $calendar = ICal::Format::Natural::ical_format_natural($text);
unless ( $calendar->isa('Data::ICal') ) {
return _error($error_msg);
}
return $calendar;
}
# save event to Google Calendar
sub _save_to_gcal {
my ( $cal, $username, $password ) = @_;
unless ($gcal) {
unless ( $username && $password ) {
# get login and password from .netrc
require Net::Netrc;
( run in 2.359 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )