getRequest(); $station = $e->getStation(); $backendConfig = $station->getBackendConfig(); $router = $request->getRouter(); $frontendEnum = $station->getFrontendTypeEnum(); $willDisconnectMessage = __('Restart broadcasting? This will disconnect any current listeners.'); $willNotDisconnectMessage = __('Reload broadcasting? Current listeners will not be disconnected.'); $reloadSupported = $frontendEnum->supportsReload(); $reloadMessage = $reloadSupported ? $willNotDisconnectMessage : $willDisconnectMessage; $settings = $e->getSettings(); $e->merge( [ 'start_station' => [ 'label' => __('Start Station'), 'title' => __('Ready to start broadcasting? Click to start your station.'), 'icon' => 'refresh', 'url' => (string)$router->fromHere('api:stations:reload'), 'class' => 'api-call text-success', 'confirm' => $reloadMessage, 'visible' => !$station->getHasStarted(), 'permission' => StationPermissions::Broadcasting, ], 'restart_station' => [ 'label' => __('Reload to Apply Changes'), 'title' => __('Click to restart your station and apply configuration changes.'), 'icon' => 'refresh', 'url' => (string)$router->fromHere('api:stations:reload'), 'class' => 'api-call text-warning btn-restart-station ' . (!$station->getNeedsRestart() ? 'd-none' : ''), 'confirm' => $reloadMessage, 'visible' => $station->getHasStarted(), 'permission' => StationPermissions::Broadcasting, ], 'profile' => [ 'label' => __('Profile'), 'icon' => 'image', 'url' => (string)$router->fromHere('stations:profile:index'), ], 'public' => [ 'label' => __('Public Page'), 'icon' => 'public', 'url' => (string)$router->named('public:index', ['station_id' => $station->getShortName()]), 'external' => true, 'visible' => $station->getEnablePublicPage(), ], 'media' => [ 'label' => __('Media'), 'icon' => 'library_music', 'visible' => StationFeatures::Media->supportedForStation($station), 'items' => [ 'files' => [ 'label' => __('Music Files'), 'icon' => 'library_music', 'url' => (string)$router->fromHere('stations:files:index'), 'permission' => StationPermissions::Media, ], 'reports_duplicates' => [ 'label' => __('Duplicate Songs'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:files:index') . '#special:duplicates', 'permission' => StationPermissions::Media, ], 'reports_unprocessable' => [ 'label' => __('Unprocessable Files'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:files:index') . '#special:unprocessable', 'permission' => StationPermissions::Media, ], 'reports_unassigned' => [ 'label' => __('Unassigned Files'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:files:index') . '#special:unassigned', 'permission' => StationPermissions::Media, ], 'ondemand' => [ 'label' => __('On-Demand Media'), 'class' => 'text-muted', 'icon' => 'cloud_download', 'url' => (string)$router->named('public:ondemand', ['station_id' => $station->getShortName()]), 'external' => true, 'visible' => $station->getEnableOnDemand(), ], 'sftp_users' => [ 'label' => __('SFTP Users'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:sftp_users:index'), 'visible' => StationFeatures::Sftp->supportedForStation($station), 'permission' => StationPermissions::Media, ], 'bulk_media' => [ 'label' => __('Bulk Media Import/Export'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:bulk-media'), 'permission' => StationPermissions::Media, ], ], ], 'playlists' => [ 'label' => __('Playlists'), 'icon' => 'queue_music', 'url' => (string)$router->fromHere('stations:playlists:index'), 'visible' => StationFeatures::Media->supportedForStation($station), 'permission' => StationPermissions::Media, ], 'podcasts' => [ 'label' => __('Podcasts'), 'icon' => 'cast', 'url' => (string)$router->fromHere('stations:podcasts:index'), 'visible' => StationFeatures::Podcasts->supportedForStation($station), 'permission' => StationPermissions::Podcasts, ], 'live_streaming' => [ 'label' => __('Live Streaming'), 'icon' => 'mic', 'visible' => StationFeatures::Streamers->supportedForStation($station), 'items' => [ 'streamers' => [ 'label' => __('Streamer/DJ Accounts'), 'icon' => 'mic', 'url' => (string)$router->fromHere('stations:streamers:index'), 'permission' => StationPermissions::Streamers, ], 'web_dj' => [ 'label' => __('Web DJ'), 'icon' => 'surround_sound', 'url' => (string)$router->named( 'public:dj', ['station_id' => $station->getShortName()], [], true ) ->withScheme('https'), 'visible' => $station->getEnablePublicPage(), 'external' => true, ], ], ], 'webhooks' => [ 'label' => __('Web Hooks'), 'icon' => 'code', 'url' => (string)$router->fromHere('stations:webhooks:index'), 'visible' => StationFeatures::Webhooks->supportedForStation($station), 'permission' => StationPermissions::WebHooks, ], 'reports' => [ 'label' => __('Reports'), 'icon' => 'assignment', 'permission' => StationPermissions::Reports, 'items' => [ 'reports_overview' => [ 'label' => __('Station Statistics'), 'url' => (string)$router->fromHere('stations:reports:overview'), ], 'reports_listeners' => [ 'label' => __('Listeners'), 'url' => (string)$router->fromHere('stations:reports:listeners'), ], 'reports_requests' => [ 'label' => __('Song Requests'), 'url' => (string)$router->fromHere('stations:reports:requests'), 'visible' => $station->getEnableRequests(), ], 'reports_timeline' => [ 'label' => __('Song Playback Timeline'), 'url' => (string)$router->fromHere('stations:reports:timeline'), ], 'reports_soundexchange' => [ 'label' => __('SoundExchange Royalties'), 'url' => (string)$router->fromHere('stations:reports:soundexchange'), ], ], ], 'broadcasting' => [ 'label' => __('Broadcasting'), 'icon' => 'wifi_tethering', 'items' => [ 'mounts' => [ 'label' => __('Mount Points'), 'icon' => 'wifi_tethering', 'url' => (string)$router->fromHere('stations:mounts:index'), 'visible' => StationFeatures::MountPoints->supportedForStation($station), 'permission' => StationPermissions::MountPoints, ], 'hls_streams' => [ 'label' => __('HLS Streams'), 'url' => (string)$router->fromHere('stations:hls_streams:index'), 'visible' => StationFeatures::HlsStreams->supportedForStation($station), 'permission' => StationPermissions::MountPoints, ], 'remotes' => [ 'label' => __('Remote Relays'), 'icon' => 'router', 'url' => (string)$router->fromHere('stations:remotes:index'), 'visible' => StationFeatures::RemoteRelays->supportedForStation($station), 'permission' => StationPermissions::RemoteRelays, ], 'fallback' => [ 'label' => __('Custom Fallback File'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:fallback'), 'visible' => StationFeatures::Media->supportedForStation($station), 'permission' => StationPermissions::Broadcasting, ], 'ls_config' => [ 'label' => __('Edit Liquidsoap Configuration'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:util:ls_config'), 'visible' => StationFeatures::CustomLiquidsoapConfig->supportedForStation($station), 'permission' => StationPermissions::Broadcasting, ], 'stations:stereo_tool_config' => [ 'label' => __('Upload Stereo Tool Configuration'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:stereo_tool_config'), 'visible' => $settings->getEnableAdvancedFeatures() && StationFeatures::Media->supportedForStation($station) && AudioProcessingMethods::StereoTool === $backendConfig->getAudioProcessingMethodEnum(), 'permission' => StationPermissions::Broadcasting, ], 'queue' => [ 'label' => __('Upcoming Song Queue'), 'class' => 'text-muted', 'url' => (string)$router->fromHere('stations:queue:index'), 'permission' => StationPermissions::Broadcasting, ], 'reload' => [ 'label' => __('Reload Configuration'), 'class' => 'text-muted api-call', 'url' => (string)$router->fromHere('api:stations:reload'), 'confirm' => $willNotDisconnectMessage, 'permission' => StationPermissions::Broadcasting, 'visible' => $reloadSupported, ], 'restart' => [ 'label' => __('Restart Broadcasting'), 'class' => 'text-muted api-call', 'url' => (string)$router->fromHere('api:stations:restart'), 'confirm' => $willDisconnectMessage, 'permission' => StationPermissions::Broadcasting, ], ], ], 'logs' => [ 'label' => __('Logs'), 'icon' => 'support', 'url' => (string)$router->fromHere('stations:logs'), 'permission' => StationPermissions::Logs, ], ] ); };