aboutsummaryrefslogtreecommitdiff
path: root/lib/App/MediaControl.rakumod
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2024-01-20 17:30:25 +0000
committerdakkar <dakkar@thenautilus.net>2024-01-20 17:35:21 +0000
commit491dc1aeab9b445ee28f972e19a1cbb4cb9f3af7 (patch)
treeb4213dfea7e02f16e286b6b814dc196c19714cdf /lib/App/MediaControl.rakumod
parentquite the ScanDir supply when files are being modified (diff)
downloadmedia-control-491dc1aeab9b445ee28f972e19a1cbb4cb9f3af7.tar.gz
media-control-491dc1aeab9b445ee28f972e19a1cbb4cb9f3af7.tar.bz2
media-control-491dc1aeab9b445ee28f972e19a1cbb4cb9f3af7.zip
look at fs on demand, don't watch it
ScanDir (well, fs notifications in raku) is too slow to keep up with actual fs changes (especially when e.g. a file is being downloaded) there's actually no need to watch fs changes, we can just sync the db with the file system we look at each directory
Diffstat (limited to 'lib/App/MediaControl.rakumod')
-rw-r--r--lib/App/MediaControl.rakumod42
1 files changed, 12 insertions, 30 deletions
diff --git a/lib/App/MediaControl.rakumod b/lib/App/MediaControl.rakumod
index d330221..f8d2360 100644
--- a/lib/App/MediaControl.rakumod
+++ b/lib/App/MediaControl.rakumod
@@ -1,10 +1,11 @@
use v6.d;
use DB::SQLite;
-use ScanDir;
use Vlc::Client;
use Lirc::Client;
use Lirc::Commands;
use App::MediaControl::DB;
+use App::MediaControl::FS;
+use App::MediaControl::Model;
use App::MediaControl::Web;
class App::MediaControl {
@@ -13,6 +14,8 @@ class App::MediaControl {
has Lirc::Client $!lirc-client;
has Lirc::Commands $!lirc;
has App::MediaControl::DB $!db;
+ has App::MediaControl::FS $!fs;
+ has App::MediaControl::Model $!model;
has App::MediaControl::Web $!web;
submethod TWEAK {
@@ -32,43 +35,22 @@ class App::MediaControl {
),
);
+ $!fs .= new(
+ root => $!config<media><root>,
+ extensions => $!config<media><extensions>.Slip,
+ );
+
+ $!model .= new(:$!db,:$!fs);
+
$!web .= new(
port => $!config<server><port>,
host => $!config<server><host>,
- :$!vlc, :$!lirc, :$!db,
+ :$!vlc, :$!lirc, :$!model,
);
}
- method !start-scan() {
- my $root = $.config<media><root>;
- my $extensions = any($.config<media><extensions>.Slip);
-
- $!db.clear-seen();
- start react {
- whenever scan-dir($root) -> $item {
- when $item ~~ $root {}
- when $item ~~ ScanDir::End { $!db.remove-unseen(); say "scan done" }
-
- my $path = $item.parent.relative($root);
- $path = '' if $path eq '.';
- my $name = $item.basename;
-
- if !$item.e {
- $!db.remove-entry(:$path,:$name);
- }
- else {
- my $is-dir = $item.d;
- if $is-dir || $item.extension ~~ $extensions {
- $!db.add-entry(:$path,:$name,:$is-dir);
- }
- }
- }
- }
- }
-
method start() {
$!db.ensure-schema();
- self!start-scan();
$!web.start();
}