chiark
/
gitweb
/
~mdw
/
dvddb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
pldb: Remove a list when incrementing or decrementing out of range.
[dvddb]
/
pldb
diff --git
a/pldb
b/pldb
index 73fb31d10c1c42b12308b9617e868fc460d37295..b9881450455ea410ee2358dcc330afc1fd133b6c 100755
(executable)
--- 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 = ?");
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;
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;
@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";
}
0 <= $pos && $pos < $n
or die "`$list' position $pos out of range 0 .. $n";