summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2008-11-20 13:25:54 +0100
committerYorhel <git@yorhel.nl>2008-11-20 13:25:54 +0100
commit985d0633b1d7ad61bb2eaea877e204ee81c3c3ee (patch)
tree6f624750f8cfa07947e679de09df5cefbe28b95a /lib
parent29a9cd8509d27a06785f7c6e34e7515385efab7b (diff)
Related anime on VN pages
Diffstat (limited to 'lib')
-rw-r--r--lib/Multi/Anime.pm15
-rw-r--r--lib/VNDB/DB/VN.pm29
-rw-r--r--lib/VNDB/Handler/VN.pm50
3 files changed, 69 insertions, 25 deletions
diff --git a/lib/Multi/Anime.pm b/lib/Multi/Anime.pm
index 0a7f5a08..1215a4a1 100644
--- a/lib/Multi/Anime.pm
+++ b/lib/Multi/Anime.pm
@@ -66,17 +66,6 @@ sub spawn {
timeoutdelay => 0.4, # $delay = $msgdelay ^ (1 + $tm*$timeoutdelay)
maxtimeoutdelay => 2*3600, # two hours
cachetime => 30*24*3600, # one month
- # AniDB anime types:
- types => [
- [ 'unknown', 'unknown', ],
- [ 'TV', 'TV Series' ],
- [ 'OVA', 'OVA' ],
- [ 'Movie', 'Movie' ],
- [ 'unknown', 'Other' ],
- [ 'unknown', 'Web' ],
- [ 'TV Special', 'TV Special' ],
- [ 'unknown', 'Music Video' ],
- ],
@_,
w => undef,
@@ -273,8 +262,8 @@ sub updateanime { # aid, data|'notfound'
$_ =~ s/`/'/g;
}
$col[3] = $1 if $col[3] =~ /^([0-9]+)/; # remove multi-year stuff
- for(0..$#{$_[HEAP]{types}}) {
- $col[4] = $_ if lc($_[HEAP]{types}[$_][1]) eq lc($col[4]);
+ for(0..$#{$VNDB::S{anime_types}}) {
+ $col[4] = $_ if lc($VNDB::S{anime_types}[$_][1]) eq lc($col[4]);
}
$col[4] = 0 if $col[4] !~ /^[0-9]+$/;
$col[2] = '' if $col[2] =~ /^0,/;
diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm
index 5d9aafa5..55396a6b 100644
--- a/lib/VNDB/DB/VN.pm
+++ b/lib/VNDB/DB/VN.pm
@@ -9,7 +9,7 @@ our @EXPORT = qw|dbVNGet|;
# Options: id, rev, results, page, order, what
-# What: extended categories
+# What: extended categories anime
sub dbVNGet {
my($self, %o) = @_;
$o{results} ||= 10;
@@ -47,18 +47,31 @@ sub dbVNGet {
join(', ', @select), join(' ', @join), \%where, $o{order},
);
- if(@$r && $o{what} =~ /categories/) {
+ if(@$r && $o{what} =~ /(categories|anime)/) {
my %r = map {
$r->[$_]{categories} = [];
+ $r->[$_]{anime} = [];
($r->[$_]{cid}, $_)
} 0..$#$r;
- push(@{$r->[$r{$_->{vid}}]{categories}}, [ $_->{cat}, $_->{lvl} ]) for (@{$self->dbAll(q|
- SELECT vid, cat, lvl
- FROM vn_categories
- WHERE vid IN(!l)|,
- [ keys %r ]
- )});
+ if($o{what} =~ /categories/) {
+ push(@{$r->[$r{$_->{vid}}]{categories}}, [ $_->{cat}, $_->{lvl} ]) for (@{$self->dbAll(q|
+ SELECT vid, cat, lvl
+ FROM vn_categories
+ WHERE vid IN(!l)|,
+ [ keys %r ]
+ )});
+ }
+
+ if($o{what} =~ /anime/) {
+ push(@{$r->[$r{$_->{vid}}]{anime}}, $_) && delete $_->{vid} for (@{$self->dbAll(q|
+ SELECT va.vid, a.*
+ FROM vn_anime va
+ JOIN anime a ON va.aid = a.id
+ WHERE va.vid IN(!l)|,
+ [ keys %r ]
+ )});
+ }
}
return wantarray ? ($r, $np) : $r;
diff --git a/lib/VNDB/Handler/VN.pm b/lib/VNDB/Handler/VN.pm
index 26663d26..2987c495 100644
--- a/lib/VNDB/Handler/VN.pm
+++ b/lib/VNDB/Handler/VN.pm
@@ -17,7 +17,7 @@ sub page {
# TODO: revision-awareness, hidden/locked flag check
- my $v = $self->dbVNGet(id => $vid, what => 'extended categories')->[0];
+ my $v = $self->dbVNGet(id => $vid, what => 'extended categories anime')->[0];
return 404 if !$v->{id};
$self->htmlHeader(title => $v->{title});
@@ -40,6 +40,10 @@ sub page {
# general info
table;
+ Tr;
+ td class => 'key', ' ';
+ td ' ';
+ end;
my $i = 0;
if($v->{length}) {
Tr ++$i % 2 ? (class => 'odd') : ();
@@ -71,10 +75,10 @@ sub page {
end;
}
- # categories
page_categories($self, \$i, $v) if @{$v->{categories}};
-
- # TODO: producers, relations, anime
+ page_anime($self, \$i, $v) if @{$v->{anime}};
+
+ # TODO: producers, relations
end;
end;
@@ -93,6 +97,7 @@ sub page {
$self->htmlFooter;
}
+
sub page_categories {
my($self, $i, $v) = @_;
@@ -130,5 +135,42 @@ sub page_categories {
}
+sub page_anime {
+ my($self, $i, $v) = @_;
+
+ Tr ++$$i % 2 ? (class => 'odd') : ();
+ td 'Related anime';
+ td class => 'anime';
+ for (sort { ($a->{year}||9999) <=> ($b->{year}||9999) } @{$v->{anime}}) {
+ if($_->{lastfetch} < 1) {
+ b;
+ txt $_->{lastfetch} < 0 ? '[unknown anidb id: ' : '[no information available at this time: ';
+ a href => "http://anidb.net/a$_->{id}", $_->{id};
+ txt ']';
+ end;
+ } else {
+ b;
+ txt '[';
+ a href => "http://anidb.net/a$_->{id}", title => 'AniDB', 'DB';
+ if($_->{nfo_id}) {
+ txt '-';
+ a href => "http://animenfo.com/animetitle,$_->{nfo_id},a.html", title => 'AnimeNFO', 'NFO';
+ }
+ if($_->{ann_id}) {
+ txt '-';
+ a href => "http://www.animenewsnetwork.com/encyclopedia/anime.php?id=$_->{ann_id}", title => 'Anime News Network', 'ANN';
+ }
+ txt '] ';
+ end;
+ acronym title => $_->{title_kanji}, shorten $_->{title_romaji}, 50;
+ b ' ('.($self->{anime_types}[$_->{type}][0] eq 'unknown' ? '' : $self->{anime_types}[$_->{type}][0].', ').$_->{year}.')';
+ }
+ }
+ end;
+ end;
+}
+
+
+
1;