#!/usr/bin/perl -w use strict; use FindBin; use lib "$FindBin::RealBin/lib"; use YAML; use Getopt::Long; use Bookmarks; GetOptions( 'file|f=s' => \my $DBNAME, 'title=s' => \my $TITLE, ); my $dbname = $DBNAME || $ENV{BKMK_DBNAME}; die "Usage: $0 --file \n" unless $dbname; my $bookmarks = Bookmarks->new({ dbname => $dbname, }); my $command = shift; my %action_for = ( init => sub { $bookmarks->create_tables; }, get => sub { my $identifier = shift; my $query = $identifier =~ /^\d+$/ ? { id => $identifier } : { uri => $identifier }; my $bookmark = $bookmarks->get_bookmark($query); print $bookmark ? Dump($bookmark) : "Not Found\n"; }, add => sub { my ($uri, @tags) = @_; my $title = defined $TITLE ? $TITLE : fetch_title($uri); my $bookmark = $bookmarks->add({ uri => $uri, title => $title, tags => \@tags }); print Dump($bookmark); }, list => sub { my @tags = @_; my @resources = $bookmarks->get_bookmarks({ tag => \@tags }); # TODO: list by tags, date, etc. # TODO: coordinate this commandline script with the CGI app print Dump(\@resources); }, # bulk loading load => sub { my ($src_file) = @_; my $src_bookmarks = YAML::LoadFile($src_file); for my $bookmark (@{ $src_bookmarks }) { $bookmarks->add($bookmark); } }, ); $action_for{$command}->(@ARGV); sub fetch_title { my $uri = shift; require WWW::Mechanize; my $mech = WWW::Mechanize->new; $mech->get($uri); return $mech->title || $uri; }