summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/docs/1115
-rw-r--r--lib/Multi/API.pm26
2 files changed, 37 insertions, 4 deletions
diff --git a/data/docs/11 b/data/docs/11
index d934ab8f..202d9024 100644
--- a/data/docs/11
+++ b/data/docs/11
@@ -310,7 +310,7 @@ however still required.<br />
<td>array of objects</td>
<td>no</td>
<td>
- List of anime related to the VN, each object has the following members:<br />
+ (Possibly empty) list of anime related to the VN, each object has the following members:<br />
"id", integer, <a href="http://anidb.net/">AniDB</a> ID<br />
"ann_id", integer, <a href="http://animenewsnetwork.com/">AnimeNewsNetwork</a> ID<br />
"nfo_id", string, <a href="http://animenfo.com/">AnimeNfo</a> ID<br />
@@ -322,6 +322,19 @@ however still required.<br />
and may not reflect the latest state of their information due to caching.
</td>
</tr>
+ <tr>
+ <td>relations</td>
+ <td>relations</td>
+ <td>array of objects</td>
+ <td>no</td>
+ <td>
+ (Possibly empty) list of related visual novels, each object has the following members:<br />
+ "id", integer<br />
+ "relation", string, relation to the VN<br />
+ "title", string, (romaji) title<br />
+ "original", string, original/official title, can be <b>null</b>.
+ </td>
+ </tr>
</table>
<b>Accepted filters for the 'vn' type:</b>
diff --git a/lib/Multi/API.pm b/lib/Multi/API.pm
index 8f99915b..3271e27b 100644
--- a/lib/Multi/API.pm
+++ b/lib/Multi/API.pm
@@ -303,7 +303,7 @@ sub login_res { # num, res, [ c, arg ]
sub get_vn {
my($c, $info, $filters) = @_[ARG0..$#_];
- return cerr $c, getinfo => "Unkown info flag '$_'", flag => $_ for (grep !/^(basic|details|anime)$/, @$info);
+ return cerr $c, getinfo => "Unkown info flag '$_'", flag => $_ for (grep !/^(basic|details|anime|relations)$/, @$info);
my $select = 'v.id, v.latest';
$select .= ', vr.title, vr.original, v.c_released, v.c_languages, v.c_platforms' if grep /basic/, @$info;
@@ -395,16 +395,36 @@ sub get_vn_res {
$get->{anime} = 1;
}
+ elsif($get->{type} eq 'relations') {
+ for my $i (@{$get->{list}}) {
+ $i->{relations} = [ grep $i->{latest} == $_->{vid1}, @$res ];
+ }
+ for (@$res) {
+ $_->{id} *= 1;
+ $_->{original} ||= undef;
+ delete $_->{vid1};
+ }
+ $get->{relations} = 1;
+ }
+
# fetch more results
+ my @ids = map $_->{latest}, @{$get->{list}};
+ my $ids = join ',', map '?', @ids;
+
if(!$get->{anime} && grep /anime/, @{$get->{info}}) {
- my @ids = map $_->{latest}, @{$get->{list}};
- my $ids = join ',', map '?', @ids;
return $_[KERNEL]->post(pg => query => qq|
SELECT va.vid, a.id, a.year, a.ann_id, a.nfo_id, a.type, a.title_romaji, a.title_kanji
FROM anime a JOIN vn_anime va ON va.aid = a.id WHERE va.vid IN($ids)|,
\@ids, 'get_vn_res', { %$get, type => 'anime' });
}
+ if(!$get->{relations} && grep /relations/, @{$get->{info}}) {
+ return $_[KERNEL]->post(pg => query => qq|
+ SELECT vl.vid1, v.id, vl.relation, vr.title, vr.original FROM vn_relations vl
+ JOIN vn v ON v.id = vl.vid2 JOIN vn_rev vr ON vr.id = v.latest WHERE vl.vid1 IN($ids) AND NOT v.hidden|,
+ \@ids, 'get_vn_res', { %$get, type => 'relations' });
+ }
+
# send and log
delete $_->{latest} for @{$get->{list}};
$num = @{$get->{list}};