aboutsummaryrefslogtreecommitdiff
path: root/lib/App/MediaControl/DB.rakumod
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2021-12-29 13:37:28 +0000
committerdakkar <dakkar@thenautilus.net>2021-12-29 13:37:28 +0000
commit7734605735a027b5e998563e8cbc46b9ae3f9dbb (patch)
tree14bb8cbe1e831d4b34cc66b7e903099fc3b6762d /lib/App/MediaControl/DB.rakumod
parentmove more stuff around (diff)
downloadmedia-control-7734605735a027b5e998563e8cbc46b9ae3f9dbb.tar.gz
media-control-7734605735a027b5e998563e8cbc46b9ae3f9dbb.tar.bz2
media-control-7734605735a027b5e998563e8cbc46b9ae3f9dbb.zip
scandir
Diffstat (limited to 'lib/App/MediaControl/DB.rakumod')
-rw-r--r--lib/App/MediaControl/DB.rakumod41
1 files changed, 37 insertions, 4 deletions
diff --git a/lib/App/MediaControl/DB.rakumod b/lib/App/MediaControl/DB.rakumod
index 7ce562e..da86d24 100644
--- a/lib/App/MediaControl/DB.rakumod
+++ b/lib/App/MediaControl/DB.rakumod
@@ -26,17 +26,36 @@ class App::MediaControl::DB {
.query(q:to/END/);
CREATE TABLE files (
id INTEGER PRIMARY KEY,
- parent_id INTEGER NULL REFERENCES files(id),
+ parent_id INTEGER NULL REFERENCES files(id)
+ ON DELETE CASCADE,
matpath TEXT NOT NULL,
name TEXT NOT NULL,
is_dir BOOLEAN NOT NULL,
watched_time INTEGER NULL,
+ seen BOOLEAN NOT NULL DEFAULT false,
UNIQUE (matpath, name)
)
END
}
}
+ method clear-seen() {
+ self!db: {
+ .query(q:to/END/)
+ UPDATE files SET seen=false
+ END
+ }
+ }
+
+ method remove-unseen() {
+ self!db: {
+ .query(q:to/END/)
+ DELETE FROM files
+ WHERE seen=false
+ END
+ }
+ }
+
method add-entry(Str :$path! is copy, Str :$name!, Bool :$is-dir!) {
$path ~~ s{<!after '/'>$} = '/';
$path ~~ s{<!before '/'>^} = '/';
@@ -50,12 +69,26 @@ class App::MediaControl::DB {
newrow(path,name,is_dir) AS (
VALUES($path, $name, $is_dir)
)
- INSERT INTO files(parent_id,matpath,name,is_dir)
- SELECT id, newrow.path, name, is_dir
+ INSERT INTO files(parent_id,matpath,name,is_dir,seen)
+ SELECT id, newrow.path, name, is_dir, true
FROM newrow
LEFT JOIN parent ON parent.path=newrow.path
WHERE true
- ON CONFLICT (matpath,name) DO NOTHING
+ ON CONFLICT (matpath,name) DO UPDATE SET seen=true
+ END
+ }
+ }
+
+ method remove-entry(Str :$path! is copy, Str :$name!) {
+ $path ~~ s{<!after '/'>$} = '/';
+ $path ~~ s{<!before '/'>^} = '/';
+
+ note "remove-entry($path,$name)";
+ self!db: {
+ .query(q:to/END/, :$path, :$name);
+ DELETE FROM files
+ WHERE name=$name
+ AND matpath=$path
END
}
}