mirror of
https://code.castopod.org/adaures/castopod
synced 2025-04-19 04:51:17 +00:00
55 lines
1.5 KiB
PHP
55 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Modules\PodcastImport\Entities\PodcastImportTask;
|
|
use Modules\PodcastImport\Entities\TaskStatus;
|
|
|
|
/**
|
|
* @copyright 2023 Ad Aures
|
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
|
* @link https://castopod.org/
|
|
*/
|
|
|
|
if (! function_exists('get_import_tasks')) {
|
|
/**
|
|
* @return PodcastImportTask[]
|
|
*/
|
|
function get_import_tasks(?string $podcastHandle = null): array
|
|
{
|
|
/** @var PodcastImportTask[] $podcastImportsQueue */
|
|
$podcastImportsQueue = service('settings')
|
|
->get('Import.queue') ?? [];
|
|
|
|
if (! is_array($podcastImportsQueue)) {
|
|
return [];
|
|
}
|
|
|
|
if ($podcastHandle !== null) {
|
|
$podcastImportsQueue = array_filter($podcastImportsQueue, static function ($importTask) use (
|
|
$podcastHandle
|
|
): bool {
|
|
return $importTask->handle === $podcastHandle;
|
|
});
|
|
}
|
|
|
|
usort($podcastImportsQueue, static function (PodcastImportTask $a, PodcastImportTask $b): int {
|
|
if ($a->status === $b->status) {
|
|
return $a->created_at->isAfter($b->created_at) ? -1 : 1;
|
|
}
|
|
|
|
if ($a->status === TaskStatus::Running) {
|
|
return -1;
|
|
}
|
|
|
|
if ($a->status === TaskStatus::Queued && $b->status !== TaskStatus::Running) {
|
|
return -1;
|
|
}
|
|
|
|
return $a->created_at->isAfter($b->created_at) ? -1 : 1;
|
|
});
|
|
|
|
return array_values($podcastImportsQueue);
|
|
}
|
|
}
|