46 Commits

Author SHA1 Message Date
gmipf
1663345195 Add a UDF reader and wrapper (#100)
* Add a UDF reader

Reads the Volume Recognition Sequence, the Anchor Volume Descriptor
Pointer (sector 256, then the end of the volume), the Main or Reserve
Volume Descriptor Sequence, the File Set Descriptor and the directory
hierarchy. Type 1 and Metadata Partitions are mapped, Virtual and
Sparable partitions are not.

File Entries, Allocation Extent Descriptors and directories are read in
ascending sector order with wrap-around, adjacent sectors merged into
one request. FindFileEntry follows one path and reads only the
directories on it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Add a UDF wrapper

Prints the volume and file set structures and the directory hierarchy,
and extracts the files. CreateDiscImageWrapper tries UDF after ISO 9660
for a stream at offset 0, so discs with both file systems still open as
ISO 9660.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Treat the stream position as the start of the UDF volume

The UDF reader addresses logical sectors from the start of the stream,
so the wrapper hands it a view that starts at the current position and
keeps that offset, like the other wrappers. CreateDiscImageWrapper no
longer skips UDF for a stream that is not at offset 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Address review comments on the UDF code

- Move the descriptor tag check to UDFExtensions, with tests
- Parse Volume Structure Descriptors in their own method
- Use the existing extensions for numbers, the partition type identifier
  and printing entity identifiers
- Use Array.Exists in IsSafeName
- Make Extract non-virtual and remove the printing test
- Use collection expressions and string interpolation

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Parse File Identifier Descriptors in their own method

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Add a TODO to use the CRC from Hashing

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:18:23 +01:00
Matt Nadareski
5c3184baa7 Add .NET 11 support 2026-11-11 12:02:16 +01:00
Matt Nadareski
04e8751f9b Update packages 2026-10-12 09:56:31 -04:00
Matt Nadareski
e80ea00872 Update packages 2026-08-27 09:36:42 -04:00
Matt Nadareski
05c86e4c24 Add support for BLAKE3 2026-07-23 11:36:54 -04:00
Matt Nadareski
b4e1f6b729 Update packages, relax requirements 2026-07-10 11:23:17 -04:00
Matt Nadareski
249c51933b Update packages 2026-05-14 09:25:26 -04:00
Matt Nadareski
cf586f7af2 Add Nintendo Disc extensions tests 2026-05-12 22:47:19 -04:00
Matt Nadareski
59f76b1036 Editorconfig cleanup 2026-04-27 13:28:23 -04:00
Deterous
6fa3631c80 Add Opera FileSystem support (#90)
* Add Opera FileSystem support

* Fix tests
2026-04-27 13:24:30 -04:00
Matt Nadareski
ca3ebf33a8 Flatten Analog out of existence 2026-04-09 22:21:15 -04:00
Matt Nadareski
853e2ff5c0 Flatten Extension out of existence 2026-04-09 22:06:41 -04:00
Matt Nadareski
967d9ffe87 Flatten Instance out of existence 2026-04-09 21:34:00 -04:00
Matt Nadareski
770f6f75d5 Flatten Condition out of existence 2026-04-09 21:13:55 -04:00
Matt Nadareski
baf68f3f81 Replace all instances of XXXXXX with proper test values 2026-04-08 21:04:11 -04:00
Matt Nadareski
f3d6adbe1d Add RV-specific deduped status 2026-04-06 18:37:56 -04:00
Matt Nadareski
4772768c1f Handle item type filtering properly again 2026-04-06 15:03:16 -04:00
Matt Nadareski
e2b2f4d8a5 Rename "CRC" to "CRC32" where appropriate 2026-04-06 07:44:19 -04:00
Matt Nadareski
bf852ef038 DictionaryBase is no more, bon voyage 2026-04-04 23:13:36 -04:00
Matt Nadareski
e31be83832 RomProperties, no, not that one 2026-04-04 22:31:23 -04:00
Matt Nadareski
0491133329 Move hash-based equality checkers lower down the chain 2026-04-04 20:04:01 -04:00
Matt Nadareski
4acd2d9fd6 Reduce generic DictionaryBase use 2026-04-04 13:31:12 -04:00
Matt Nadareski
9ffa2a5e23 Convert Disk fully over to properties 2026-04-04 01:15:40 -04:00
Matt Nadareski
8e2f519e15 Convert most of Media over to properties 2026-04-03 19:47:58 -04:00
Matt Nadareski
9df08780db Handle an enum that needed to be handled 2026-04-03 17:41:36 -04:00
Matt Nadareski
1d5514b29d Convert Display and Video fully over to properties 2026-04-03 13:08:36 -04:00
Matt Nadareski
c74942362c Name property cleanup, fixes 2026-04-02 13:21:37 -04:00
Matt Nadareski
8356aed5b0 Device.Manadatory converted to property 2026-04-02 02:43:29 -04:00
Matt Nadareski
276448a914 Merge branch 'main' into attempt-metadata-overhaul 2026-04-02 02:25:22 -04:00
Matt Nadareski
81c47b297d Editorconfig cleanup of ZAR 2026-04-02 02:23:02 -04:00
Deterous
5bb8557555 ZArchive support (#75)
* ZArchive support

* Fix offset record format

* Simplfiy Extensions

* Delete unused writers and test data

* Rework reader

* Fix build
2026-04-02 02:18:47 -04:00
Matt Nadareski
c4524d20f0 Enum type conversion to property 2026-04-02 02:18:08 -04:00
Matt Nadareski
451e89afff Boolean stuff convert to property 2026-04-01 21:59:16 -04:00
Matt Nadareski
5812d197a5 Change Name to concrete property 2026-04-01 13:18:45 -04:00
Matt Nadareski
6810dce2ed Remove redundant ItemType declarations 2026-04-01 11:37:44 -04:00
Matt Nadareski
3e2bba866d Change ItemType into concerete property 2026-04-01 11:24:33 -04:00
Matt Nadareski
e9902f0907 Reduce extension confusion 2026-03-27 00:48:44 -04:00
Matt Nadareski
8de1fbc52f Reduce enum overhead in metadata 2026-03-26 22:51:14 -04:00
Matt Nadareski
8a51f5d8ab Wire through already-added CRC-16 and CRC-64 2026-03-24 21:19:09 -04:00
Matt Nadareski
5f0fdcfd8d Update to IO 2.0.0 2026-03-24 18:02:49 -04:00
Matt Nadareski
1053ff7f23 Add ConditionalHashEquals tests 2026-03-22 20:26:28 -04:00
Matt Nadareski
de6a08539a Wrong filename 2026-03-22 20:22:22 -04:00
Matt Nadareski
219392e3a0 Port DictionaryBase extensions from ST
Notably, this is missing the equality checking because ST introduces a new type called "ModelBackedItem", which is specifically a type backed by a DictionaryBase item, with extensions. It is very similar to a Wrapper, but has different common utility. If there is a way to migrate that here, then the equality methods can come here as well.
2026-03-22 20:22:04 -04:00
Matt Nadareski
5544ab0b8a Add majority of data extensions tests, fix minor issues 2026-03-21 20:09:10 -04:00
Matt Nadareski
7689c6dd07 Libraries
This change looks dramatic, but it's just separating out the already-split namespaces into separate top-level folders. In theory, every single one could be built into their own Nuget package. `SabreTools.Serialization` still builds the normal Nuget package that is used by all other projects and includes all namespaces.
2026-03-21 16:26:56 -04:00
Matt Nadareski
b2f074048d Create extensions test project 2026-03-18 16:21:16 -04:00