mirror of
https://github.com/AzuraCast/AzuraCast.git
synced 2024-06-14 13:16:37 +00:00
45 lines
1.2 KiB
PHP
45 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Radio;
|
|
|
|
class PlaylistParser
|
|
{
|
|
/**
|
|
* @return string[]
|
|
*/
|
|
public static function getSongs(string $playlistRaw): array
|
|
{
|
|
// Process as full PLS if the header is present.
|
|
if (str_starts_with($playlistRaw, '[playlist]')) {
|
|
$parsed_playlist = (array)parse_ini_string($playlistRaw, true, INI_SCANNER_RAW);
|
|
|
|
return array_filter(
|
|
$parsed_playlist['playlist'],
|
|
static function ($key) {
|
|
return str_starts_with(strtolower($key), 'file');
|
|
},
|
|
ARRAY_FILTER_USE_KEY
|
|
);
|
|
}
|
|
|
|
// Process as a simple list of files or M3U-style playlist.
|
|
$lines = preg_split(
|
|
"/[\r\n]+/", // regex supports Windows, Linux/Unix & Old Macs EOL's
|
|
$playlistRaw,
|
|
-1,
|
|
PREG_SPLIT_NO_EMPTY
|
|
);
|
|
if (false === $lines) {
|
|
return [];
|
|
}
|
|
return array_filter(
|
|
array_map('trim', $lines),
|
|
static function ($line) {
|
|
return $line[0] !== '#';
|
|
}
|
|
);
|
|
}
|
|
}
|