Change Shoutcast casing.
This commit is contained in:
parent
1179baab65
commit
6c87447736
26
CHANGELOG.md
26
CHANGELOG.md
|
@ -353,7 +353,7 @@ release channel, you can take advantage of these new features and fixes.
|
|||
|
||||
- You can now clear the entire upcoming song queue with a single button click.
|
||||
|
||||
- If you are using the SHOUTcast broadcasting software, you can input your user ID and license ID directly via the
|
||||
- If you are using the Shoutcast broadcasting software, you can input your user ID and license ID directly via the
|
||||
station profile.
|
||||
|
||||
## Code Quality/Technical Changes
|
||||
|
@ -510,7 +510,7 @@ release channel, you can take advantage of these new features and fixes.
|
|||
|
||||
## Bug Fixes
|
||||
|
||||
- Remote relays to legacy SHOUTcast 1 installations should once again work as expected (#4408).
|
||||
- Remote relays to legacy Shoutcast 1 installations should once again work as expected (#4408).
|
||||
|
||||
- An issue causing localized date/time formats to not appear on some station management pages was fixed (#4394).
|
||||
|
||||
|
@ -1040,7 +1040,7 @@ stable version before making these major changes.
|
|||
you those permissions. (#3097)
|
||||
- Fixed a bug where you could continue into AzuraCast without finishing setup. (#2958)
|
||||
- Icecast now uses the same SSL certificate your web connection uses via LetsEncrypt setup. (#2969)
|
||||
- Connecting to a SHOUTcast 1 remote relay works again. (#2989)
|
||||
- Connecting to a Shoutcast 1 remote relay works again. (#2989)
|
||||
- The "Play" icon will now properly switch between playing and not-playing states for only the actively playing item. (
|
||||
# 3170)
|
||||
|
||||
|
@ -1581,7 +1581,7 @@ of new improvements have rolled out over the last month, along with a ton of bug
|
|||
time zone setting, but schedules were based on UTC and constantly had to be converted back and forth from the user's
|
||||
local time. This conversion caused a number of problems. To address them, we completely restructured the time zone
|
||||
system. Now, each _station_ has its own time zone, and all scheduled playlists are based on this time zone. Liquidsoap
|
||||
and Icecast/SHOUTcast are also run in this time zone, so schedule times (and logs) will always be consistent.
|
||||
and Icecast/Shoutcast are also run in this time zone, so schedule times (and logs) will always be consistent.
|
||||
|
||||
- **API Parity**: We've done a _lot_ of work to make all of the core functionality of AzuraCast available via our REST
|
||||
API, and we're pleased to announce that as of this release, all major functions are possible entirely via API calls,
|
||||
|
@ -1826,7 +1826,7 @@ incremental update on the roadmap to our version 1.0 release.
|
|||
itself. This helps to preserve the self-contained nature of AzuraCast and avoid unnecessary downtime caused by
|
||||
third-party services.
|
||||
|
||||
- You can now install another version of SHOUTcast even if a different version is already installed.
|
||||
- You can now install another version of Shoutcast even if a different version is already installed.
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
|
@ -1895,7 +1895,7 @@ incremental update on the roadmap to our version 1.0 release.
|
|||
itself. This helps to preserve the self-contained nature of AzuraCast and avoid unnecessary downtime caused by
|
||||
third-party services.
|
||||
|
||||
- You can now install another version of SHOUTcast even if a different version is already installed.
|
||||
- You can now install another version of Shoutcast even if a different version is already installed.
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
|
@ -1921,17 +1921,17 @@ update status.
|
|||
|
||||
## Major Updates
|
||||
|
||||
- **SHOUTcast 2 DNAS is no longer bundled with AzuraCast.** While SHOUTcast has been a popular offering that was bundled
|
||||
- **Shoutcast 2 DNAS is no longer bundled with AzuraCast.** While Shoutcast has been a popular offering that was bundled
|
||||
with AzuraCast after significant demand, it has always been non-free, proprietary software, the only component in the
|
||||
AzuraCast stack that is not free and open-source. With the release of SHOUTcast's
|
||||
AzuraCast stack that is not free and open-source. With the release of Shoutcast's
|
||||
new ["freemium" pricing structure](https://www.shoutcast.com/Pricing) has also come a new, more aggressive license
|
||||
associated with distribution of the software. As such, AzuraCast can no longer bundle SHOUTcast 2 DNAS with new
|
||||
associated with distribution of the software. As such, AzuraCast can no longer bundle Shoutcast 2 DNAS with new
|
||||
installations, and we strongly recommend that any stations that can use Icecast do so. We do still support the
|
||||
software, however, and you can manually install it by uploading the `.tar.gz` file provided by SHOUTcast into a new
|
||||
software, however, and you can manually install it by uploading the `.tar.gz` file provided by Shoutcast into a new
|
||||
page in the system administration.
|
||||
|
||||
- **Our support for Icecast is now even better suited for commercial radio stations.** Along with our withdrawal of
|
||||
out-of-the-box support for SHOUTcast, we've been working hard to make improvements to our Icecast integration so it
|
||||
out-of-the-box support for Shoutcast, we've been working hard to make improvements to our Icecast integration so it
|
||||
can better serve commercial radio stations that depend on reliable, accurate reporting. If you're using the latest
|
||||
version of AzuraCast, you will now see much more accurate information on your listeners, especially if you're using
|
||||
the Docker installation or operating behind CloudFlare protection.
|
||||
|
@ -1952,8 +1952,8 @@ update status.
|
|||
- **The core "Now Playing" library is a standalone PHP library now.** We're always looking for new ways to give back to
|
||||
the open-source software community. Now, along with [AzuraForms](https://github.com/AzuraCast/azuraforms), we have
|
||||
spun off our [NowPlaying](https://github.com/AzuraCast/nowplaying) library to be a standalone component you can
|
||||
include in your own PHP code. It's very useful for abstracting out the differences between Icecast, SHOUTcast 1 and
|
||||
SHOUTcast 2 sources into a single return format.
|
||||
include in your own PHP code. It's very useful for abstracting out the differences between Icecast, Shoutcast 1 and
|
||||
Shoutcast 2 sources into a single return format.
|
||||
|
||||
- **AzuraCast now has early support for plugins.** Many of you have wanted to customize the internal workings of
|
||||
AzuraCast without needing to fork the main codebase and maintain your own copy. You can now do this with the help of
|
||||
|
|
|
@ -93,7 +93,7 @@ return function (App\Event\BuildAdminMenu $e) {
|
|||
'permission' => GlobalPermissions::Stations,
|
||||
],
|
||||
'shoutcast' => [
|
||||
'label' => __('Install SHOUTcast'),
|
||||
'label' => __('Install Shoutcast'),
|
||||
'url' => (string)$router->named('admin:install_shoutcast:index'),
|
||||
'permission' => GlobalPermissions::All,
|
||||
],
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="card">
|
||||
<div class="card-header bg-primary-dark">
|
||||
<h2 class="card-title">
|
||||
<translate key="lang_title">Install SHOUTcast 2 DNAS</translate>
|
||||
<translate key="lang_title">Install Shoutcast 2 DNAS</translate>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
|
@ -16,20 +16,20 @@
|
|||
</legend>
|
||||
|
||||
<p class="card-text">
|
||||
<translate key="lang_instructions_1a">SHOUTcast 2 DNAS is not free software, and its restrictive license does not allow AzuraCast to distribute the SHOUTcast binary.</translate>
|
||||
<translate key="lang_instructions_1a">Shoutcast 2 DNAS is not free software, and its restrictive license does not allow AzuraCast to distribute the Shoutcast binary.</translate>
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
<translate key="lang_instructions_1b">In order to install SHOUTcast:</translate>
|
||||
<translate key="lang_instructions_1b">In order to install Shoutcast:</translate>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<translate key="lang_instructions_2">Download the Linux x64 binary from the SHOUTcast Radio Manager:</translate>
|
||||
<translate key="lang_instructions_2">Download the Linux x64 binary from the Shoutcast Radio Manager:</translate>
|
||||
<br>
|
||||
<a href="https://radiomanager.shoutcast.com/register/serverSoftwareFreemium"
|
||||
target="_blank">
|
||||
<translate key="lang_instructions_2_url">SHOUTcast Radio Manager</translate>
|
||||
<translate key="lang_instructions_2_url">Shoutcast Radio Manager</translate>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
@ -54,7 +54,7 @@
|
|||
</p>
|
||||
<p v-else class="text-danger card-text">
|
||||
<translate
|
||||
key="lang_not_installed">SHOUTcast 2 DNAS is not currently installed on this installation.</translate>
|
||||
key="lang_not_installed">Shoutcast 2 DNAS is not currently installed on this installation.</translate>
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
|
@ -83,7 +83,7 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
langInstalledVersion() {
|
||||
const text = this.$gettext('SHOUTcast version "%{ version }" is currently installed.');
|
||||
const text = this.$gettext('Shoutcast version "%{ version }" is currently installed.');
|
||||
return this.$gettextInterpolate(text, {
|
||||
version: this.version
|
||||
});
|
||||
|
|
|
@ -436,7 +436,7 @@
|
|||
</template>
|
||||
<template #description="{lang}">
|
||||
<translate :key="lang">For most cases, use the default UTF-8 encoding. The older ISO-8859-1
|
||||
encoding can be used if accepting connections from SHOUTcast 1 DJs or using other legacy
|
||||
encoding can be used if accepting connections from Shoutcast 1 DJs or using other legacy
|
||||
software.
|
||||
</translate>
|
||||
</template>
|
||||
|
|
|
@ -26,14 +26,14 @@
|
|||
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_sc_license_id"
|
||||
:field="form.frontend_config.sc_license_id">
|
||||
<template #label="{lang}">
|
||||
<translate :key="lang">SHOUTcast License ID</translate>
|
||||
<translate :key="lang">Shoutcast License ID</translate>
|
||||
</template>
|
||||
</b-wrapped-form-group>
|
||||
|
||||
<b-wrapped-form-group class="col-md-6" id="edit_form_frontend_sc_user_id"
|
||||
:field="form.frontend_config.sc_user_id">
|
||||
<template #label="{lang}">
|
||||
<translate :key="lang">SHOUTcast User ID</translate>
|
||||
<translate :key="lang">Shoutcast User ID</translate>
|
||||
</template>
|
||||
</b-wrapped-form-group>
|
||||
</b-form-row>
|
||||
|
@ -206,7 +206,7 @@ export default {
|
|||
|
||||
if (this.isShoutcastInstalled) {
|
||||
frontendOptions.push({
|
||||
text: this.$gettext('Use SHOUTcast DNAS 2 on this server.'),
|
||||
text: this.$gettext('Use Shoutcast DNAS 2 on this server.'),
|
||||
value: FRONTEND_SHOUTCAST
|
||||
});
|
||||
}
|
||||
|
|
|
@ -110,7 +110,7 @@ export default {
|
|||
return this.$gettext('Basic Info');
|
||||
},
|
||||
langAuthhashDesc() {
|
||||
let text = 'If your stream is set to advertise to YP directories above, you must specify an authorization hash. You can manage authhashes <a href="%{ url }" target="_blank">on the SHOUTcast web site</a>.';
|
||||
let text = 'If your stream is set to advertise to YP directories above, you must specify an authorization hash. You can manage authhashes <a href="%{ url }" target="_blank">on the Shoutcast web site</a>.';
|
||||
let url = 'https://radiomanager.shoutcast.com/';
|
||||
|
||||
return this.$gettextInterpolate(this.$gettext(text), {url: url});
|
||||
|
|
|
@ -124,7 +124,7 @@ export default {
|
|||
if (this.frontendType === FRONTEND_ICECAST) {
|
||||
return 'Icecast';
|
||||
} else if (this.frontendType === FRONTEND_SHOUTCAST) {
|
||||
return 'SHOUTcast';
|
||||
return 'Shoutcast';
|
||||
}
|
||||
return '';
|
||||
},
|
||||
|
|
|
@ -91,11 +91,11 @@ export default {
|
|||
},
|
||||
{
|
||||
value: REMOTE_SHOUTCAST1,
|
||||
text: 'SHOUTcast v1',
|
||||
text: 'Shoutcast v1',
|
||||
},
|
||||
{
|
||||
value: REMOTE_SHOUTCAST2,
|
||||
text: 'SHOUTcast v2',
|
||||
text: 'Shoutcast v2',
|
||||
}
|
||||
];
|
||||
},
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
</div>
|
||||
<div class="card-body">
|
||||
<h3 class="card-subtitle mt-0">
|
||||
<translate key="lang_connection_shoutcast_hdr">SHOUTcast Clients</translate>
|
||||
<translate key="lang_connection_shoutcast_hdr">Shoutcast Clients</translate>
|
||||
</h3>
|
||||
<dl>
|
||||
<dt class="mb-1">
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -16,7 +16,7 @@ final class ShoutcastAction
|
|||
Response $response
|
||||
): ResponseInterface {
|
||||
if ('x86_64' !== php_uname('m')) {
|
||||
throw new RuntimeException('SHOUTcast cannot be installed on non-X86_64 systems.');
|
||||
throw new RuntimeException('Shoutcast cannot be installed on non-X86_64 systems.');
|
||||
}
|
||||
|
||||
$router = $request->getRouter();
|
||||
|
@ -25,7 +25,7 @@ final class ShoutcastAction
|
|||
response: $response,
|
||||
component: 'Vue_AdminShoutcast',
|
||||
id: 'admin-shoutcast',
|
||||
title: __('Install SHOUTcast 2 DNAS'),
|
||||
title: __('Install Shoutcast 2 DNAS'),
|
||||
props: [
|
||||
'apiUrl' => (string)$router->named('api:admin:shoutcast'),
|
||||
],
|
||||
|
|
|
@ -25,7 +25,7 @@ final class PostAction
|
|||
Response $response
|
||||
): ResponseInterface {
|
||||
if ('x86_64' !== php_uname('m')) {
|
||||
throw new RuntimeException('SHOUTcast cannot be installed on non-X86_64 systems.');
|
||||
throw new RuntimeException('Shoutcast cannot be installed on non-X86_64 systems.');
|
||||
}
|
||||
|
||||
$flowResponse = Flow::process($request, $response);
|
||||
|
|
|
@ -119,12 +119,12 @@ final class LogsAction
|
|||
|
||||
case FrontendAdapters::Shoutcast:
|
||||
$logPaths['shoutcast_log'] = [
|
||||
'name' => __('SHOUTcast Log'),
|
||||
'name' => __('Shoutcast Log'),
|
||||
'path' => $stationConfigDir . '/shoutcast.log',
|
||||
'tail' => true,
|
||||
];
|
||||
$logPaths['shoutcast_conf'] = [
|
||||
'name' => __('SHOUTcast Configuration'),
|
||||
'name' => __('Shoutcast Configuration'),
|
||||
'path' => $stationConfigDir . '/sc_serv.conf',
|
||||
'tail' => false,
|
||||
];
|
||||
|
|
|
@ -60,7 +60,7 @@ use Throwable;
|
|||
OA\Post(
|
||||
path: '/station/{station_id}/frontend/{action}',
|
||||
operationId: 'doFrontendServiceAction',
|
||||
description: 'Perform service control actions on the radio frontend (Icecast, SHOUTcast, etc.)',
|
||||
description: 'Perform service control actions on the radio frontend (Icecast, Shoutcast, etc.)',
|
||||
security: OpenApi::API_KEY_SECURITY,
|
||||
tags: ['Stations: Service Control'],
|
||||
parameters: [
|
||||
|
|
|
@ -197,7 +197,7 @@ class StationRemote implements
|
|||
{
|
||||
$password = $this->getSourcePassword();
|
||||
|
||||
if (RemoteAdapters::SHOUTcast2 === $this->getTypeEnum()) {
|
||||
if (RemoteAdapters::Shoutcast2 === $this->getTypeEnum()) {
|
||||
$mount = $this->getSourceMount();
|
||||
if (empty($mount)) {
|
||||
$mount = $this->getMount();
|
||||
|
@ -344,7 +344,7 @@ class StationRemote implements
|
|||
$urlScheme = $this->getUrlAsUri()->getScheme();
|
||||
|
||||
return match ($this->getAutodjAdapterTypeEnum()) {
|
||||
RemoteAdapters::SHOUTcast1, RemoteAdapters::SHOUTcast2 => StreamProtocols::Icy,
|
||||
RemoteAdapters::Shoutcast1, RemoteAdapters::Shoutcast2 => StreamProtocols::Icy,
|
||||
default => ('https' === $urlScheme) ? StreamProtocols::Https : StreamProtocols::Http
|
||||
};
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ enum FrontendAdapters: string implements AdapterTypeInterface
|
|||
{
|
||||
return match ($this) {
|
||||
self::Icecast => 'Icecast 2.4',
|
||||
self::Shoutcast => 'SHOUTcast DNAS 2',
|
||||
self::Shoutcast => 'Shoutcast DNAS 2',
|
||||
self::Remote => 'Remote',
|
||||
};
|
||||
}
|
||||
|
|
|
@ -11,8 +11,8 @@ use App\Radio\Remote\Shoutcast2;
|
|||
|
||||
enum RemoteAdapters: string implements AdapterTypeInterface
|
||||
{
|
||||
case SHOUTcast1 = 'shoutcast1';
|
||||
case SHOUTcast2 = 'shoutcast2';
|
||||
case Shoutcast1 = 'shoutcast1';
|
||||
case Shoutcast2 = 'shoutcast2';
|
||||
case Icecast = 'icecast';
|
||||
case AzuraRelay = 'azurarelay';
|
||||
|
||||
|
@ -24,8 +24,8 @@ enum RemoteAdapters: string implements AdapterTypeInterface
|
|||
public function getName(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SHOUTcast1 => 'SHOUTcast 1',
|
||||
self::SHOUTcast2 => 'SHOUTcast 2',
|
||||
self::Shoutcast1 => 'Shoutcast 1',
|
||||
self::Shoutcast2 => 'Shoutcast 2',
|
||||
self::Icecast => 'Icecast',
|
||||
self::AzuraRelay => 'AzuraRelay',
|
||||
};
|
||||
|
@ -34,8 +34,8 @@ enum RemoteAdapters: string implements AdapterTypeInterface
|
|||
public function getClass(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SHOUTcast1 => Shoutcast1::class,
|
||||
self::SHOUTcast2 => Shoutcast2::class,
|
||||
self::Shoutcast1 => Shoutcast1::class,
|
||||
self::Shoutcast2 => Shoutcast2::class,
|
||||
self::Icecast => Icecast::class,
|
||||
self::AzuraRelay => AzuraRelay::class,
|
||||
};
|
||||
|
|
|
@ -39,7 +39,7 @@ final class Shoutcast extends AbstractFrontend
|
|||
return null;
|
||||
}
|
||||
|
||||
return preg_match('/^SHOUTcast .* v(\S+) .*$/i', $process->getOutput(), $matches)
|
||||
return preg_match('/^Shoutcast .* v(\S+) .*$/i', $process->getOutput(), $matches)
|
||||
? $matches[1]
|
||||
: null;
|
||||
}
|
||||
|
|
|
@ -2727,7 +2727,7 @@ paths:
|
|||
post:
|
||||
tags:
|
||||
- 'Stations: Service Control'
|
||||
description: 'Perform service control actions on the radio frontend (Icecast, SHOUTcast, etc.)'
|
||||
description: 'Perform service control actions on the radio frontend (Icecast, Shoutcast, etc.)'
|
||||
operationId: doFrontendServiceAction
|
||||
parameters:
|
||||
-
|
||||
|
@ -3746,6 +3746,10 @@ components:
|
|||
description: 'The full URL to listen to the HLS stream for the station.'
|
||||
example: 'https://example.com/hls/azuratest_radio/live.m3u8'
|
||||
nullable: true
|
||||
hls_listeners:
|
||||
description: 'HLS Listeners'
|
||||
type: integer
|
||||
example: 1
|
||||
type: object
|
||||
Api_NowPlaying_StationMount:
|
||||
type: object
|
||||
|
|
Loading…
Reference in New Issue