$sampleMessageIds * @param list $jpgMessageIds * @param list $archiveCandidates * @param list $unsupportedReasons */ public function __construct( public array $sampleMessageIds = [], public array $jpgMessageIds = [], public string $mediaInfoMessageId = '', public string $audioInfoMessageId = '', public string $audioInfoExtension = '', public array $archiveCandidates = [], public int $bookFileCount = 0, public bool $bookFlood = false, public int $duplicateMessageIdCount = 0, public array $unsupportedReasons = [], ) {} public function hasCompressedFile(): bool { return $this->archiveCandidates !== []; } /** * @return list */ public function orderedArchiveCandidates(bool $reverse = false): array { return $reverse ? array_reverse($this->archiveCandidates) : $this->archiveCandidates; } /** * Return a stable priority view without changing the legacy processing order. * * @return list */ public function prioritizedArchiveCandidates(): array { $firstVolumes = []; $remaining = []; foreach ($this->archiveCandidates as $candidate) { if ($candidate->likelyFirstVolume) { $firstVolumes[] = $candidate; } else { $remaining[] = $candidate; } } return [...$firstVolumes, ...$remaining]; } }