diff options
Diffstat (limited to 'lib/App/MediaControl')
-rw-r--r-- | lib/App/MediaControl/DB.rakumod | 41 |
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 } } |