diff options
-rw-r--r-- | data/docs/11 | 15 | ||||
-rw-r--r-- | lib/Multi/API.pm | 26 |
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}}; |