From d3bef132a472366a73badfb1406b73177cdce4b9 Mon Sep 17 00:00:00 2001 From: Mischa Spelt Date: Wed, 11 Apr 2018 02:04:32 +0200 Subject: [PATCH] Live now playing info --- .../Http/Controllers/ProgramController.php | 26 +++++++++- common/classes/Track.php | 52 +++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 common/classes/Track.php diff --git a/api/app/Http/Controllers/ProgramController.php b/api/app/Http/Controllers/ProgramController.php index 5b1b440..baa7ab9 100644 --- a/api/app/Http/Controllers/ProgramController.php +++ b/api/app/Http/Controllers/ProgramController.php @@ -246,6 +246,14 @@ if($DEBUG) print "Creating schedule between {$start->format('Y-m-d H:i')} and {$ return response()->json($program); } + + private function getTrack($next = false) { + $prefix = $next ? "next" : "current"; + $data = app('db')->select("SELECT {$prefix}_start AS start, {$prefix}_itemcode AS itemCode, {$prefix}_title AS title, {$prefix}_artist AS artist, {$prefix}_duration AS duration FROM `now_playing`"); + + return new \Model\Track($data[0]); + } + /** * Programmas nu en straks (24 uur vooruit) */ @@ -253,7 +261,23 @@ if($DEBUG) print "Creating schedule between {$start->format('Y-m-d H:i')} and {$ $start = new \DateTimeImmutable('now'); $einde = new \DateTimeImmutable('now + 1 second'); $schema = $this->createSchedule($start, $einde); - return response()->json(['current' => ['program' => true, 'name' => $schema['schedule'][0]['program']->name]]); + $program = $schema['schedule'][0]['program']; + if($program->nonstop) { + $current = $this->getTrack(); + $next = $this->getTrack(/* next: */ true); + $current->ends($next->start); + if($current->isLayout() || $current->secondsRemaining() < 0) { + if($next->isLayout()) { + return response()->json(['inProgram' => true, 'current' => $program->name]); + } + + $current = $next; + } + + return response()->json(['inProgram' => false, 'current' => $current]); + } else { + return response()->json(['inProgram' => true, 'current' => $program->name]); + } } /** diff --git a/common/classes/Track.php b/common/classes/Track.php new file mode 100644 index 0000000..9abcea2 --- /dev/null +++ b/common/classes/Track.php @@ -0,0 +1,52 @@ +start); + parent::ConvertToDateTime($this->ends); + } + + private static $IDENTS = ['NIEUWSOPEN ' => 'Nieuws', 'ANWB' => 'Verkeersinformatie', 'REGIO' => 'Regionieuws', 'CB' => 'Reclame']; + + public function isLayout() { + if(strlen($this->itemCode) > 0 && ($this->itemCode[0] == 'V')) { + foreach(self::$IDENTS as $ident => $display) { + if(substr($this->itemCode, 0, strlen($ident)) == $ident || substr($this->title, 0, strlen($ident)) == $ident) { + return false; + } + } + + return true; + } + + return false; + } + + public function ends($ends = null) { + $this->ends = $ends; + } + + public function secondsRemaining() { + return ($this->ends) ? ($this->ends->getTimestamp() - time()) : -1; + } + + public function display() { + foreach(self::$IDENTS as $ident => $display) { + if(substr($this->itemCode, 0, strlen($ident)) == $ident || substr($this->title, 0, strlen($ident)) == $ident) { + return $display; + } + } + + return $this->artist . ($this->artist ? ' - ' : '') . $this->title; + } +}