package Bookmarks::C::Main;
use strict;
use base 'Catalyst::Base';
use Bookmarks::Utils;
use YAML;
sub tags : Global {
my ( $self, $c ) = @_;
$c->stash->{template}='tags';
$c->stash->{tags}=[Bookmarks::M::DB::Tags->get_all_tags_by_popularity()];
}
sub tag : Regex('^tag/(.*)$') {
my ( $self, $c ) = @_;
my @tagnames=split /\+/,$c->req->snippets->[0];
my ($tagset)=Bookmarks::M::TagSet->retrieve({tags=>[@tagnames]});
if (!defined $tagset) {
$c->stash->{tagnames}=[@tagnames];
$c->stash->{template}='notag';
}
else {
my @links=$tagset->ordered_links();
my @related_tags=$tagset->related_tags();
$c->stash->{tagset}=$tagset;
$c->stash->{links}=[@links];
$c->stash->{related}=[@related_tags];
$c->stash->{template}='links';
}
}
sub icon : Global {
my ( $self, $c ) = @_;
my $link=Bookmarks::M::DB::Links->retrieve($c->req->param('link'));
if ($link->get_icon()) {
$c->res->content_type('image/x-icon');
$c->res->body($link->get_icon());
}
else {
$c->res->status(404);
$c->res->body('nonce');
}
}
sub favicon : Path('favicon.ico') {
my ( $self, $c ) = @_;
$c->res->status(404);
$c->res->body('nonce');
}
sub jump : Global {
my ( $self, $c ) = @_;
my $link=Bookmarks::M::DB::Links->retrieve($c->req->param('link'));
$link->access_count($link->access_count()+1);
$link->last_access_date(time());
$link->update();
$c->res->status(302);
$c->res->location($link->url());
}
sub add : Global {
my ( $self, $c ) = @_;
my %pre_link=();
for my $i (qw(url title descr)) {
$pre_link{$i}=$c->req->param($i);
}
my @tags=split /[ +]/,($c->req->param('tag')||'');
print {*STDERR} Dump(\%pre_link);
print {*STDERR} Dump($c->req);
if ($c->req->method eq 'GET') {
$c->stash->{link}=\%pre_link;
$c->stash->{tags}=\@tags;
$c->stash->{template}='add_form';
}
elsif ($c->req->method eq 'POST') {
my ($dblink)=Bookmarks::M::DB::Links->search({url=>$pre_link{url}});
if (!defined $dblink) {
$dblink=Bookmarks::M::DB::Links->create({});
$dblink->add_date(time());
$dblink->access_count(0);
}
$dblink->set(%pre_link);
$dblink->set_icon(Bookmarks::Utils::get_site_icon($pre_link{url}));
$dblink->update();
Bookmarks::M::DB::LinksTags->search({
link => $dblink->pk()
})->delete_all();
for my $tagname (@tags) {
my $dbtag=Bookmarks::M::DB::Tags->find_or_create({
name => $tagname,
});
Bookmarks::M::DB::LinksTags->find_or_create({
tag => $dbtag->pk(),
link => $dblink->pk(),
});
}
if ($c->req->param('close')) {
$c->stash->{template}='closewin';
}
else {
$c->res->redirect($c->req->base.'tags');
}
}
}
1;