From: Mark Wooding Date: Sat, 11 Feb 2023 23:05:12 +0000 (+0000) Subject: pldb: Remove a list when incrementing or decrementing out of range. X-Git-Url: https://git.distorted.org.uk/~mdw/dvddb/commitdiff_plain/9a00b56dd36ffa919ab9e7b48bb919d380b396c9 pldb: Remove a list when incrementing or decrementing out of range. This typically means that you've finished watching the playlist. --- diff --git a/pldb b/pldb index 73fb31d..b988145 100755 --- a/pldb +++ b/pldb @@ -123,7 +123,7 @@ defcmd "edit GROUP LIST[[+|-]=POS]|-LIST ...", sub { my $st_del = $DB->prepare ("DELETE FROM playlist_position WHERE group_name = ? AND list_name = ?"); - for my $op (@ops) { + OP: for my $op (@ops) { if ($op =~ /^ - (.++) $/x) { my ($list) = ($1); must_list $list; must_member $group, $list; @@ -143,8 +143,10 @@ defcmd "edit GROUP LIST[[+|-]=POS]|-LIST ...", sub { @r or die "`$list' is not a member of `$group'"; my ($cur) = @r; $st_getpos->finish; - if ($rel eq "+") { $pos = $cur + $pos; } - elsif ($rel eq "-") { $pos = $cur - $pos; } + my $end; + if ($rel eq "+") { $pos = $cur + $pos; $end = $n; } + elsif ($rel eq "-") { $pos = $cur - $pos; $end = 0; } + if ($pos == $end) { $st_del->execute($group, $list); next OP; } } 0 <= $pos && $pos < $n or die "`$list' position $pos out of range 0 .. $n";