diff options
Diffstat (limited to 'lib/App/MediaControl.rakumod')
-rw-r--r-- | lib/App/MediaControl.rakumod | 80 |
1 files changed, 34 insertions, 46 deletions
diff --git a/lib/App/MediaControl.rakumod b/lib/App/MediaControl.rakumod index e4b5024..77fda99 100644 --- a/lib/App/MediaControl.rakumod +++ b/lib/App/MediaControl.rakumod @@ -1,58 +1,46 @@ use v6.d; -use Cro::HTTP::Server; -use Cro::HTTP::Router; +use DB::SQLite; use Vlc::Client; +use Lirc::Client; use Lirc::Commands; +use App::MediaControl::DB; +use App::MediaControl::Web; class App::MediaControl { - has Vlc::Client $.vlc is required; - has Lirc::Commands $.lirc is required; - has Int $.port = 8080; - has Cro::Service $!service handles <stop>; - - method start() { - my $vlc = route { - post -> 'play' { await self.vlc.command('pl_play') } - post -> 'pause' { await self.vlc.command('pl_pause') } - post -> 'stop' { await self.vlc.command('pl_stop') } - - get -> 'status' { - my $status = await self.vlc.status(); - content 'application/json', $status; - } - } - - my $ir = route { - post -> $thing, $arg { - await self.lirc.send($thing, $arg); - } - } - - my $application = route { - resources-from %?RESOURCES; - - get -> { resource 'index.html' } - get -> 'ir.png' { resource 'ir.png' } - get -> 'ir.webmanifest' { resource 'ir.webmanifest' } + has $.config is required; + has Vlc::Client $!vlc; + has Lirc::Client $!lirc-client; + has Lirc::Commands $!lirc; + has App::MediaControl::DB $!db; + has App::MediaControl::Web $!web; + + submethod TWEAK { + $!vlc .= new( + password => $!config<vlc><password>, + base-uri => $!config<vlc><base-uri>, + ); - include :$vlc, :$ir; + $!lirc-client .= new(); + $!lirc .= new(client=>$!lirc-client); - around -> &handler { - handler(); - CATCH { - default { - note "BOOM $_"; - response.status = 500; - content 'application/json', %( error => "$_" ); - } - } - } - }; + $!db .= new( + pool => DB::SQLite.new( + filename => $!config<db><filename>, + ), + ); - $!service = Cro::HTTP::Server.new( - :port(self.port), :$application, + $!web .= new( + port => $!config<server><port>, + :$!vlc, :$!lirc, ); + } + + method start() { + $!db.ensure-schema(); + $!web.start(); + } - return $!service.start(); + method stop() { + $!web.stop(); } } |