feat(dump): list dumps stored in the plugin filesystem

This commit is contained in:
haylan committed 2026-09-14 22:00:26 +02:00
1 parent f982c3c3da
commit 309cdf3f09
3 files changed
+90

No files matched your search

+48
View File
@@ -0,0 +1,48 @@
<?php declare(strict_types=1);
namespace AeonDumpManager\Service;
use AeonDumpManager\Struct\DumpFile;
use League\Flysystem\FilesystemOperator;
class DumpLister
{
private const DUMP_DIRECTORY = 'dumps';
public function __construct(
private readonly FilesystemOperator $aeonDumpManagerFilesystemPrivate,
private readonly DumpFilenameParser $filenameParser,
) {
}
/**
* @return DumpFile[] newest first
*/
public function list(): array
{
$dumps = [];
foreach ($this->aeonDumpManagerFilesystemPrivate->listContents(self::DUMP_DIRECTORY) as $item) {
if (!$item->isFile()) {
continue;
}
$filename = basename($item->path());
$datetime = $this->filenameParser->parse($filename);
if ($datetime === null) {
continue;
}
$dumps[] = new DumpFile($filename, $datetime, $item->fileSize());
}
usort($dumps, static fn (DumpFile $a, DumpFile $b) => $b->datetime <=> $a->datetime ?: $b->filename <=> $a->filename);
return $dumps;
}
public static function path(string $filename): string
{
return self::DUMP_DIRECTORY . '/' . $filename;
}
}
@@ -0,0 +1,13 @@
<?php declare(strict_types=1);
namespace AeonDumpManager\Service\Exception;
use RuntimeException;
class DumpNotFoundException extends RuntimeException
{
public static function create(string $filename): self
{
return new self(sprintf('Dump "%s" does not exist.', $filename));
}
}