diff --git a/config/menus/station.php b/config/menus/station.php index 333c8fea8..0bba24b9b 100644 --- a/config/menus/station.php +++ b/config/menus/station.php @@ -53,7 +53,23 @@ return static function (App\Event\BuildStationMenu $e) { 'profile' => [ 'label' => __('Profile'), 'icon' => 'image', - 'url' => $router->fromHere('stations:profile:index'), + 'items' => [ + [ + 'label' => __('View Profile'), + 'url' => $router->fromHere('stations:profile:index'), + ], + [ + 'label' => __('Edit Profile'), + 'url' => $router->fromHere('stations:profile:edit'), + 'permission' => StationPermissions::Profile, + ], + [ + 'label' => __('Branding'), + 'class' => 'text-muted', + 'url' => $router->fromhere('stations:branding'), + 'permission' => StationPermissions::Profile, + ], + ], ], 'public' => [ 'label' => __('Public Page'), diff --git a/src/Radio/AutoDJ/Queue.php b/src/Radio/AutoDJ/Queue.php index 8b1f89183..47d50fe79 100644 --- a/src/Radio/AutoDJ/Queue.php +++ b/src/Radio/AutoDJ/Queue.php @@ -254,7 +254,8 @@ final class Queue return $playlist->getIsEnabled() && $this->scheduler->isPlaylistScheduledToPlayNow( $playlist, - $expectedPlayTime + $expectedPlayTime, + true ); } diff --git a/src/Radio/AutoDJ/Scheduler.php b/src/Radio/AutoDJ/Scheduler.php index 55a9e9f5c..b85a932a9 100644 --- a/src/Radio/AutoDJ/Scheduler.php +++ b/src/Radio/AutoDJ/Scheduler.php @@ -104,7 +104,8 @@ final class Scheduler public function isPlaylistScheduledToPlayNow( Entity\StationPlaylist $playlist, - CarbonInterface $now + CarbonInterface $now, + bool $excludeSpecialRules = false ): bool { $scheduleItems = $playlist->getScheduleItems(); @@ -113,7 +114,7 @@ final class Scheduler return true; } - $scheduleItem = $this->getActiveScheduleFromCollection($scheduleItems, $now); + $scheduleItem = $this->getActiveScheduleFromCollection($scheduleItems, $now, $excludeSpecialRules); return null !== $scheduleItem; } @@ -199,13 +200,14 @@ final class Scheduler */ private function getActiveScheduleFromCollection( Collection $scheduleItems, - CarbonInterface $now + CarbonInterface $now, + bool $excludeSpecialRules = false ): ?Entity\StationSchedule { if ($scheduleItems->count() > 0) { foreach ($scheduleItems as $scheduleItem) { $scheduleName = (string)$scheduleItem; - if ($this->shouldSchedulePlayNow($scheduleItem, $now)) { + if ($this->shouldSchedulePlayNow($scheduleItem, $now, $excludeSpecialRules)) { $this->logger->debug( sprintf( '%s - Should Play Now', @@ -228,7 +230,8 @@ final class Scheduler public function shouldSchedulePlayNow( Entity\StationSchedule $schedule, - CarbonInterface $now + CarbonInterface $now, + bool $excludeSpecialRules = false ): bool { $startTime = Entity\StationSchedule::getDateTime($schedule->getStartTime(), $now); $endTime = Entity\StationSchedule::getDateTime($schedule->getEndTime(), $now); @@ -277,7 +280,7 @@ final class Scheduler } foreach ($comparePeriods as $dateRange) { - if ($this->shouldPlayInSchedulePeriod($schedule, $dateRange, $now)) { + if ($this->shouldPlayInSchedulePeriod($schedule, $dateRange, $now, $excludeSpecialRules)) { return true; } } @@ -288,7 +291,8 @@ final class Scheduler private function shouldPlayInSchedulePeriod( Entity\StationSchedule $schedule, DateRange $dateRange, - CarbonInterface $now + CarbonInterface $now, + bool $excludeSpecialRules = false ): bool { if (!$dateRange->contains($now)) { return false; @@ -306,6 +310,11 @@ final class Scheduler return true; } + // Skip the remaining checks if we're doing a "still scheduled to play" Queue check. + if ($excludeSpecialRules) { + return true; + } + // Handle "Play Single Track" advanced setting. if ( $playlist->backendPlaySingleTrack()