Table of Contents

Namespace Archiver.Core.Models

Classes

AntivirusScanOptions

T-F146. Deliberately not ExtractOptions — a scan never has a destination/conflict/MOTW dimension, so reusing that record would carry a pile of meaningless properties.

ArchiveEntryInfo

One entry inside an archive, as reported by IArchiveService/ITarService's ListEntriesAsync. Flat — Path is the full archive-internal path ('/'-separated, no leading slash). Building a folder hierarchy out of these is an App-layer concern (Archiver.Core has zero WinUI/UI-model references), not Core's.

ArchiveError
ArchiveListResult

Result of listing an archive's entries. Never throws to callers — a failure to list (corrupted archive, tar.exe missing, unsupported format) is reported via Success/ErrorMessage, matching every other IArchiveService/ITarService method's "never throw" convention.

ArchiveOptions
ArchiveResult
ArchiveWarning

Something the user should know about an operation that still did what was asked (T-F280): the source was processed and nothing was left out. Unlike an ArchiveError it does not make the operation fail, and unlike a SkippedFile nothing was skipped.

CompressionBombWarning

Details surfaced to a confirmation callback when an archive's declared uncompressed size exceeds the compression-ratio threshold (T-F94). See ArchiveEntrySecurity.EvaluateCompressionBombAsync.

ConflictDecision
ConflictInfo
CoreText

A user-visible Core message as a code plus the values it was built from (T-F209), so a frontend can render it in the user's language. An argument is either a string (a file name, a number already formatted, an exception or tar.exe message) or another CoreText ("Cannot extract archive: {tar.exe extraction failed: ...}").

ExtractOptions
GroupPolicyOptions

Effective Group Policy settings for Pakko (T-F51), read from HKLM\Software\Policies\Pakko\ via GroupPolicyService.Load(). A parameterless instance means no policy is set (MOTW propagated to all files, no format restriction, tar extraction enabled). T-F261: every engine and router requires an instance — none falls back to this default on its own.

PasswordDecision

The caller's answer to one PasswordPromptInfo prompt.

PasswordPromptInfo

Passed to ResolvePasswordAsync/ResolvePasswordAsync once per archive, before the entry loop runs — never once per entry (see docs/TASKS.md's T-F189 entry).

ProgressReport

Progress snapshot reported during archive/extract operations.

RecoveryCheck

The PAR2 check of one archive during a test (T-F275 step 3), present only when PAR2 files were found for it. Damage is also an ArchiveError in the same result and a set that does not match or cannot be read an ArchiveWarning, so a frontend that ignores this list still reports the outcome.

RecoveryTarget

The archive a PAR2 file protects, or why it cannot be said (T-F275 step 3c). Exactly one of the two is set.

RepairOptions

What to repair from PAR2 recovery data (T-F275 step 4).

SkippedFile
SourceResult

The outcome of one source path of an operation (T-F260).

TarCapabilities

What the system's tar.exe (libarchive) supports, probed once via ITarService.DetectCapabilitiesAsync by parsing its version output. tar.exe can read RAR/7z but never write either — libarchive has no writer for them (see CLAUDE.md's tar.exe format-support hard constraint).

ThreatFinding

One entry-level (or whole-archive-level, when EntryPath is null) scan outcome.

ThreatScanResult

Kept out of ArchiveResult/ArchiveError on purpose (see docs/DECISIONS.md's T-F146 entry) — a scan is not an extraction outcome and needs its own three-state result, not a two-state success/failure one.

Enums

ArchiveContainerFormat
ArchiveFormat
ArchiveMode

Whether multiple source items produce one archive or one archive each.

ConflictBehavior

How a destination conflict is resolved.

ConflictResolution
EntryEncryption

How one archive entry is encrypted, read from the ZIP headers without a password (T-F199). Unknown means the entry is marked encrypted but the method could not be read (a malformed WinZip AES record, PKWARE strong encryption).

ExtractMode

How multiple archives being extracted at once land relative to each other.

HashAlgorithmKind

T-F128: the two hash algorithms exposed via the Explorer context menu's "Хеш-суми" submenu.

MessageCode

What a user-visible Core message says (T-F209). Core fills the English text itself; a frontend renders the code in the user's language. None is text Core did not write (an operating-system or .NET exception message, tar.exe's own output), shown as is.

MotwMode

Controls Mark-of-the-Web propagation on extracted files (T-F51's EnforceMOTW policy). Numeric values match the HKLM\Software\Policies\Pakko\EnforceMOTW DWORD, mirroring NanaZip's own WriteZoneIdExtract shape.

OperationOutcome

What a whole operation achieved (T-F260) — the one classification every frontend maps to its exit code, dialog or status line. Cancellation is not an outcome: it throws OperationCanceledException.

PasswordPurpose

Which direction a password is being requested for — see Purpose.

ProgressPhase

What an operation is doing when it sends a ProgressReport (T-F307).

RecoveryState

What a PAR2 set says about the archive it protects (T-F275).

SourceOutcome

How completely one source (an archive being extracted, or a file/folder being archived) was processed by an operation (T-F260).

ThreatVerdict

T-F146. Named ThreatVerdict/ThreatFinding/ThreatScanResult (not "Scan*") deliberately — TarSandboxedService.ScanForUnsafeEntriesAsync already owns "Scan" for the unrelated T-F49 traversal/symlink pre-scan; keeping the two grep-separable avoids confusing them. Inconclusive must never be silently rendered as Clean by any caller — it means "Pakko could not determine an answer" (no AMSI provider registered, a provider call failed, an entry was too large to buffer, or a tar-family entry vanished/became unreadable between extraction and scan), which is a different fact from a scan that genuinely came back negative.