From 985d0633b1d7ad61bb2eaea877e204ee81c3c3ee Mon Sep 17 00:00:00 2001 From: Yorhel Date: Thu, 20 Nov 2008 13:25:54 +0100 Subject: Related anime on VN pages --- lib/Multi/Anime.pm | 15 ++------------- lib/VNDB/DB/VN.pm | 29 +++++++++++++++++++++-------- lib/VNDB/Handler/VN.pm | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 69 insertions(+), 25 deletions(-) (limited to 'lib') 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; -- cgit v1.2.3