NAME

WebService::SlimTimer - Provides interface to SlimTimer web service.

VERSION

version 0.005

SYNOPSIS

This module provides interface to http://www.slimtimer.com/ functionality.

Notice that to use it you must obtain an API key by creating an account at SlimTimer web site and then visit http://slimtimer.com/help/api.

my $st = WebService::SlimTimer->new($api_key);
$st->login('your@email.address', 'secret-password');

# Create a brand new task.
my $task = $st->create_task('Testing SlimTimer');

# Spend 10 minutes on testing.
$st->create_entry($task->id, DateTime->now, DateTime->from_epoch(time() + 600));

# Mark the task as completed.
$st->complete_task($task->id, DateTime->now());

# Or maybe even get rid of it now.
$st->delete_task($task->id);

METHODS

CONSTRUCTOR

The single required constructor argument is the API key required to connect to SlimTimer:

my $st = WebService::SlimTimer->new('123456789abcdef123456789abcdef');

The validity of the API key is not checked here but using an invalid key will result in a failure to login() later.

login

Logs in to SlimTimer using the provided login and password.

$st->login('your@email.address', 'secret-password');

This method must be called before doing anything else with this object.

list_tasks

Returns the list of all tasks involving the logged in user:

my @tasks = $st->list_tasks();
say join("\n", map { $_->name } @tasks); # Output the names of all tasks

By default all tasks are returned, even the completed ones. Passing a false value as parameter excludes the completed tasks:

my @active_tasks = $st->list_tasks(0);

See WebService::SlimTimer::Task for the details of the returned objects.

create_task

Create a new task with the given name and returns the new WebService::SlimTimer::Task object on success.

my $task = $st->create_task('Test Task');
... Use $task->id with the other methods ...

delete_task

Delete the task with the given id (presumably previously obtained from list_tasks).

$st->delete_task($task->id);

get_task

Find the given task by its id.

my $task = $st->get_task(task_id);

While there is no direct way to obtain a task id using this module, it could be cached locally from a previous program execution, for example.

complete_task

Mark the task with the given id as being completed.

$st->complete_task($task->id, DateTime->now);

list_entries

Return all the time entries.

If the optional start and/or end parameters are specified, returns only the entries that begin after the start date and/or before the end one.

# List all entries: potentially very time-consuming.
my @entries = $st->list_entries;

# List entries started today.
my $today = DateTime->now;
$today->set(hour => 0, minute => 0, second => 0);
my @today_entries = $st->list_entries(start => $today);

# List entries started in 2010.
my @entries_2010 = $st->list_entries(
    start => DateTime->new(year => 2010),
    end => DateTime->new(year => 2011)
);

list_task_entries

Return all the time entries for the given task.

Just as list_entries, this method accepts optional start and end parameters to restrict the dates of the entries retrieved.

my @today_work_on_task = $st->list_entries($task->id, start => $today);

get_entry

Find the given time entry by its id.

my $entry = $st->get_entry($entry_id);

As with get_task(), it only makes sense to use this method if the id comes from a local cache.

create_entry

Create a new time entry.

my $day_of_work = $st->create_entry($task->id,
        DateTime->now->set(hour => 9, minute => 0, second = 0),
        DateTime->now->set(hour => 17, minute => 0, second = 0)
    );

Notice that the time stamps should normally be in UTC and not local time or another time zone.

If the end parameter is not specified, it defaults to now.

Returns the entry that was created.

update_entry

Changes an existing time entry.

# Use more realistic schedule.
$st->update_entry($day_of_work->id, $task->id,
        DateTime->now->set(hour => 11, minute => 0, second = 0)
        DateTime->now->set(hour => 23, minute => 0, second = 0)
    );

delete_entry

Deletes a time entry.

$st->delete_entry($day_of_work->id);

VARIABLES

This module define VERSION and DEBUG package variables. The first one is self-explanatory, the second one is 0 by default but can be set to 1 to trace all network requests done by this module. Setting it to 2 will also dump the requests (and replies) contents.

SEE ALSO

WebService::SlimTimer::Task, WebService::SlimTimer::TimeEntry

BUGS

Currently the offset parameter is not used by list_tasks and list_entries and list_task_entries methods, so they are limited to 50 tasks for the first one and 5000 entries for the latter two and accessing the subsequent results is impossible.

Access to the comments and tags of the tasks and time entries objects is not implemented yet.

AUTHOR

Vadim Zeitlin <vz-cpan@zeitlins.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Vadim Zeitlin.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.