diff options
author | Yorhel <git@yorhel.nl> | 2013-01-04 14:55:10 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2013-01-04 14:55:10 +0100 |
commit | 3e1363410e901b46d886147075fecc2ac105b83d (patch) | |
tree | 9dd5c5f68a146009f48484be66765c56cd0b114c /lib/Multi | |
parent | 96ef3844ee319a83fbede209b00fe4cf64377dbf (diff) |
Multi::API: Added 'set wishlist' command
Diffstat (limited to 'lib/Multi')
-rw-r--r-- | lib/Multi/API.pm | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/lib/Multi/API.pm b/lib/Multi/API.pm index 6c761a23..491071a6 100644 --- a/lib/Multi/API.pm +++ b/lib/Multi/API.pm @@ -43,7 +43,7 @@ sub spawn { login login_res get_results get_vn get_vn_res get_release get_release_res get_producer get_producer_res get_votelist get_votelist_res get_vnlist get_vnlist_res get_wishlist get_wishlist_res set_votelist set_vnlist - set_return admin + set_wishlist set_return admin |], ], heap => { @@ -376,7 +376,7 @@ sub client_input { if($cmd eq 'set') { return cerr $c, parse => 'Invalid arguments to set command' if @$arg < 2 || @$arg > 3 || ref($arg->[0]) || ref($arg->[1]) || $arg->[1] !~ /^\d+$/ || $arg->[1] < 1 || $arg->[1] > 1e6 || (defined($arg->[2]) && ref($arg->[2]) ne 'HASH'); - return cerr $c, 'settype', "Unknown set type: '$arg->[0]'" if $arg->[0] !~ /^(votelist|vnlist)$/; + return cerr $c, 'settype', "Unknown set type: '$arg->[0]'" if $arg->[0] !~ /^(votelist|vnlist|wishlist)$/; return cerr $c, needlogin => 'Not logged in as a user' if !$c->{uid}; my %obj = ( c => $c, @@ -999,7 +999,7 @@ sub set_votelist { my($ev, $vv) = (exists($obj->{opt}{vote}), $obj->{opt}{vote}); return cerr $obj->{c}, missing => 'No vote given', field => 'vote' if !$ev; - return cerr $obj->{c}, badarg => 'Invalid vote', field => 'vote' if ref($vv) || $vv !~ /^\d+$/ || $vv < 10 || $vv > 100; + return cerr $obj->{c}, badarg => 'Invalid vote', field => 'vote' if ref($vv) || !defined($vv) || $vv !~ /^\d+$/ || $vv < 10 || $vv > 100; return $_[KERNEL]->post(pg => do => q{ WITH upsert AS (UPDATE votes SET vote = ? WHERE uid = ? AND vid = ? RETURNING vid) @@ -1032,6 +1032,23 @@ sub set_vnlist { } +sub set_wishlist { + my $obj = $_[ARG0]; + + return $_[KERNEL]->post(pg => do => 'DELETE FROM wlists WHERE uid = ? AND vid = ?', + [ $obj->{c}{uid}, $obj->{id} ], 'set_return', $obj) if !$obj->{opt}; + + my($ep, $vp) = (exists($obj->{opt}{priority}), $obj->{opt}{priority}); + return cerr $obj->{c}, missing => 'No priority given', field => 'priority' if !$ep; + return cerr $obj->{c}, badarg => 'Invalid priority', field => 'priority' if ref($vp) || !defined($vp) || $vp !~ /^[0-3]$/; + + return $_[KERNEL]->post(pg => do => q{ + WITH upsert AS (UPDATE wlists SET wstat = ? WHERE uid = ? AND vid = ? RETURNING vid) + INSERT INTO wlists (uid, vid, wstat) SELECT ?, ?, ? WHERE EXISTS(SELECT 1 FROM vn v WHERE v.id = ?) AND NOT EXISTS(SELECT 1 FROM upsert) + }, [ $vp, $obj->{c}{uid}, $obj->{id}, $obj->{c}{uid}, $obj->{id}, $vp, $obj->{id} ], 'set_return', $obj); +} + + # can be call()'ed from other sessions (specifically written for IRC) sub admin { my($func, @arg) = @_[ARG0..$#_]; |