Compare commits

...

505 Commits

Author SHA1 Message Date
f40bf12e72 Linux extended filesystem is now a fully readable filesystem. 2026-02-03 22:17:34 +00:00
e62be9162a [ext] Implement statfs. 2026-02-03 22:16:02 +00:00
add96e2a4b [ext] Implement readlink. 2026-02-03 22:13:25 +00:00
7ab554cc8d [ext] Implement file operations. 2026-02-03 22:10:02 +00:00
ae62bf6a1d [ext] Implement getatttributes. 2026-02-03 22:06:54 +00:00
bce3d25213 [ext] Fix block traversal. 2026-02-03 22:05:20 +00:00
49350d25b2 [ext] Mark xattr operations as not supported. 2026-02-03 21:37:42 +00:00
063df0a4f2 [ext] Implement stat. 2026-02-03 21:35:57 +00:00
f30a9d883c [ext] Implement directory operations. 2026-02-03 21:32:02 +00:00
ee42c155fa [ext] Implement mount. 2026-02-03 21:27:53 +00:00
ce278501b2 [ext] Use correct line separators in get information. 2026-02-03 21:25:58 +00:00
21c47776b9 [ext] Use marshalling in get information. 2026-02-03 21:24:09 +00:00
c5d19bd953 [ext] Promote to IReadOnlyFilesystem 2026-02-03 21:11:09 +00:00
004a69e1d2 [ext] Add missing structures. 2026-02-03 21:09:37 +00:00
bfae79e395 Xia is now a fully readable filesystem. 2026-02-03 20:56:51 +00:00
38e201a742 [Xia] Implement unmount. 2026-02-03 20:56:18 +00:00
6f069a2b8d [Xia] Implement statfs. 2026-02-03 20:53:39 +00:00
f4460cf5a4 [Xia] Implement readlink. 2026-02-03 20:50:06 +00:00
59b8ab6b04 [Xia] Implement file operations. 2026-02-03 20:47:41 +00:00
d67b4d9938 [Xia] Implement GetAttributes. 2026-02-03 20:36:06 +00:00
19253ea67b [Xia] Ignore . and .. directory entries. 2026-02-03 20:34:30 +00:00
196cc56bef [Xia] Set xattr operations as not supported. 2026-02-03 20:30:41 +00:00
180eba183e [Xia] Implement Stat. 2026-02-03 20:28:59 +00:00
e4e0d77366 [Xia] Implement directory operations. 2026-02-03 20:23:25 +00:00
e3bf0dcd29 [Xia] Implement mount. 2026-02-03 20:18:55 +00:00
76128dfc1a [Xia] Promote to IReadOnlyFilesystem 2026-02-03 20:00:50 +00:00
9083b3a6a8 exFAT is now a fully readable filesystem. Fixes #686 2026-02-03 12:22:55 +00:00
98b223614c [exFAT] Implement unmount. 2026-02-03 12:22:09 +00:00
ff57c21ae4 [exFAT] Implement file operations. 2026-02-03 12:17:40 +00:00
56f9cd914c [exFAT] Implement GetAttributes. 2026-02-03 12:10:56 +00:00
f7792627aa [exFAT] Implement stat. 2026-02-03 12:09:23 +00:00
3fc527f32b [exFAT] Implement statfs. 2026-02-03 12:02:24 +00:00
d9e85a2bc0 [exFAT] Implement directory operations. 2026-02-03 12:02:08 +00:00
d8e58f69e3 [exFAT] Mark xattr and readlink as not supported operations. 2026-02-03 11:50:29 +00:00
1e4eff5869 [exFAT] Implement mount. 2026-02-03 11:48:04 +00:00
af438af639 [exFAT] Implement ExFatToDateTime conversion method 2026-02-03 11:47:49 +00:00
73a6c38c9c [exFAT] Promote to IReadOnlyFilesystem 2026-02-03 11:20:06 +00:00
031e72afdb [exFAT] Added all missing structures from official specification. 2026-02-03 11:17:54 +00:00
e430762c88 [HFS] Brute-force finding the root directory node. 2026-02-03 02:27:28 +00:00
3aadf4db25 BeOS (old) filesystem is now a fully readable filesystem. 2026-02-03 01:51:13 +00:00
282ba70ad8 [BeOFS] Fix xattr implementation. 2026-02-03 01:50:38 +00:00
3849ffd111 [BeOFS] Symbolic links are not supported. 2026-02-03 01:37:32 +00:00
3a1d2ed548 [BeOFS] Implement unmount. 2026-02-03 01:27:27 +00:00
63b79a6684 [BeOFS] Implement file operations. 2026-02-03 01:25:19 +00:00
2bcd319da9 [BeOFS] Move properties to principal. 2026-02-03 01:16:33 +00:00
9ee3255349 [BeOFS] Implement StatFS. 2026-02-03 01:15:21 +00:00
6b2aa60e7c [BeOFS] Implement GetAttributes. 2026-02-03 01:12:06 +00:00
a4d255791a [BeOFS] Implement subdirectory traversal. 2026-02-03 01:10:24 +00:00
18d7da890e [BeOFS] Implement xattr operations. 2026-02-03 00:34:48 +00:00
a36e5c48e6 [BeOFS] Implement Stat. 2026-02-03 00:28:38 +00:00
2fcf3ad73f [BeOFS] Implement directory operations. 2026-02-03 00:15:12 +00:00
3d6c8a22bd [BeOFS] Implement mount. 2026-02-03 00:04:30 +00:00
c129271b5c [BeOFS] Promote to IReadOnlyFilesystem. 2026-02-02 23:01:53 +00:00
a60469b8d7 Add consts. 2026-02-02 22:57:44 +00:00
4c93ecfa13 [BeOFS] Add missing structs. 2026-02-02 22:56:32 +00:00
e9027eeef1 Implement detection and get information for the Be (old) filesystem. 2026-02-02 22:51:03 +00:00
dba10a64eb BeOS is now a fully readable filesystem. 2026-02-02 21:53:52 +00:00
c828d01eb7 [BeFS] Enhance B+tree parsing with detailed logging and improved node traversal 2026-02-02 21:48:54 +00:00
0b2203ff38 [BeFS] Move ParseDirectoryBTree to another file. 2026-02-02 21:25:19 +00:00
f3dadd8cf6 [BeFS] Fix file reading. 2026-02-02 21:21:13 +00:00
52c2339e64 [BeFS] Fix mounting CDs. 2026-02-02 21:00:29 +00:00
896e7e1e96 [BeFS] Fix directory traversal. 2026-02-02 20:42:08 +00:00
bfc12f82ce [BeFS] Implement unmount. 2026-02-02 20:15:15 +00:00
6d6cd069a6 [BeFS] Implement readlink. 2026-02-02 20:12:27 +00:00
a20577d8c6 [BeFS] Implement file operations. 2026-02-02 20:10:51 +00:00
bfb4b3b4b2 [BeFS] Implement StatFS. 2026-02-02 20:05:54 +00:00
7c2d31e754 [BeFS] Implement xattr operations. 2026-02-02 20:03:33 +00:00
6bf20e6ce5 [BeFS] Implement Stat and GetAttributes. 2026-02-02 19:56:36 +00:00
3ebdd0073c [BeFS] Implement directory operations. 2026-02-02 19:38:48 +00:00
1e41fa716a [BeFS] Implement indirect and double indirect data streams. 2026-02-02 19:38:24 +00:00
3a6362abc0 [BeFS] Implement mounting. 2026-02-02 19:14:52 +00:00
071e59fc21 [BeFS] Promote to IReadOnlyFilesystem 2026-02-02 17:22:54 +00:00
ff00edfa93 [BeFS] Add missing structures. 2026-02-02 17:19:43 +00:00
07416f5cb8 HFS+ is now a fully readable filesystem. 2026-02-02 15:45:37 +00:00
1e7659f87c [HFS+] Fix handling of wrapped volumes. 2026-02-02 15:45:01 +00:00
0bc12d1c0c [HFS+] Implement support for case-sensitive volumes. 2026-02-02 15:12:26 +00:00
b0c49b6b8f [HFS+] Implement unmount. 2026-02-02 15:07:11 +00:00
6c6c8cf549 [HFS+] Implement ReadLink. 2026-02-02 15:05:12 +00:00
a269f74fac [HFS+] Implemented file operations. 2026-02-02 15:01:15 +00:00
464bf4fef0 [HFS+] Implement StatFs. 2026-02-02 14:00:29 +00:00
ea96d65411 [HFS+] Implement GetAttributes. 2026-02-02 13:51:50 +00:00
e01e9c2f62 [HFS+] Fix directory traversal. 2026-02-02 13:42:41 +00:00
0e12bb4c03 [HFS+] Implement xattr operations. 2026-02-02 13:31:31 +00:00
d2d519e5d6 [HFS+] Implement Stat. 2026-02-02 13:20:01 +00:00
ca5ac60088 [HFS+] Implement directory operations. 2026-02-02 13:09:10 +00:00
e1959fd00e [HFS+] Implement mount. 2026-02-02 12:52:37 +00:00
b2118bfdbe [HFS+] Update GetInformation to use new structures. 2026-02-02 12:00:38 +00:00
4907e73ac4 [HFS+] Added structures from TN1150. 2026-02-02 11:53:37 +00:00
b082553ebf [HFS+] Promote to IReadOnlyFilesystem 2026-02-02 03:33:54 +00:00
69bcf990db HFS is not a readable filesystem. Fixes #391 2026-02-02 02:43:40 +00:00
6f0ea32ea9 [HFS] Add support for another edge case. 2026-02-02 02:42:38 +00:00
d4afb1bc66 [HFS] Set attributes more appropriately. 2026-02-02 02:41:56 +00:00
c2eb4e654f [HFS] Support Toast edge case. 2026-02-02 00:48:20 +00:00
30874d0dcf [HFS] Fix handling of files with slashes in the names. 2026-02-02 00:47:59 +00:00
2b06401020 [HFS] Fix MDB validation, must be a multiple of 512 not a power of 2. 2026-02-02 00:47:14 +00:00
ecd5a8fa9b [HFS] Add support for some catalog edge cases found in floppy disks. 2026-02-01 22:04:31 +00:00
0d71a49907 [HFS] Fix replacement of '/' with ':' in filenames. 2026-02-01 22:03:54 +00:00
8a42609a98 [HFS] Show creator and type as xattrs consistently with Linux's hfs driver. 2026-02-01 22:02:43 +00:00
0a2ba3a42c [HFS] Add support for CDROM. 2026-02-01 19:03:27 +00:00
d517a984b8 [HFS] Mark readlink as not supported. 2026-02-01 17:47:04 +00:00
4d99f14cb4 [HFS] Mark readlink as not supported. 2026-02-01 17:47:04 +00:00
aadd1e1f49 [HFS] Implement unmount. 2026-02-01 17:46:13 +00:00
08af6a28de [HFS] Implemented file operations. 2026-02-01 17:44:04 +00:00
8bd739ed33 [HFS] Move file methods to File file file. 2026-02-01 17:33:38 +00:00
0ccfd1864d [HFS] Implement GetAttributes. 2026-02-01 17:32:23 +00:00
1be5ccecbf [HFS] Implement xattr methods. 2026-02-01 17:30:23 +00:00
71dfb1cb05 [HFS] Put properties in place. 2026-02-01 16:59:04 +00:00
04ff02a849 [HFS] Read the extents overflow file. 2026-02-01 16:56:07 +00:00
3a18edbd7e [HFS] Implemented stat. 2026-02-01 16:27:23 +00:00
d87d1efe43 [HFS] Implement directory operations. 2026-02-01 16:18:42 +00:00
5e2806973f [HFS] Implement StatFs. 2026-02-01 15:49:36 +00:00
5dd0511ec2 [HFS] Refactor catalog name extraction with proper encoding handling 2026-02-01 15:43:07 +00:00
779569be42 [HFS] Implement mount and cache root directory. 2026-02-01 15:37:49 +00:00
7270a2e521 [HFS] Promote to IReadOnlyFilesystem. 2026-02-01 11:21:46 +00:00
aab9d3df12 [UDF] Optimize reading from allocation descriptors with early exit and precise sector calculations 2026-02-01 10:53:30 +00:00
22b698f002 [UDF] Parse timestamps from xattr. 2026-02-01 10:15:48 +00:00
5e5df3e086 [UDF] More file reading optimizations. 2026-02-01 10:10:20 +00:00
106783d067 [UDF] Optimize file reading. 2026-02-01 01:23:40 +00:00
0769719d48 [UDF] Enhance root directory ICB retrieval with fallback to FSD partition 2026-02-01 00:36:50 +00:00
4c32e4d186 Merge branch 'refs/heads/udf' into devel 2026-02-01 00:11:38 +00:00
006be5e652 Promote UDF to fully supported filesystem. Fixes #446 2026-02-01 00:10:13 +00:00
705fa5c6c9 [UDF] Update UDF version support to include up to 2.60 2026-02-01 00:08:28 +00:00
3d8758b93f [UDF] Add support for UDF 2.50 metadata partitions and enhance partition-aware read functionality 2026-02-01 00:06:09 +00:00
434bb87c8c [UDF] Add support for OS/400 DirInfo in UDF 2.01 2026-01-31 23:50:22 +00:00
4f3268cf35 [UDF] Add support for extended file entry and named streams. 2026-01-31 23:45:41 +00:00
01ec76347d [UDF] Add support for 1.50 sparting tables and virtual partitions. 2026-01-31 23:25:40 +00:00
b735122af2 [UDF] Enhance ECMA-167 timestamp conversion with validation checks 2026-01-31 23:25:01 +00:00
2d11a895d9 [UDF] Refactor information to use same recognition as mount. 2026-01-31 22:19:23 +00:00
ed66f52285 [UDF] Fix volume recognition sequence. 2026-01-31 22:11:58 +00:00
3ade31b411 [UDF] Detect bootable. 2026-01-31 21:58:53 +00:00
a08e5162ac [UDF] Improve documentation. 2026-01-31 21:54:07 +00:00
43c2f42a04 [UDF] Implement unmount. 2026-01-31 21:49:39 +00:00
6034dc439c [UDF] Implement file operations. 2026-01-31 21:47:40 +00:00
7c78918f7a [UDF] Implement GetAttributes. 2026-01-31 21:38:22 +00:00
6a23f39234 [UDF] Implement ReadLink. 2026-01-31 21:33:53 +00:00
0ea3e709f6 [UDF] Implement properties. 2026-01-31 21:31:08 +00:00
233cd4c265 [UDF] Implement extended attributes. 2026-01-31 21:24:22 +00:00
3a051233e8 [UDF] Implement stat. 2026-01-31 20:49:29 +00:00
c92630ee89 [UDF] Implement directory methods. 2026-01-31 20:45:05 +00:00
78039ba74a [UDF] Implement StatFs method 2026-01-31 20:18:58 +00:00
b2a2c8ad0d [UDF] We're mounted. 2026-01-31 20:15:00 +00:00
8faacb6d80 [UDF] Add code to search for root directory ICB. 2026-01-31 20:10:12 +00:00
d1c5b0ce68 [UDF] Added consts from UDF 1.02 2026-01-31 17:05:02 +00:00
354c1c7a8e [UDF] Add ECMA-167 enumerations. 2026-01-31 16:46:07 +00:00
6d46f17487 [UDF] Add ECMA-167 consts. 2026-01-31 16:45:40 +00:00
9203c5d32f [UDF] Added structs from ECMA-167. 2026-01-31 16:14:55 +00:00
5b0564f206 [UDF] Promote to readonly filesystem. 2026-01-31 14:31:45 +00:00
e729a0f3dc Merge pull request #898 from aaru-dps/fakeshemp/divide-by-zero
Solve divide by zero error
2026-01-28 11:04:04 +00:00
Rebecca Wallander
3d4ae298d5 Solve divide by zero error 2026-01-24 12:03:31 +01:00
c9404499e7 Add 'metadata-schema' command to generate JSON schema for Aaru metadata files 2026-01-19 09:40:22 +00:00
f87a48aadd Escape markup in CD-Text logging to prevent formatting issues 2026-01-14 16:46:46 +00:00
7343de9558 Correct processing of headerless CD-Text coming from images, in image info command. Fixes #662 2026-01-14 16:26:59 +00:00
0bec394166 Only re-read pregap sectors that belong to track type changes. 2026-01-13 12:54:22 +00:00
f26e57bf83 Bump development version. 2026-01-13 12:53:51 +00:00
18322abcba Merge pull request #895 from aaru-dps/fakeshemp/dvd-raw-refactor
Refactor raw DVD reading
2026-01-11 13:53:11 +00:00
Rebecca Wallander
8ebfd8c810 Rename Lite-On commands to ReadBuffer3C 2026-01-11 10:23:21 +01:00
Rebecca Wallander
6fb6535b6a Try to dynamically figure out the buffer size 2026-01-10 22:51:55 +01:00
Rebecca Wallander
88bd0877ae Enable other drives that can read raw 2026-01-10 22:23:58 +01:00
Rebecca Wallander
27fd729c9a Move more methods to ReadBuffer 2026-01-10 20:30:48 +01:00
Rebecca Wallander
ec4c99a8ab Enable reading raw switch 2026-01-10 20:30:48 +01:00
Rebecca Wallander
8429941faf Try to identify stride 2026-01-10 20:30:48 +01:00
Rebecca Wallander
8f1a6b3f00 Rework device reports to try other commands if one fail and log them 2026-01-10 20:30:48 +01:00
b2163cf8bd Configure Spectre.Console to propagate exceptions so they are handled by us. 2026-01-09 23:48:17 +00:00
06cd4acc41 Fix logging of Blu-ray disc information to avoid crash when information contrain braces or brackets. 2026-01-09 23:47:51 +00:00
6a885f1818 Fix creating sidecar of files with brackets of braces. 2026-01-09 10:40:38 +00:00
4ee955613e Fix listing files with braces. 2026-01-09 10:19:42 +00:00
a9c474b786 Fix missing markup end tag. 2026-01-09 10:19:15 +00:00
f8131c08f6 [ISO9660 date helper] Handle invalid ISO9660 dates.
Just return epoch, not much else we can do.
2026-01-09 02:12:21 +00:00
b17a85942c [GUI] Fix barcode casting. 2026-01-08 21:52:12 +00:00
4e711c0fcd [GUI] Fix wrongly using marked up path in image metadata editor. 2026-01-08 21:51:58 +00:00
2fad54af5d [GUI] Make image path visible whatever tab is selected when editing image's metadata. 2026-01-08 21:51:25 +00:00
6f53cc4717 Ensure sidecar gets always filenames without paths. 2026-01-08 21:50:44 +00:00
86bc57b4bd Disable default calculation of SpamSum on sidecar creation.devel
Nobody seems to be using it and it's an order of magnitude slower than the next slowest hash.
2026-01-07 01:42:00 +00:00
d51b1733aa Split release from devel. 2026-01-06 17:30:38 +00:00
8c75bceb70 Bump version to 6.0.0-alpha.18 2026-01-06 17:12:48 +00:00
89751baced Update changelog. 2026-01-06 16:12:26 +00:00
7ad1590fdd Update libaaruformat package version to 1.0.0-alpha.30 2026-01-06 16:05:37 +00:00
61d067d57b Merge pull request #894 from aaru-dps/fakeshemp/a2r-updates
Update readable formats in README
2026-01-06 11:29:37 +00:00
Rebecca Wallander
498d48b20f Update readable formats in README 2026-01-06 12:18:30 +01:00
145a381a56 Merge pull request #893 from aaru-dps/fakeshemp/a2r-updates
Update flux image formats
2026-01-06 10:03:27 +00:00
Rebecca Wallander
5955c3cade Use string literals for readability 2026-01-06 09:33:59 +01:00
Rebecca Wallander
1d7f5b0de8 Add Floppy_WriteProtection media tag 2026-01-05 22:46:40 +01:00
Rebecca Wallander
b48436c295 Update A2R functionality 2026-01-05 22:46:40 +01:00
bce5ae0764 Sort merged hardware by the starting LBA of the first extent 2026-01-05 11:08:23 +00:00
75a2e4e90a Merge pull request #892 from aaru-dps/fakeshemp/hxcstream
Add HxCStream support
2026-01-05 11:04:47 +00:00
02faee8cce Merge pull request #891 from aaru-dps/fakeshemp/flux-info-fix
Only display that image contains flux if it actually has captures
2026-01-05 11:00:42 +00:00
Rebecca Wallander
0219f7b4de Add HxCStream support 2026-01-05 11:46:28 +01:00
Rebecca Wallander
a4744b1e29 Only display that image contains flux if it actually has captures 2026-01-05 11:12:35 +01:00
fab19cd6ba Remove collision of progress bars. 2026-01-05 01:57:29 +00:00
6eb4fb16e5 Add progress updates and localization for hardware processing in image merge command 2026-01-05 01:55:07 +00:00
06de336030 Optimize sector override checks by using HashSet for O(1) lookups in dump hardware creation in merge command. 2026-01-05 01:54:46 +00:00
5d73776a5a Add abort checks in sector processing loops in dump hardware creation in image merge command. 2026-01-05 01:53:34 +00:00
440e820e2d Fix bug dumping 2nd layer PFI. 2026-01-04 22:04:07 +00:00
2db066ed19 Fix translation typo. 2026-01-04 22:03:43 +00:00
4ed0fe1ccd Merge remote-tracking branch 'origin/fakeshemp/flux' into devel 2026-01-04 16:31:51 +00:00
7f6915c95e Update libaaruformat package version to 1.0.0-alpha.28 2026-01-04 16:29:00 +00:00
Rebecca Wallander
8994b99b10 Fix missing comma in Enums.cs 2026-01-04 10:07:15 +01:00
30ab4d2e13 Add missing using directive. 2026-01-03 16:31:58 +00:00
Rebecca Wallander
5bb89e27ef Merge branch 'devel' into fakeshemp/flux 2026-01-03 14:48:30 +01:00
bdfd1a2a63 [AaruFormat] Synchronize errors enumeration with libaaruformat. 2026-01-03 01:18:02 +00:00
e7c56ab370 Update maintainers file. 2026-01-02 10:39:41 +00:00
347629f378 Updated needed file. 2026-01-02 10:33:10 +00:00
Rebecca Wallander
e6effdef90 Update enum value 2026-01-01 13:39:03 +01:00
60da22967d Update funding model entries in FUNDING.yml 2026-01-01 02:06:57 +00:00
9a9106e8fa Increase HttpClient timeout to 300 seconds when updating the database. 2025-12-31 23:42:23 +00:00
1c24e225ff Add rpm packaging files 2025-12-31 23:19:42 +00:00
c1ca631cf4 Add debian packaging files 2025-12-31 22:43:06 +00:00
eeff7b20e0 Add configuration for symbol copying in Release builds 2025-12-31 22:42:30 +00:00
6f4e6fd1d6 Add application icon. 2025-12-31 19:13:00 +00:00
eb6d564776 Add desktop entry and update package installation for Aaru 2025-12-31 17:42:47 +00:00
514d1f0b25 Reorder columns in progress display for media dump command. 2025-12-31 17:24:12 +00:00
a8ff8d36f2 Update libaaruformat package version to 1.0.0-alpha.27 2025-12-31 15:17:20 +00:00
ecbe78f93a Update libaaruformat package version to 1.0.0-alpha.24 2025-12-30 11:33:41 +00:00
1bd55d8586 Update libaaruformat package version to 1.0.0-alpha.23 2025-12-30 09:16:36 +00:00
ef2f8f89c2 Add guidelines for AI coding agents in AGENTS.md 2025-12-29 18:16:56 +00:00
b643bc7f07 [AaruFormat] Update sector handling to use uint instead of ushort for negative and overflow sectors 2025-12-29 17:08:03 +00:00
1842998372 Update libaaruformat package version to 1.0.0-alpha.22 2025-12-29 17:07:47 +00:00
dd159d6126 Do not try to merge negative or overflow sectors if secondary image lacks them. 2025-12-29 17:07:32 +00:00
19b5be908c Do not stop on merge if seconday image fails to copy negative or overflow sectors. 2025-12-29 17:07:01 +00:00
db79428375 Revamped README. 2025-12-29 13:16:58 +00:00
Rebecca Wallander
8020dee79d Add test suite for flux 2025-12-26 21:42:05 +01:00
Rebecca Wallander
edac070218 Address sonar issues 2025-12-26 21:38:51 +01:00
Rebecca Wallander
0998eb01aa Add flux to aaruformat 2025-12-26 21:38:48 +01:00
4f68b6e2be Set version to alpha 17.1 to split up devel from release. 2025-12-26 17:00:15 +00:00
36eec226ba Update Aaru.Compression.Native package version to 6.0.0-alpha.12 2025-12-26 16:59:34 +00:00
6f6f1c17c9 Bump version to 6.0.0-alpha.17 and update related files 2025-12-26 11:14:42 +00:00
4fd93523ff Update libaaruformat package version to 1.0.0-alpha.21 2025-12-26 10:35:02 +00:00
35c26c9128 Update copyright years to 2026. 2025-12-23 01:40:04 +00:00
550e52b618 Set version to alpha 16.1 to split up devel from release. 2025-12-23 01:29:12 +00:00
078e74bf9c Update build script. 2025-12-22 12:30:23 +00:00
f5e217bd6a Update package version for Arch Linux package. 2025-12-22 12:30:09 +00:00
fceedd1045 Disable block for long named paths. 2025-12-22 12:29:47 +00:00
52310b7f67 Fix datepicker style. 2025-12-22 09:54:57 +00:00
0d4647ac40 Fix datepicker binding. 2025-12-22 09:54:47 +00:00
60b361ae9a Fix localized string. 2025-12-22 09:54:22 +00:00
20ec77823d [Version] Bump version to v6.0.0-alpha.16 2025-12-22 09:32:29 +00:00
fd2db2a1e0 [Documentation] Update changelog. 2025-12-22 09:29:24 +00:00
a6f4326198 Update libaaruformat package version to 1.0.0-alpha.20 2025-12-21 20:49:58 +00:00
5682d453b0 [Code style] Do not suggest Resharper annotation of parameter nullability. 2025-12-21 20:06:00 +00:00
b7ea7f9216 [AaruFormat] When marshalling booleans treat them as 1-byte signed integers. 2025-12-21 20:05:23 +00:00
c6db847b6a Implement a command to merge two images into a combined third image. 2025-12-21 20:04:50 +00:00
e7066b798f Fix convert calling the logger instead of the error events. 2025-12-21 20:04:08 +00:00
b15915dc03 Fix a typo. 2025-12-21 20:03:20 +00:00
0a7437232c Add option to compare command to use long sectors for comparison. 2025-12-18 16:12:26 +00:00
bab040d0c2 Manage some long file name issue. 2025-12-18 16:11:47 +00:00
2798b1d097 Refactor BlockMap.axaml.cs to use discard for unused tuple elements and make methods static where appropriate 2025-12-17 00:26:38 +00:00
cb19c30132 Fix bug in string formatting in EVPD prettyfier. 2025-12-17 00:26:15 +00:00
c6f69ec6cd Update StatisticsDialog.xaml to remove unnecessary Padding from Close button for cleaner layout 2025-12-16 14:04:27 +00:00
e0327853ee Update StatisticsDialog.xaml to set DataGridTemplateColumn width to '*' for improved layout flexibility 2025-12-16 14:03:48 +00:00
4ecc1647f2 Update StatisticsDialog.xaml to wrap StackPanel in ScrollViewer for improved scrolling and layout management 2025-12-16 14:01:08 +00:00
56044273cd Add alternating row styles to StatisticsDialog.xaml for improved readability 2025-12-16 13:57:38 +00:00
9356f16eba Update SettingsDialog.xaml to wrap StackPanels in ScrollViewers for improved scrolling and layout management 2025-12-16 13:51:19 +00:00
8473fa416d Update SettingsDialog.xaml to adjust StackPanel spacing for improved layout and remove unnecessary Border elements 2025-12-16 13:48:52 +00:00
3edb73070e Refactor LicenseDialog.xaml to simplify button layout by removing unnecessary Border element 2025-12-16 13:46:13 +00:00
e993906cab Remove unnecessary alignment properties from Grid in LicenseDialog.xaml for cleaner layout 2025-12-16 13:46:00 +00:00
0fd083668a Update LicenseDialog.xaml to use dynamic resource for border brush for better theme support 2025-12-16 13:45:46 +00:00
4af98e5dbb Reduce spacing in StackPanel of Console.xaml for improved layout consistency 2025-12-16 13:43:43 +00:00
a6d880bc37 Update DataGrid column width in Console.xaml for better layout flexibility 2025-12-16 13:43:32 +00:00
ee8085c05f Add alternating row styles to DataGrid in Console.xaml for improved readability 2025-12-16 13:43:18 +00:00
96406b844d Update About.xaml to use dynamic resources for foreground and border colors for better theme support 2025-12-16 13:41:20 +00:00
4dc1842c77 Add alternating row styles to DataGrid in About.xaml for improved readability 2025-12-16 13:35:50 +00:00
5785f2d947 Remove unnecessary Padding from TabControl in MetadataEditor.axaml for cleaner layout 2025-12-16 12:33:07 +00:00
fdf695065f Refactor styles in MetadataEditor.axaml to use dynamic resources for improved theme support 2025-12-16 12:29:42 +00:00
c141d1f8e3 Add null conditional operator to prevent potential NullReferenceException in Stop method 2025-12-16 12:29:19 +00:00
eacbe96ccf Refactor layout in ImageMetadata.axaml by replacing TabControl with ScrollViewer for improved usability 2025-12-16 12:00:37 +00:00
333055e5a3 Add margin to StackPanels in ImageMetadata.axaml for improved layout consistency 2025-12-16 11:58:51 +00:00
508a026798 Update SpectreTextBlock in ImageMetadata.axaml to display serial number instead of manufacturer title 2025-12-16 11:57:46 +00:00
7bf82d2570 Refactor layout in MediaDump.xaml by replacing TabControl with ScrollViewer for improved usability 2025-12-16 11:55:23 +00:00
4067ee8a1d Add margin to StackPanels in MediaDump.xaml for improved layout consistency 2025-12-16 11:53:59 +00:00
aeb5698161 Replace TextBox with TextBlock in MediaDump.xaml for improved layout and alignment 2025-12-16 11:52:30 +00:00
45b62a9edd Update BorderBrush in MediaDump.xaml for improved styling 2025-12-16 11:51:31 +00:00
93e426f309 Refactor layout in MhddLogView.axaml by replacing nested Grids with a ScrollViewer and StackPanel for improved usability 2025-12-16 11:47:24 +00:00
c892c330df Add TextWrapping to SpectreTextBlock bindings in MhddLogView.axaml for improved readability 2025-12-16 11:46:06 +00:00
c876155f59 Update BorderBrush and add CornerRadius in MhddLogView.axaml for improved styling 2025-12-16 11:44:58 +00:00
574c24bfd7 Add TextWrapping to SpectreTextBlock bindings in IbgLogView.axaml for improved readability 2025-12-16 11:41:41 +00:00
141c530c72 Refactor layout in IbgLogView.axaml by adding ScrollViewer for improved usability 2025-12-16 11:35:55 +00:00
63de433e26 Refactor layout in MediaScan.xaml by removing nested StackPanel for improved readability 2025-12-16 11:33:17 +00:00
37ff868f18 Add spacing to StackPanel in MediaScan.xaml for improved layout 2025-12-16 11:32:14 +00:00
250b803902 Update BorderBrush in MediaScan.xaml for improved theme support 2025-12-16 11:31:10 +00:00
41851c1792 Refactor layout in ImageVerify.xaml by replacing Grid with StackPanel for improved structure and readability 2025-12-16 11:28:25 +00:00
d1a6b0ee40 Set DataGridTextColumn widths to '*' in ImageVerify.xaml for improved layout 2025-12-16 11:27:27 +00:00
ef92ae8735 Add alternating row styles to DataGrid in ImageVerify.xaml for improved readability 2025-12-16 11:26:26 +00:00
ae1c67a72a Update title binding in ImageSidecar.xaml for localization support 2025-12-16 11:24:28 +00:00
a474b42f61 Set DataGridTemplateColumn widths to 'Auto' and '*' for improved layout in ImageEntropy.xaml 2025-12-16 11:22:26 +00:00
da166acd31 Add alternating row styles to DataGrid in ImageEntropy.xaml for improved readability 2025-12-16 11:22:13 +00:00
8827bfab7b Add ScrollViewer to ImageConvert.xaml for improved layout and scrolling behavior 2025-12-16 11:18:37 +00:00
4c6ab104cc Move button to the right in ImageConvert.xaml for improved layout 2025-12-16 11:13:02 +00:00
4e56d1ca4f Add RowSpacing to Grid in ImageChecksum.xaml for improved layout 2025-12-16 11:10:36 +00:00
7d45606fde Set DataGridTemplateColumn widths to improve layout in ImageChecksum.xaml 2025-12-16 11:08:53 +00:00
4a039376f2 Add ScrollViewer to StackPanel in ImageChecksum.xaml for improved scrolling behavior 2025-12-16 11:07:31 +00:00
1f5cdb2be6 Add alternating row styles to DataGrid in ImageChecksum.xaml for improved readability 2025-12-16 11:06:02 +00:00
85d04f2fa1 Add ScrollViewer to StackPanels in DeviceView.axaml for improved scrolling behavior 2025-12-16 10:59:50 +00:00
e63ce84478 Add TextWrapping to SpectreTextBlock bindings in DeviceView.axaml for improved text display 2025-12-16 10:57:49 +00:00
4329607566 Refactor TextBox styles in DeviceView.axaml for improved UI consistency 2025-12-16 10:55:33 +00:00
9ecc9eb3b8 Enhance layout in DeviceView.axaml by adding margins and spacing to StackPanels for improved visual consistency 2025-12-16 10:54:22 +00:00
f4594ba0c2 Use dark media type icons in device view. 2025-12-16 10:52:28 +00:00
3382369502 Fix translation typo. 2025-12-16 10:52:03 +00:00
4c2098410e Add SVG icons for dump and scan buttons in DeviceView.axaml for improved UI 2025-12-16 10:37:43 +00:00
ba2be66c73 Add icons to TabItem headers in DeviceView.axaml for enhanced visual context 2025-12-16 10:03:03 +00:00
4e4ce8e313 Remove margin from DataGrid in DeviceList.axaml for improved layout 2025-12-16 09:24:39 +00:00
5d98cc118a Add alternating row colors and hover effects to DataGrid in DeviceList.axaml for improved visibility 2025-12-16 09:19:37 +00:00
2517335bf7 Update background color for alternating DataGrid rows in multiple XAML files for improved visibility 2025-12-16 09:19:14 +00:00
afcc6206d0 Add text wrapping to SpectreTextBlock elements in FileSystem.xaml for improved readability 2025-12-15 17:14:12 +00:00
8d17f4fa08 Fix visibility bindings for SpectreTextBlock elements in FileSystem.xaml 2025-12-15 17:11:03 +00:00
6e4befa98b Change colors in FileSystem panel. 2025-12-15 17:08:37 +00:00
507b1717ee Refactor FileSystem.xaml layout for improved readability and organization 2025-12-15 17:04:37 +00:00
60397af992 Update BorderBrush in Partition.xaml for improved theme consistency 2025-12-15 16:46:14 +00:00
6bf0b5e780 Add text wrapping to SpectreTextBlock bindings in Partition.xaml for improved readability 2025-12-15 16:45:47 +00:00
9bd6357e1a Complete restructure XboxInfo tab. 2025-12-15 16:37:18 +00:00
3efbd151d5 Add localization support for Physical Format Information and Copyright Management Information in DvdInfo 2025-12-15 16:35:22 +00:00
5fd0a344b3 Enhance layout consistency in CompactDiscInfo and XboxInfo by updating TextBox properties for improved appearance 2025-12-15 16:30:17 +00:00
fe508801e8 Update column definitions and alignment in ScsiInfo for improved layout responsiveness 2025-12-15 16:28:23 +00:00
55addee5ad Replace StackPanel with WrapPanel for button layout in BlurayInfo for improved responsiveness 2025-12-15 16:25:47 +00:00
80f8931a6f Add width specifications to DataGrid columns in CompactDiscInfo, PcmciaInfo, and ScsiInfo for improved layout consistency 2025-12-15 16:24:11 +00:00
f3470b2b17 Replace StackPanel with WrapPanel for button layout in DvdInfo and DvdWritableInfo 2025-12-15 16:22:21 +00:00
83b0c455d7 Fix grid row assignment in PcmciaInfo.xaml for correct layout rendering 2025-12-15 16:20:33 +00:00
0d3078b4aa Update border brush color to dynamic resource for improved theming in multiple info views 2025-12-15 16:19:19 +00:00
9509cb9054 Add alternating row colors and hover effects to DataGrid in CompactDiscInfo, PcmciaInfo, and ScsiInfo 2025-12-15 16:15:22 +00:00
4a0bd8b856 Use directory icon for subdirectories. 2025-12-15 16:01:24 +00:00
5bc1a8b445 Use SVG versions of Oxygen icons. 2025-12-15 15:09:02 +00:00
42e47fc7a0 Use dark media type logos 2025-12-15 14:49:30 +00:00
65104ba678 Update ListBox item styles for improved color contrast 2025-12-15 14:31:56 +00:00
a8b1f21dc0 Add alternating colors to datagrid rows in ImageInfo panel. 2025-12-15 14:25:09 +00:00
cb9f6a1365 Add text wrapping to ImageInfo labels. Fixes #877 2025-12-15 14:06:59 +00:00
92a144acf3 Converted ImageInfo panel information to a two column layout. 2025-12-15 13:58:36 +00:00
8463ec7c27 Add icons to ImageInfo panel tab control. 2025-12-15 13:53:06 +00:00
61a3ce4fb0 Add converter for dark theme SVG usage. 2025-12-15 13:51:32 +00:00
ededbc82cd Add dark version of media logos. 2025-12-15 13:50:45 +00:00
fde394008a Optimize media logo PNGs. 2025-12-15 13:50:04 +00:00
ef3044012d Remove unnecessary margin from TabItem in ImageInfo.xaml for improved layout consistency 2025-12-15 09:58:26 +00:00
cfab34cd4d Enhance TextBox and ListBox styles in ImageInfo.xaml for improved visual consistency and user experience 2025-12-15 09:51:45 +00:00
257abc34c3 Enhance ListBox styling in ImageInfo.xaml for improved visual consistency and user experience 2025-12-15 09:49:10 +00:00
590fa4e542 Change DataGridTemplateColumn widths to Auto for improved layout responsiveness in ImageInfo.xaml 2025-12-15 09:42:37 +00:00
7bd5f106f0 Wrap StackPanel in ScrollViewer in ImageInfo.xaml for improved scrolling behavior 2025-12-15 09:38:49 +00:00
6f00e7739c Align WrapPanel to the left in ImageInfo.xaml for improved layout consistency 2025-12-15 09:38:36 +00:00
306f6e3168 Replace StackPanel with WrapPanel in ImageInfo.xaml for improved button layout 2025-12-15 09:33:00 +00:00
72b20f9938 Add FluentIcons to buttons in ImageInfo.xaml for enhanced UI clarity 2025-12-15 09:26:26 +00:00
4ef63ae64b Update input gestures and hotkeys for menu items in MainWindow.axaml 2025-12-15 01:06:39 +00:00
326f306c12 Add FluentIcons to menu items in MainWindow.axaml for improved visual clarity 2025-12-15 01:05:13 +00:00
efed1615cb Update MainWindow dimensions to 1280x720 for improved layout 2025-12-15 00:58:03 +00:00
7fee6c9a1c Enhance TreeView item layout in MainWindow.axaml with improved spacing and icon presentation 2025-12-15 00:57:17 +00:00
d4b88664fa Remove background color from TreeView in MainWindow.axaml 2025-12-15 00:45:17 +00:00
d51f55a732 Add FluentIcons to MainWindow and update menu item icons 2025-12-15 00:36:43 +00:00
df6e16a891 Add input gestures and hotkeys for menu items in MainWindow 2025-12-14 23:41:17 +00:00
49ffa4f921 Add localized strings for metadata sidecar menu actions 2025-12-14 23:40:56 +00:00
bc23c8f951 Update bindings in MetadataEditor.axaml to use OneWay mode for commands and collections 2025-12-14 21:15:44 +00:00
b70751991d Refactor MetadataEditorViewModel to use StringWrapper for string collections and update bindings in XAML 2025-12-14 21:00:45 +00:00
7599d57f21 Refactor ViewModel constructors and ToModel methods to preserve original model state 2025-12-14 18:54:07 +00:00
7f49998683 Added a localized description for barcode types. 2025-12-14 18:39:19 +00:00
2ae1a36c56 Sort localized descriptions for release types, languages, and architectures 2025-12-14 17:40:56 +00:00
d8a9ec25af Added a localized description for architectures. 2025-12-14 17:27:09 +00:00
523ce89c7c Added a localized description for languages. 2025-12-14 17:11:27 +00:00
a3ec57902f Added a localized description for release types. 2025-12-14 16:40:09 +00:00
98a0caa737 Added an Aaru metadata editor. 2025-12-14 16:23:33 +00:00
1aa8271d62 Add support for dumping the 2nd layer PFI of DVDs. 2025-12-14 11:23:54 +00:00
c92b3f636a Reorder AaruFormat file extensions. 2025-12-14 11:10:40 +00:00
bddd3121d6 Update libaaruformat package version to 1.0.0-alpha.19 2025-12-14 11:10:16 +00:00
0b373c33e1 [GUI] Added a window to edit AaruFormat files basic metadata. 2025-12-14 11:09:43 +00:00
61eb194fa1 Update libaaruformat package version to 1.0.0-alpha.18 2025-12-13 16:43:43 +00:00
e20df59b28 Update libaaruformat package version to 1.0.0-alpha.17 2025-12-12 19:31:54 +00:00
ab6451a73f Fix error by one in overflow sectors conversion. 2025-12-12 19:31:18 +00:00
4334dfe706 Do not convert undumped overflow and negative sectors. 2025-12-09 21:07:16 +00:00
f1abe1af0a When comparing two images be specific about their contents. 2025-12-09 21:06:35 +00:00
1a27321f16 Add more color 2025-12-09 14:57:47 +00:00
dd7d2f53ad Added Sony HyperStorage media type. 2025-12-01 12:55:34 +00:00
1689c6dd80 Show absolute LBA in verify image with tracks. 2025-12-01 12:55:12 +00:00
Rebecca Wallander
f1121d6ecc generate UI.Designer.cs 2025-11-30 11:38:40 +00:00
Rebecca Wallander
d671dab788 Fix typo 2025-11-30 11:38:40 +00:00
Rebecca Wallander
96416b0107 Add Spanish translation of Lite-On string 2025-11-30 11:38:40 +00:00
Rebecca Wallander
e39fc57a0d Actually ask if you want to test Lite-On command 2025-11-30 11:38:40 +00:00
c0f81cbfc1 Added some missing colorizations 2025-11-29 03:46:58 +00:00
bc7d192b10 [AaruFormat] Fix sector status not propagating properly in ReadSectors[Long]. 2025-11-26 11:45:10 +00:00
26781eda6d Update libaaruformat package version to 1.0.0-alpha.13 2025-11-26 04:29:59 +00:00
5febb2012d Implement abortion in image convertion process. 2025-11-25 19:47:40 +00:00
37b8eeaf4f [GUI] Use new image conversion algorithms. 2025-11-25 19:33:05 +00:00
63ff190275 Rework image conversion command to separate into parts and move to Aaru.Core. 2025-11-25 16:15:02 +00:00
8efd9896c1 [Refactor] Use string comparison to compare strings. 2025-11-24 20:29:26 +00:00
599454377e [Refactor] Call string.Equals instead of string.Compare. 2025-11-24 20:27:29 +00:00
13a200d10b [Refactor] Use null propagation. 2025-11-24 20:24:58 +00:00
a58f2e60e5 [Refactor] General reformat and clean-up. 2025-11-24 20:12:10 +00:00
8331fba1e4 [Refactor] Fix indentation issues. 2025-11-24 19:38:40 +00:00
5774885431 [Refactor] Simplify boolean comparison. 2025-11-24 19:28:24 +00:00
7b487033b5 [Refactor] Invert if to reduce nesting. 2025-11-24 19:21:26 +00:00
dea49e235d [Refactor] Inline out variable declaration. 2025-11-24 19:09:00 +00:00
64db005bdc [Refactor] Convert into ?: operator. 2025-11-24 19:06:52 +00:00
c4af5bf241 [Refactor] Call AddRange instead of Add. 2025-11-24 19:00:58 +00:00
ebce649b61 Fixed spurious localization string. 2025-11-24 18:59:19 +00:00
7af8b40f80 [Refactor] Optimize LINQ queries. 2025-11-24 11:45:16 +00:00
46066fb9a7 [Refactor] Do not call string.Format unnecessarily. 2025-11-24 11:40:51 +00:00
0fa91c34e1 [Refactor] Replace regex with source generation. 2025-11-24 11:27:56 +00:00
98f52803c9 [Refactor] Replace byte array initializations with string literals for improved readability 2025-11-24 03:23:37 +00:00
0ddd930ee1 [Refactor] Replace array initializations with new byte[] for consistency 2025-11-24 03:22:07 +00:00
d29afd403a [Refactor] Use collection expression. 2025-11-24 03:08:01 +00:00
22aa9b3538 [Refactor] Update bindings to use OneWay mode for improved data flow 2025-11-24 03:03:47 +00:00
04c45e69fa [Refactor] Use static lambdas in LINQ queries for improved performance 2025-11-24 03:00:06 +00:00
5fe7f574d6 [Refactor] Replace backing fields with auto-properties in view models 2025-11-24 01:40:50 +00:00
e9842195e1 [Refactor] Move properties to observable objects. 2025-11-24 01:40:10 +00:00
389ae5d5d5 [Image verification] Allow to verify only data (non-audio) tracks. 2025-11-24 01:23:30 +00:00
bfe36a62e1 [Image convert] Do not try to convert flags, ISRC or CD-TEXT in negative or overflow sectors, as they are track tags not sector tags. 2025-11-24 01:13:00 +00:00
ea8633f4c5 [Dependencies] Update libaaruformat to version 1.0.0-alpha.12 2025-11-24 00:56:58 +00:00
97283b4450 [Dependencies] Update libaaruformat to version 1.0.0-alpha.11 2025-11-23 21:37:04 +00:00
3628fcf9c2 [GUI] Add encryption options to media dump window. 2025-11-23 15:55:54 +00:00
4ee2034475 [GUI] Add paranoia options to media dump window. 2025-11-23 15:49:58 +00:00
ff9b2d64f4 [GUI] Move media dump options into tabs. 2025-11-23 15:44:41 +00:00
b8d55ff741 [Dumping] Add option to fix sectors that didn't pass integrity checks. 2025-11-23 13:44:59 +00:00
70f005f61f [Dumping] Add paranoia mode to check integrity of sectors before writing them to the image. 2025-11-23 13:05:43 +00:00
0f78b128ac [AaruFormat] Enable negative and overflow sectors. 2025-11-22 19:34:16 +00:00
caae4311b9 Update libaaruformat package version to 1.0.0-alpha.10 2025-11-22 19:33:21 +00:00
2c0c4ad891 Update libaaruformat package version to 1.0.0-alpha.9 2025-11-22 14:18:17 +00:00
fa7b047eae [GUI] Add options to fix/generate subchannels on media dumping. 2025-11-21 19:30:00 +00:00
19e03d3614 Upgrade dependency to shut up complain about security. 2025-11-21 19:10:31 +00:00
98925c4611 Update to new Spectre.Console.Cli API surface. 2025-11-21 15:59:05 +00:00
b34e549edd Localize all help. 2025-11-21 15:39:54 +00:00
824b6b2032 Adjust to new Humanizer API surface. 2025-11-21 12:07:37 +00:00
aec8263541 [GUI] On media dump ensure metadata creation option is respected. 2025-11-21 03:34:41 +00:00
afedc37ca9 Update Spectre.Console packages to versions 0.54.0 and 0.53.0 2025-11-21 02:28:26 +00:00
e11b4e9244 Update SharpCompress package to version 0.41.0 2025-11-21 02:28:01 +00:00
2319ae2361 Update Sentry and Sentry.Serilog packages to version 5.16.2 2025-11-21 02:27:25 +00:00
b4c36a5940 Update NUnit.Analyzers package to version 4.11.2 2025-11-21 02:26:42 +00:00
cc04c9a03c Update Microsoft.NET.Test.Sdk package to version 18.0.1 2025-11-21 02:25:22 +00:00
062e202dbf Update Microsoft.CodeAnalysis.CSharp package to version 5.0.0 2025-11-21 02:24:16 +00:00
93a0670e8d Update MessageBox.Avalonia package to version 3.3.0 2025-11-21 02:22:59 +00:00
89b42121e1 Update FluentAssertions package to version 8.8.0 2025-11-21 02:22:12 +00:00
1ee2d37a0f Update Humanizer packages to version 3.0.1 2025-11-21 02:21:12 +00:00
842376dd2d Update Avalonia packages to version 11.3.9 2025-11-21 02:19:38 +00:00
5f94bbf4ae Update packages to .NET 10 release. 2025-11-21 02:18:51 +00:00
7b6f05417c Bump version to split release from development 2025-11-21 02:14:30 +00:00
72163a870c Bumped version to v6.0.0-alpha15.1 2025-11-21 01:16:38 +00:00
81c0914f44 Updated changelog. 2025-11-21 01:15:37 +00:00
a67a289351 [GUI] Fixed binding of color property. 2025-11-21 01:13:28 +00:00
6cf642162b Bump version to v6.0.0-alpha.15 2025-11-21 00:29:37 +00:00
f82f62be8d Update changelog. 2025-11-21 00:29:08 +00:00
468c5b8e0f [GUI] Do not allow buttons in device view to be clicked before media is inserted. 2025-11-20 21:09:13 +00:00
0a37bbc4fc [GUI] Add missing translation for button in device list view. 2025-11-20 21:08:56 +00:00
58ef5febeb [GUI] Do not consider media inserted in device view ATAPI devices. 2025-11-20 21:08:29 +00:00
b6b3e9d1d1 [GUI] Reorganize media dump window. 2025-11-20 20:16:10 +00:00
8aadc3baca [GUI] Add zoom capabilities to disc speed graph. 2025-11-20 19:42:50 +00:00
8b83f9cbbb [Dump] Use new speed calculation algorithm. 2025-11-20 18:57:39 +00:00
c1af9a1f96 [Block map] Add more color gradients. 2025-11-20 15:53:27 +00:00
5531414e76 [Media scan] Use new speed calculation algorithm. 2025-11-20 15:53:06 +00:00
6bcc608668 Fix IBG log not using the proper culture. 2025-11-20 14:46:50 +00:00
fe2e7455d3 [GUI] Simplify async method implementations in MediaDumpViewModel by removing unnecessary braces 2025-11-20 14:24:20 +00:00
c66612737b [GUI] Update MediaDumpViewModel to use property accessors for sidecar metadata 2025-11-20 14:24:00 +00:00
02b0552544 [GUI] Refactor file picker options to use collection initializers for improved readability 2025-11-20 14:22:14 +00:00
7dbe9289dd [GUI] Add additional SuppressMessage attributes for async void methods in MediaDumpViewModel 2025-11-20 14:21:19 +00:00
5a9b25986a [GUI] Update MediaDumpViewModel to use fire-and-forget pattern for async methods 2025-11-20 14:20:29 +00:00
f86a354aa0 [GUI] Use static lambdas in encoding model selection for improved performance 2025-11-20 14:19:12 +00:00
5bcfa20b32 [GUI] Simplify property accessors in MediaDumpViewModel 2025-11-20 14:17:44 +00:00
a3c17573a2 [GUI] Remove redundant SuppressMessage attributes for async void methods 2025-11-20 14:17:11 +00:00
c033ac108d [GUI] Enable opening media dump window from device view. 2025-11-20 14:15:46 +00:00
6bee3261d0 [GUI] Fix listing of plugins in media dump view model. 2025-11-20 14:15:22 +00:00
64e1e3f3bc [GUI] Send device to media dump view model instead of device path. 2025-11-20 14:15:02 +00:00
63ecc65ad2 [GUI] Reorganize media dump window. 2025-11-20 14:14:25 +00:00
f6477270c5 Invert huge if block in ATA scanning. 2025-11-20 04:06:07 +00:00
e201ebcf9d [Media scan] Change speed calculation algorithm for one more stable and with less spikes. 2025-11-20 03:45:32 +00:00
c540bd794d [GUI] Suppress warnings for async void methods in MediaScanViewModel 2025-11-20 02:34:56 +00:00
c1ddebe52c [GUI] Handle potential null reference for media type in scan method 2025-11-20 02:28:07 +00:00
227adeb092 [GUI] Add speed graph to media scan. 2025-11-20 02:27:43 +00:00
92bbdaaab6 [GUI] Add block map to media scan. 2025-11-20 01:27:38 +00:00
17dc7423c2 [GUI] Complete rework of block map. 2025-11-20 01:27:04 +00:00
daec2d8aa3 [GUI] Enable launching media scan from device view. 2025-11-19 23:10:35 +00:00
79bbef052f [GUI] Fix media scan speed calculations. 2025-11-19 23:10:17 +00:00
0ef27976db [GUI] Set up media scan view model to receive device instead of device path. 2025-11-19 23:09:43 +00:00
185f8fb7ab [GUI] Reorganize media scan window. 2025-11-19 23:08:26 +00:00
06dc04c18a [GUI] Add commands statistics. 2025-11-19 21:23:43 +00:00
3482375ec7 [GUI] Add remote statistics. 2025-11-19 21:22:13 +00:00
6474b83b51 [GUI] Do not show windows as topmost. 2025-11-19 21:21:21 +00:00
7791f9f740 [GUI] Localize strings 2025-11-19 20:35:20 +00:00
7aaf48567b [GUI] Humanize media type in device view. 2025-11-19 20:25:09 +00:00
70026ba4be [GUI] Do not show Xbox information in device view just because there's a DMI or it will appear on all DVD media. 2025-11-19 20:24:43 +00:00
bde0c7b5e3 [GUI] Add media information to device view. 2025-11-19 19:56:01 +00:00
9ac4762f23 [GUI] Add Save USB Descriptors functionality to DeviceViewModel 2025-11-19 18:40:00 +00:00
36e80ed792 [GUI] Add device information to device view. 2025-11-19 18:07:32 +00:00
0577767843 [Remote] Remove unnecessary initialization of senseBuffer in SendScsiCommand 2025-11-19 18:06:46 +00:00
190e22f610 [GUI] Add missing partial modifier. 2025-11-19 16:13:38 +00:00
c67197f977 [GUI] Add device view. 2025-11-19 15:15:58 +00:00
7bee2d7473 [GUI] Ensure devices list is filled in UI thread. 2025-11-19 13:10:13 +00:00
cd699f46de [GUI] Change how errors are shown in device list window. 2025-11-19 13:08:51 +00:00
8c97cb5ccb [GUI] Change size of device list window. 2025-11-19 13:08:28 +00:00
7a4520d277 [GUI] Open device list topmost. 2025-11-19 13:07:56 +00:00
b5ae3f08ef [TUI] Use compiled bindings. 2025-11-19 05:31:17 +00:00
363cdbdd37 [GUI] Use compiled bindings. 2025-11-19 05:26:14 +00:00
98345425f8 [GUI] Add Device List functionality and remote connection support 2025-11-19 05:05:56 +00:00
b748f54dca [GUI] Remove old unused code. 2025-11-19 04:22:11 +00:00
239af54b75 [GUI] Add IMGBurn log viewer functionality 2025-11-19 02:02:14 +00:00
8186aa3181 [GUI] Add DiscSpeedGraph control to visualize read/write speeds 2025-11-19 02:01:41 +00:00
4e06c565d8 [GUI] Implement MHDD log viewer functionality 2025-11-18 17:14:48 +00:00
9f0109af43 [GUI] Add BlockMap control for visualizing sector access times 2025-11-18 17:14:22 +00:00
b37007321e [TUI] Theme to a cyberpunk neon style. 2025-11-18 05:57:57 +00:00
6f0ec4546f [TUI] Re-enable all dialogs. 2025-11-18 04:47:22 +00:00
b580bf0555 [TUI] Migrate to Prism.Avalonia. 2025-11-18 04:38:06 +00:00
HeroponRikiBestest
31dfcadab8 Fixes ReadMediaTag reading from mds (#885) 2025-11-12 00:55:24 +00:00
54a640c3ed Humanize list of tags in image info. 2025-11-08 14:05:30 +00:00
d362591dac Colorize output of decoded PMA. 2025-11-08 13:51:29 +00:00
62dc4b6704 Fix correct name of PMA. 2025-11-08 13:50:59 +00:00
a55677ac18 Add missing vendor names for MMC card manufacturers 2025-11-03 16:10:23 +00:00
9c66f259ef Add additional vendor names for SD card manufacturers 2025-11-03 16:02:23 +00:00
ac5b01a95c Add vendor names for additional MMC vendor IDs 2025-11-03 15:59:57 +00:00
Whovian9369
827dcfee94 Add formatting to "System identifier" output line. 2025-10-28 10:15:12 +00:00
Whovian9369
85d8c5e937 Add missing closing bracket that broke formatting on this line. 2025-10-28 10:15:12 +00:00
fd04d4fe2a Colorize ISO9660 information. 2025-10-28 03:33:53 +00:00
af5fa8b34a Colorize UDF information. 2025-10-28 02:50:23 +00:00
efd9725d58 Typo fixes. 2025-10-28 02:24:23 +00:00
2ea83e9f72 Missed alpha.9 2025-10-28 01:16:01 +00:00
a25e649fe2 Update issue templates. 2025-10-28 01:14:31 +00:00
2574 changed files with 115419 additions and 23164 deletions

View File

@@ -261,10 +261,6 @@ resharper_xml_keep_user_linebreaks
resharper_xml_pi_attribute_style = first_attribute_on_single_line
# ReSharper inspection severities
resharper_annotate_can_be_null_parameter_highlighting = warning
resharper_annotate_can_be_null_type_member_highlighting = warning
resharper_annotate_not_null_parameter_highlighting = warning
resharper_annotate_not_null_type_member_highlighting = warning
resharper_arguments_style_anonymous_function_highlighting = warning
resharper_arguments_style_literal_highlighting = warning
resharper_arguments_style_named_expression_highlighting = warning
@@ -1472,6 +1468,7 @@ dotnet_diagnostic.ph2081.severity = none
dotnet_diagnostic.ph2082.severity = suggestion
dotnet_diagnostic.ph2083.severity = warning
dotnet_diagnostic.ph2086.severity = warning
dotnet_diagnostic.ph2088.severity = none
dotnet_diagnostic.ph2089.severity = warning
dotnet_diagnostic.ph2096.severity = warning
dotnet_diagnostic.ph2097.severity = warning

5
.github/FUNDING.yml vendored
View File

@@ -1,6 +1,5 @@
# These are supported funding model platforms
# github: claunia
github: claunia
patreon: claunia
ko_fi: claunia
open_collective: aaru
ko_fi: tinkeringdaemon

View File

@@ -10,10 +10,24 @@ body:
label: Version
description: What version of Aaru are you running?
options:
- 5.3.0
- 5.4.x
- 5.3.x
- 5.2.0
- Older
- 6.0.0-alpha6
- 6.0.0-alpha.6
- 6.0.0-alpha.7
- 6.0.0-alpha.8
- 6.0.0-alpha.9
- 6.0.0-alpha.10
- 6.0.0-alpha.11
- 6.0.0-alpha.12
- 6.0.0-alpha.13
- 6.0.0-alpha.14
- 6.0.0-alpha.15
- 6.0.0-alpha.15.1
- 6.0.0-alpha.16
- 6.0.0-alpha.17
- 6.0.0-alpha.18
- Development commit
validations:
required: true
@@ -21,7 +35,7 @@ body:
id: commit
attributes:
label: Commit hash
description: If using a developmen commit, which one
description: If using a development commit, which one
- type: checkboxes
id: debug
attributes:

View File

@@ -10,10 +10,24 @@ body:
label: Version
description: What version of Aaru are you running?
options:
- 5.3.0
- 5.4.x
- 5.3.x
- 5.2.0
- Older
- 6.0.0-alpha6
- 6.0.0-alpha.6
- 6.0.0-alpha.7
- 6.0.0-alpha.8
- 6.0.0-alpha.9
- 6.0.0-alpha.10
- 6.0.0-alpha.11
- 6.0.0-alpha.12
- 6.0.0-alpha.13
- 6.0.0-alpha.14
- 6.0.0-alpha.15
- 6.0.0-alpha.15.1
- 6.0.0-alpha.16
- 6.0.0-alpha.17
- 6.0.0-alpha.18
- Development commit
validations:
required: true
@@ -21,7 +35,7 @@ body:
id: commit
attributes:
label: Commit hash
description: If using a developmen commit, which one
description: If using a development commit, which one
- type: checkboxes
id: debug
attributes:

View File

@@ -10,10 +10,24 @@ body:
label: Version
description: What version of Aaru are you running?
options:
- 5.3.0
- 5.4.x
- 5.3.x
- 5.2.0
- Older
- 6.0.0-alpha6
- 6.0.0-alpha.6
- 6.0.0-alpha.7
- 6.0.0-alpha.8
- 6.0.0-alpha.9
- 6.0.0-alpha.10
- 6.0.0-alpha.11
- 6.0.0-alpha.12
- 6.0.0-alpha.13
- 6.0.0-alpha.14
- 6.0.0-alpha.15
- 6.0.0-alpha.15.1
- 6.0.0-alpha.16
- 6.0.0-alpha.17
- 6.0.0-alpha.18
- Development commit
validations:
required: true
@@ -21,7 +35,7 @@ body:
id: commit
attributes:
label: Commit hash
description: If using a developmen commit, which one
description: If using a development commit, which one
- type: checkboxes
id: debug
attributes:

View File

@@ -7,7 +7,7 @@ assignees:
body:
- type: dropdown
attributes:
description: Type of feture you're requesting
description: Type of feature you're requesting
label: Type
options:
- Support for a new media image format...

View File

@@ -1,2 +1,3 @@
is_global = true
dotnet_diagnostic.PH2075.severity = none
dotnet_diagnostic.PH2088.severity = none

View File

@@ -1,8 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Aaru" type="DotNetProject" factoryName=".NET Project">
<option name="EXE_PATH" value="$PROJECT_DIR$/Aaru/bin/Debug/net10.0/win-x64/aaru.exe" />
<option name="PROGRAM_PARAMETERS" value="m dump /dev/sdb testlib.aif" />
<option name="WORKING_DIRECTORY" value="/mnt/datos/" />
<option name="EXE_PATH" value="$PROJECT_DIR$/Aaru/bin/Debug/net10.0/osx-arm64/aaru" />
<option name="PROGRAM_PARAMETERS" value="i info &quot;Tanxugueiras - Contra (CLVR012).aif&quot;" />
<option name="WORKING_DIRECTORY" value="/Volumes/iPhone/issue662/" />
<option name="PASS_PARENT_ENVS" value="1" />
<option name="ENV_FILE_PATHS" value="" />
<option name="REDIRECT_INPUT_PATH" value="" />

View File

@@ -6,6 +6,6 @@
</profile>
</component>
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="" vcs="Git" />
</component>
</project>

206
AGENTS.md Normal file
View File

@@ -0,0 +1,206 @@
# AGENTS.md - AI Coding Agent Guidelines for Aaru
This document provides guidelines for AI coding assistants working with the Aaru Data Preservation Suite codebase.
## Project Overview
**Aaru** is an open-source Data Preservation Suite for creating, managing, and preserving digital media images. It supports dumping media from various drives (magnetic disks, optical discs, tapes, flash devices), converting between image formats, and analyzing filesystems.
- **Language:** C# 8+ (latest features enabled)
- **Framework:** .NET 10
- **Solution File:** `Aaru.slnx`
- **Build System:** MSBuild with `dotnet` CLI
## Repository Structure
The repository is organized into multiple modules:
| Module | Purpose |
|--------|---------|
| `Aaru/` | Main CLI application and entry point |
| `Aaru.Archives/` | Archive format support (AMG, Arc, Ha, Stfs, Symbian, Zoo) |
| `Aaru.Checksums/` | Checksum, hashing, and error correction algorithms |
| `Aaru.CommonTypes/` | Shared interfaces, structures, and enumerations |
| `Aaru.Compression/` | Compression algorithm implementations |
| `Aaru.Console/` | Console abstraction for CLI/GUI output |
| `Aaru.Core/` | Core functionality: dumping, conversion, filesystem operations |
| `Aaru.Database/` | Database models and access |
| `Aaru.Decoders/` | Protocol structures and decoder implementations |
| `Aaru.Decryption/` | Media decryption (CSS, CPRM, etc.) |
| `Aaru.Devices/` | Hardware device communication across platforms |
| `Aaru.Dto/` | Data Transfer Objects for client-server communication |
| `Aaru.EntityFramework/` | Entity Framework integration |
| `Aaru.Filesystems/` | Filesystem identification and extraction |
| `Aaru.Filters/` | Data filters (compression, encoding transformations) |
| `Aaru.Generators/` | Source generators |
| `Aaru.Gui/` | Avalonia-based graphical user interface |
| `Aaru.Helpers/` | Utility functions (marshalling, byte manipulation, etc.) |
| `Aaru.Images/` | Disk/disc image format readers and writers |
| `Aaru.Localization/` | Localized strings (shared resources) |
| `Aaru.Logging/` | Logging infrastructure |
| `Aaru.Partitions/` | Partition scheme readers |
| `Aaru.Settings/` | Application settings management |
| `Aaru.Tests/` | Unit tests (xUnit) |
| `Aaru.Tests.Devices/` | Device command testing (menu-driven) |
| `Aaru.Tui/` | Terminal UI implementation |
## Coding Style Guidelines
The project follows strict coding conventions. An `.editorconfig` file is included to enforce these.
### General Rules
- **Braces:** BSD style (braces on new line, unindented)
- **Empty braces:** Open and close on same line: `{ }`
- **Single-statement blocks:** No braces required
- **Indentation:** 4 spaces (soft tabs)
- **Line length:** 120 characters maximum
- **Line endings:** UNIX (`\n`)
- **Final newline:** Do NOT end files with a newline
- **Blank lines:** Do not use more than one consecutive blank line
### Naming Conventions
- **Constants:** `ALL_UPPER_CASE`
- **Instance/static fields (private):** `lowerCamelCase` (often prefixed with `_`)
- **Public fields:** `UpperCamelCase`
- **Properties/Methods:** `UpperCamelCase`
### C# Specific
- **Do NOT use `var`** - always use explicit types
- **Use built-in type keywords:** `uint` instead of `UInt32`, `string` instead of `String`
- **Expression bodies:** Only for properties, indexers, and events; use block bodies for methods
- **Use inline variable declaration:** `if(Foo(out var result))`
- **Keywords order:** `public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required`
- **`else`, `while`, `catch`, `finally`:** Always on new lines
- **No spaces around parentheses:** `if(condition)` not `if (condition)`
- **Prefer structs over classes** when only storing data; use nullable structs when needed
- **Avoid unnecessary OOP abstractions** - this is low-level code
### LINQ
LINQ is acceptable and commonly used throughout the codebase.
## Localization
All user-facing strings must be localized:
- **Shared strings:** `Aaru.Localization/UI.resx` and `Aaru.Localization/Core.resx`
- **Project-specific strings:** In each project's `Localization/` folder
- **Translations:** Currently English (`*.resx`) and Spanish (`*.es.resx`)
- **Resource ID conventions:**
- `Title_*` - Table/section headers
- `ButtonLabel_*` - Action buttons (use appropriate verb tense)
- `*_Q` - Questions
- `*_WithMarkup` - Contains Spectre.Console markup
- Numbers in IDs (e.g., `_0`, `_1`) indicate string format arguments `{0}`, `{1}`
For enum values, use `[LocalizedDescription(nameof(UI.EnumName_Value))]` attribute.
## Testing
- **Framework:** xUnit
- **Location:** `Aaru.Tests/` project
- **Note:** Full test suite requires ~900+ GiB of test images; not all tests can be run locally
- **Device tests:** `Aaru.Tests.Devices/` provides interactive device command testing
## Building
```bash
# Build all configurations
dotnet build
# Build specific configuration
dotnet build -c Release
# Publish for specific platform
dotnet publish -f net10.0 -r osx-arm64 -c Release
# Run tests
dotnet test
```
Supported runtime identifiers: `linux-arm64`, `linux-arm`, `linux-x64`, `osx-x64`, `osx-arm64`, `win-arm64`, `win-x64`, `win-x86`
## Key Interfaces
When working with the codebase, be aware of these core interfaces in `Aaru.CommonTypes`:
- `IMediaImage` / `IWritableImage` - Disk/disc image reading/writing
- `IOpticalMediaImage` / `IWritableOpticalImage` - Optical media specific
- `ITapeImage` / `IWritableTapeImage` - Tape media specific
- `IFluxImage` / `IWritableFluxImage` - Flux-level data
- `IFilesystem` / `IReadOnlyFilesystem` - Filesystem operations
- `IPartition` - Partition scheme reading
- `IFilter` - Data transformation filters
- `IArchive` - Archive format support
## Error Handling
- Use `ErrorNumber` enum for return values indicating success/failure
- Check for `ErrorNumber.NoError` for success
- Propagate errors up the call stack with appropriate context
## Events and Progress Reporting
Many operations use event-based progress reporting:
```csharp
public event InitProgressHandler InitProgress;
public event UpdateProgressHandler UpdateProgress;
public event EndProgressHandler EndProgress;
public event UpdateStatusHandler UpdateStatus;
public event ErrorMessageHandler ErrorMessage;
public event ErrorMessageHandler StoppingErrorMessage;
```
## Platform Considerations
- Avoid platform-dependent code unless absolutely necessary
- For system calls, only use `System.*` namespaces when possible
- Device communication uses OS-specific interop in `Aaru.Devices/`:
- Windows: `KERNEL32.DLL`, `WinUsb`
- Unix/Linux/macOS: `libc`, `libusb`
## Pull Request Guidelines
1. Do not modify interfaces without discussion
2. Follow the code style guide strictly
3. Include XML documentation for new public APIs
4. Add tests for new functionality when possible
5. Do not include copyrighted content in test files
6. Keep commits focused and well-described
## External Dependencies
- Dependencies are managed via central package management (`Directory.Packages.props`)
- Minimize external library usage - prefer .NET built-in functionality
- Compression: Use `SharpCompress` library
- Mac Resource Forks: Use `Claunia.RsrcFork`
- Encodings: Use `Claunia.Encoding` for legacy codepages
- Property Lists: Use `plist-cil`
## Common Patterns
### Plugin Registration
Plugins (images, filesystems, partitions, etc.) register through `PluginRegister.Singleton`.
### Reading/Writing Images
```csharp
// Reading
(ErrorNumber errno, IMediaImage image) = GetInputImage(imagePath);
if(image is null) return errno;
// Writing
IWritableImage outputFormat = FindOutputFormat(PluginRegister.Singleton, format, outputPath);
```
### Metadata and Dump Hardware
- Use `Metadata` class for image metadata
- Use `DumpHardware` for recording dump device information
- Use `Resume` for dump session resumption data

View File

@@ -54,7 +54,7 @@
<PackageReference Include="Humanizer"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection"/>
<PackageReference Include="SharpCompress"/>
<PackageReference Include="Spectre.Console" />
<PackageReference Include="Spectre.Console"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Aaru.Generators\Aaru.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>

View File

@@ -11,10 +11,9 @@ public sealed partial class Amg
#region IArchive Members
/// <inheritdoc />
public bool Identify(IFilter filter)
{
return false;
/*
public bool Identify(IFilter filter) => false;
/*
if(filter.DataForkLength < Marshal.SizeOf<ArcHeader>()) return false;
Stream stream = filter.GetDataForkStream();
@@ -29,8 +28,6 @@ public sealed partial class Amg
// Not a valid magic
return header.magic == ARC_MAGIC;
*/
}
/// <inheritdoc />
public void GetInformation(IFilter filter, Encoding encoding, out string information)
{
@@ -42,7 +39,7 @@ public sealed partial class Amg
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<ArcHeader>()];
var hdr = new byte[Marshal.SizeOf<ArcHeader>()];
stream.ReadExactly(hdr, 0, hdr.Length);
@@ -61,7 +58,7 @@ public sealed partial class Amg
if(header.commentLength > 0)
{
byte[] buffer = new byte[header.commentLength];
var buffer = new byte[header.commentLength];
stream.ReadExactly(buffer, 0, buffer.Length);
sb.AppendLine(Localization.Archive_comment);
sb.AppendLine(Markup.Escape(StringHandlers.CToString(buffer, encoding)));

View File

@@ -20,7 +20,7 @@ public sealed partial class Amg
_stream = filter.GetDataForkStream();
_stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<ArcHeader>()];
var hdr = new byte[Marshal.SizeOf<ArcHeader>()];
_stream.ReadExactly(hdr, 0, hdr.Length);
@@ -39,7 +39,7 @@ public sealed partial class Amg
while(_stream.Position + fileHeaderLen < _stream.Length)
{
byte[] fileHdr = new byte[fileHeaderLen];
var fileHdr = new byte[fileHeaderLen];
_stream.ReadExactly(fileHdr, 0, fileHdr.Length);
@@ -65,7 +65,7 @@ public sealed partial class Amg
if(fh.pathLength > 0)
{
byte[] buffer = new byte[fh.pathLength];
var buffer = new byte[fh.pathLength];
_stream.ReadExactly(buffer, 0, buffer.Length);
string path = StringHandlers.CToString(buffer, encoding);
path = path.Replace('\\', Path.DirectorySeparatorChar);
@@ -74,7 +74,7 @@ public sealed partial class Amg
if(fh.commentLength > 0)
{
byte[] buffer = new byte[fh.commentLength];
var buffer = new byte[fh.commentLength];
_stream.ReadExactly(buffer, 0, buffer.Length);
entry.Comment = StringHandlers.CToString(buffer, encoding);
}

View File

@@ -18,7 +18,7 @@ public sealed partial class Arc
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<Header>()];
var hdr = new byte[Marshal.SizeOf<Header>()];
stream.ReadExactly(hdr, 0, hdr.Length);
@@ -53,7 +53,7 @@ public sealed partial class Arc
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<Header>()];
var hdr = new byte[Marshal.SizeOf<Header>()];
stream.ReadExactly(hdr, 0, hdr.Length);

View File

@@ -22,7 +22,7 @@ public sealed partial class Arc
_stream = filter.GetDataForkStream();
_stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<Header>()];
var hdr = new byte[Marshal.SizeOf<Header>()];
_stream.ReadExactly(hdr, 0, hdr.Length);
@@ -55,7 +55,7 @@ public sealed partial class Arc
ArchiveSupportedFeature.SupportsFilenames |
ArchiveSupportedFeature.HasEntryTimestamp;
string path = "";
var path = "";
string longname = null;
string comment = null;
string attributes = null;
@@ -104,7 +104,7 @@ public sealed partial class Arc
if(header.method == Method.FileInformation)
{
int recordsSize = header.compressed;
int recordsRead = 0;
var recordsRead = 0;
while(recordsRead < recordsSize)
{

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Diagnostics.CodeAnalysis;

View File

@@ -17,7 +17,7 @@ public sealed partial class Ha
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<HaHeader>()];
var hdr = new byte[Marshal.SizeOf<HaHeader>()];
stream.ReadExactly(hdr, 0, hdr.Length);
@@ -37,7 +37,7 @@ public sealed partial class Ha
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<HaHeader>()];
var hdr = new byte[Marshal.SizeOf<HaHeader>()];
stream.ReadExactly(hdr, 0, hdr.Length);

View File

@@ -1,4 +1,3 @@
using System.Collections.Generic;
using System.IO;
using System.Text;
using Aaru.CommonTypes.Enums;
@@ -21,7 +20,7 @@ public sealed partial class Ha
_stream = filter.GetDataForkStream();
_stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<HaHeader>()];
var hdr = new byte[Marshal.SizeOf<HaHeader>()];
_stream.ReadExactly(hdr, 0, hdr.Length);
@@ -32,11 +31,11 @@ public sealed partial class Ha
_entries = [];
int fhLen = Marshal.SizeOf<FHeader>();
byte[] fhBuf = new byte[fhLen];
byte[] pathBuf = new byte[16384];
byte[] nameBuf = new byte[256];
int i; // Guard
int fhLen = Marshal.SizeOf<FHeader>();
var fhBuf = new byte[fhLen];
var pathBuf = new byte[16384];
var nameBuf = new byte[256];
int i; // Guard
while(_stream.Position + fhLen < _stream.Length)
{
@@ -88,7 +87,7 @@ public sealed partial class Ha
int mdiLen = _stream.ReadByte();
byte[] mdi = new byte[mdiLen];
var mdi = new byte[mdiLen];
_stream.ReadExactly(mdi, 0, mdiLen);
string path = StringHandlers.CToString(pathBuf, encoding);

View File

@@ -698,11 +698,5 @@ namespace Aaru.Archives {
return ResourceManager.GetString("Archive_contains_0_files", resourceCulture);
}
}
internal static string Converting_negative_sector_0_of_1 {
get {
return ResourceManager.GetString("Converting_negative_sector_0_of_1", resourceCulture);
}
}
}
}

View File

@@ -350,7 +350,4 @@
<data name="Archive_contains_0_files" xml:space="preserve">
<value>[slateblue1]Archive contains [green]{0}[/] files[/]</value>
</data>
<data name="Converting_negative_sector_0_of_1" xml:space="preserve">
<value>[slateblue1]Converting sector -[lime]{0}[/] of -[violet]{1}[/][/]</value>
</data>
</root>

View File

@@ -34,8 +34,8 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2021-2025 Michael Drüing
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2021-2026 Michael Drüing
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using Aaru.CommonTypes.Interfaces;

View File

@@ -12,6 +12,11 @@ namespace Aaru.Archives;
public sealed partial class Stfs
{
static void ReverseShorts(byte[] shorts, int start, int count)
{
for(int i = start; i < start + count; i += 2) (shorts[i], shorts[i + 1]) = (shorts[i + 1], shorts[i]);
}
#region IArchive Members
/// <inheritdoc />
@@ -22,7 +27,7 @@ public sealed partial class Stfs
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<RemotePackage>()];
var hdr = new byte[Marshal.SizeOf<RemotePackage>()];
stream.ReadExactly(hdr, 0, hdr.Length);
@@ -44,7 +49,7 @@ public sealed partial class Stfs
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<RemotePackage>()];
var hdr = new byte[Marshal.SizeOf<RemotePackage>()];
stream.ReadExactly(hdr, 0, hdr.Length);
@@ -133,35 +138,36 @@ public sealed partial class Stfs
sb.AppendFormat(Localization.Descriptor_type_0, header.Metadata.DescriptorType).AppendLine();
foreach(LocalizedString displayName in
header.Metadata.DisplayName.Where(displayName => displayName.Name is not ""))
header.Metadata.DisplayName.Where(static displayName => displayName.Name is not ""))
sb.AppendFormat(Localization.Display_name_0, Markup.Escape(displayName.Name)).AppendLine();
foreach(LocalizedString description in
header.Metadata.DisplayDescription.Where(description => description.Name is not ""))
header.Metadata.DisplayDescription.Where(static description => description.Name is not ""))
sb.AppendFormat(Localization.Display_description_0, Markup.Escape(description.Name)).AppendLine();
if(header.Metadata.DeviceId.Any(c => c != 0x00))
if(header.Metadata.DeviceId.Any(static c => c != 0x00))
{
sb.AppendFormat(Localization.Device_ID_0,
StringHandlers.CToString(header.Metadata.DeviceId, Encoding.ASCII).Trim())
.AppendLine();
}
if(header.Metadata.ConsoleId.Any(c => c != 0x00))
if(header.Metadata.ConsoleId.Any(static c => c != 0x00))
{
sb.AppendFormat(Localization.Console_ID_0,
BitConverter.ToString(header.Metadata.ConsoleId).Replace("-", ""))
.AppendLine();
}
if(header.Metadata.ProfileId.Any(c => c != 0x00))
if(header.Metadata.ProfileId.Any(static c => c != 0x00))
{
sb.AppendFormat(Localization.Profile_ID_0,
BitConverter.ToString(header.Metadata.ProfileId).Replace("-", ""))
.AppendLine();
}
information = sb.ToString();
}
#endregion
static void ReverseShorts(byte[] shorts, int start, int count)
{
for(int i = start; i < start + count; i += 2) (shorts[i], shorts[i + 1]) = (shorts[i + 1], shorts[i]);
}
}

View File

@@ -19,7 +19,7 @@ public sealed partial class Stfs
_stream = filter.GetDataForkStream();
_stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<RemotePackage>()];
var hdr = new byte[Marshal.SizeOf<RemotePackage>()];
_stream.ReadExactly(hdr, 0, hdr.Length);
@@ -46,13 +46,13 @@ public sealed partial class Stfs
int fileTablePosition = BlockToPosition(fileTableBlockNumber, (int)header.Metadata.HeaderSize);
byte[] buffer = new byte[4096 * vd.FileTableBlockCount];
var buffer = new byte[4096 * vd.FileTableBlockCount];
_stream.Position = fileTablePosition;
_stream.ReadExactly(buffer, 0, buffer.Length);
List<FileTableEntry> entries = [];
int entrySize = Marshal.SizeOf<FileTableEntry>();
int in_pos = 0;
var in_pos = 0;
do
{
@@ -67,11 +67,11 @@ public sealed partial class Stfs
_entries = new FileEntry[entries.Count];
for(int i = 0; i < entries.Count; i++)
for(var i = 0; i < entries.Count; i++)
{
// While entries[i].PathIndicator > 0 recursively inversely prepend entries[PathIndicator].Filename to entries[i].Filename
int pathIndicator = entries[i].PathIndicator;
string path = "";
int pathIndicator = entries[i].PathIndicator;
var path = "";
while(pathIndicator > 0)
{

View File

@@ -54,7 +54,7 @@ public sealed partial class Stfs
/// <inheritdoc />
public override int Read(byte[] buffer, int offset, int count)
{
int totalRead = 0;
var totalRead = 0;
// Validate parameters
ArgumentNullException.ThrowIfNull(buffer);
@@ -73,7 +73,7 @@ public sealed partial class Stfs
_isConsole);
// Calculate position within block
int blockOffset = (int)(_position % 0x1000);
var blockOffset = (int)(_position % 0x1000);
// Calculate absolute position in the stream
long absolutePosition = BlockToPosition(currentBlock, _headerSize) + blockOffset;
@@ -138,7 +138,7 @@ public sealed partial class Stfs
_baseStream.Position = absolutePosition + leftInBlock;
// Read remaining bytes
int toRead = (int)Math.Min(count, _length - _position);
var toRead = (int)Math.Min(count, _length - _position);
_baseStream.ReadExactly(buffer, offset, toRead);
_position += toRead;
totalRead += toRead;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Diagnostics.CodeAnalysis;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;
@@ -55,7 +55,7 @@ public sealed partial class Symbian
Stream stream = filter.GetDataForkStream();
byte[] hdr = new byte[Marshal.SizeOf<SymbianHeader>()];
var hdr = new byte[Marshal.SizeOf<SymbianHeader>()];
stream.EnsureRead(hdr, 0, hdr.Length);
@@ -78,7 +78,7 @@ public sealed partial class Symbian
if(stream.Length < Marshal.SizeOf<SymbianHeader>()) return;
byte[] buffer = new byte[Marshal.SizeOf<SymbianHeader>()];
var buffer = new byte[Marshal.SizeOf<SymbianHeader>()];
stream.Seek(0, SeekOrigin.Begin);
stream.EnsureRead(buffer, 0, buffer.Length);
@@ -164,7 +164,7 @@ public sealed partial class Symbian
// Go to enumerate languages
br.BaseStream.Seek(sh.lang_ptr, SeekOrigin.Begin);
for(int i = 0; i < sh.languages; i++) languages.Add(((LanguageCodes)br.ReadUInt16()).ToString("G"));
for(var i = 0; i < sh.languages; i++) languages.Add(((LanguageCodes)br.ReadUInt16()).ToString("G"));
// Go to component record
br.BaseStream.Seek(sh.comp_ptr, SeekOrigin.Begin);
@@ -186,7 +186,7 @@ public sealed partial class Symbian
span = buffer;
componentRecord.namesPointers = MemoryMarshal.Cast<byte, uint>(span)[..languages.Count].ToArray();
for(int i = 0; i < sh.languages; i++)
for(var i = 0; i < sh.languages; i++)
{
AaruLogging.Debug(MODULE_NAME,
Localization.Found_component_name_for_language_0_at_1_with_a_length_of_2_bytes,
@@ -202,7 +202,7 @@ public sealed partial class Symbian
// Go to capabilities (???)
br.BaseStream.Seek(sh.caps_ptr, SeekOrigin.Begin);
for(int i = 0; i < sh.capabilities; i++)
for(var i = 0; i < sh.capabilities; i++)
{
uint cap_Key = br.ReadUInt32();
uint cap_Value = br.ReadUInt32();
@@ -228,7 +228,7 @@ public sealed partial class Symbian
description.AppendFormat(Localization.File_contains_0_languages, sh.languages).AppendLine();
for(int i = 0; i < languages.Count; i++)
for(var i = 0; i < languages.Count; i++)
{
if(i > 0) description.Append(", ");
description.Append($"[italic][rosybrown]{languages[i]}[/][/]");
@@ -237,7 +237,7 @@ public sealed partial class Symbian
description.AppendLine();
description.AppendLine();
for(int i = 0; i < languages.Count; i++)
for(var i = 0; i < languages.Count; i++)
{
description.AppendFormat(Localization.Component_name_for_language_with_code_0_1,
languages[i],
@@ -254,7 +254,7 @@ public sealed partial class Symbian
if(sh.requisites > 0)
{
for(int r = 0; r < sh.requisites; r++)
for(var r = 0; r < sh.requisites; r++)
{
br.BaseStream.Seek(offset, SeekOrigin.Begin);
@@ -286,7 +286,7 @@ public sealed partial class Symbian
offset = (uint)br.BaseStream.Position;
for(int i = 0; i < languages.Count; i++)
for(var i = 0; i < languages.Count; i++)
{
br.BaseStream.Seek(requisiteRecord.namesPointers[i], SeekOrigin.Begin);
buffer = br.ReadBytes((int)requisiteRecord.namesLengths[i]);
@@ -311,7 +311,7 @@ public sealed partial class Symbian
uint currentFile = 0;
offset = sh.files_ptr;
int conditionLevel = 0;
var conditionLevel = 0;
_options = [];
// Get only the options records
@@ -338,11 +338,11 @@ public sealed partial class Symbian
// Conditions do as well
_conditions.Reverse();
if(_files.Any(t => t.language is null))
if(_files.Any(static t => t.language is null))
{
description.AppendLine(Localization.Files_for_all_languages);
foreach(DecodedFileRecord file in _files.Where(t => t.language is null))
foreach(DecodedFileRecord file in _files.Where(static t => t.language is null))
description.AppendLine($"[green]{Markup.Escape(file.destinationName)}[/]");
description.AppendLine();
@@ -362,7 +362,7 @@ public sealed partial class Symbian
if(_options.Count > 0)
{
for(int i = 0; i < _options.Count; i++)
for(var i = 0; i < _options.Count; i++)
{
OptionRecord option = _options[i];

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Collections.Generic;
@@ -56,7 +56,7 @@ public sealed partial class Symbian
if(_stream.Length < Marshal.SizeOf<SymbianHeader>()) return ErrorNumber.InvalidArgument;
byte[] buffer = new byte[Marshal.SizeOf<SymbianHeader>()];
var buffer = new byte[Marshal.SizeOf<SymbianHeader>()];
_stream.Seek(0, SeekOrigin.Begin);
_stream.EnsureRead(buffer, 0, buffer.Length);
@@ -123,7 +123,7 @@ public sealed partial class Symbian
// Go to enumerate languages
br.BaseStream.Seek(sh.lang_ptr, SeekOrigin.Begin);
for(int i = 0; i < sh.languages; i++) languages.Add(((LanguageCodes)br.ReadUInt16()).ToString("G"));
for(var i = 0; i < sh.languages; i++) languages.Add(((LanguageCodes)br.ReadUInt16()).ToString("G"));
_files = [];
_conditions = [];
@@ -131,7 +131,7 @@ public sealed partial class Symbian
uint currentFile = 0;
uint offset = sh.files_ptr;
int conditionLevel = 0;
var conditionLevel = 0;
// Get only the options records
do
@@ -178,7 +178,7 @@ public sealed partial class Symbian
_compressed = true;
}
if(_files.Any(t => t.mime is not null)) _features |= ArchiveSupportedFeature.SupportsXAttrs;
if(_files.Any(static t => t.mime is not null)) _features |= ArchiveSupportedFeature.SupportsXAttrs;
Opened = true;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;
@@ -51,15 +51,11 @@ public sealed partial class Symbian
if(currentFile > maxFiles) return;
char[] tabulationChars = new char[conditionLevel];
for(int i = 0; i < conditionLevel; i++) tabulationChars[i] = '\t';
var tabulationChars = new char[conditionLevel];
for(var i = 0; i < conditionLevel; i++) tabulationChars[i] = '\t';
string tabulation = new(tabulationChars);
AaruLogging.Debug(MODULE_NAME,
"Seeking to {0} for parsing of file {1} of {2}",
offset,
currentFile,
maxFiles);
AaruLogging.Debug(MODULE_NAME, "Seeking to {0} for parsing of file {1} of {2}", offset, currentFile, maxFiles);
br.BaseStream.Seek(offset, SeekOrigin.Begin);
var recordType = (FileRecordType)br.ReadUInt32();
@@ -119,10 +115,10 @@ public sealed partial class Symbian
}
AaruLogging.Debug(MODULE_NAME,
"Found file for \"{0}\" with length {1} at {2}",
decodedFileRecord.destinationName,
decodedFileRecord.length,
decodedFileRecord.pointer);
"Found file for \"{0}\" with length {1} at {2}",
decodedFileRecord.destinationName,
decodedFileRecord.length,
decodedFileRecord.pointer);
_files.Add(decodedFileRecord);
@@ -323,7 +319,7 @@ public sealed partial class Symbian
var decodedFileRecords = new DecodedFileRecord[languages.Count];
for(int i = 0; i < languages.Count; i++)
for(var i = 0; i < languages.Count; i++)
{
decodedFileRecords[i].type = multipleFileRecord.record.type;
decodedFileRecords[i].details = multipleFileRecord.record.details;
@@ -488,7 +484,7 @@ public sealed partial class Symbian
optionsLineRecord.options = new OptionRecord[(int)optionsLineRecord.numberOfOptions];
for(int i = 0; i < optionsLineRecord.numberOfOptions; i++)
for(var i = 0; i < optionsLineRecord.numberOfOptions; i++)
{
optionsLineRecord.options[i] = new OptionRecord();
@@ -508,7 +504,7 @@ public sealed partial class Symbian
offset = (uint)br.BaseStream.Position;
for(int j = 0; j < languages.Count; j++)
for(var j = 0; j < languages.Count; j++)
{
br.BaseStream.Seek(optionsLineRecord.options[i].pointers[j], SeekOrigin.Begin);
buffer = br.ReadBytes((int)optionsLineRecord.options[i].lengths[j]);
@@ -527,7 +523,7 @@ public sealed partial class Symbian
conditionLevel--;
tabulationChars = new char[conditionLevel];
for(int i = 0; i < conditionLevel; i++) tabulationChars[i] = '\t';
for(var i = 0; i < conditionLevel; i++) tabulationChars[i] = '\t';
tabulation = new string(tabulationChars);
conditionalRecord = new ConditionalRecord
@@ -552,7 +548,7 @@ public sealed partial class Symbian
break;
case FileRecordType.ElseIf:
tabulationChars = new char[conditionLevel - 1];
for(int i = 0; i < conditionLevel - 1; i++) tabulationChars[i] = '\t';
for(var i = 0; i < conditionLevel - 1; i++) tabulationChars[i] = '\t';
tabulation = new string(tabulationChars);
conditionalRecord = new ConditionalRecord
@@ -577,7 +573,7 @@ public sealed partial class Symbian
break;
case FileRecordType.Else:
tabulationChars = new char[conditionLevel - 1];
for(int i = 0; i < conditionLevel - 1; i++) tabulationChars[i] = '\t';
for(var i = 0; i < conditionLevel - 1; i++) tabulationChars[i] = '\t';
tabulation = new string(tabulationChars);
offset = (uint)(br.BaseStream.Position + Marshal.SizeOf<ConditionalEndRecord>());

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Collections.Generic;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
namespace Aaru.Archives;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Collections.Generic;

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// Copied from zoo.h

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.IO;
@@ -48,7 +48,7 @@ public sealed partial class Zoo
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<ZooHeader>()];
var hdr = new byte[Marshal.SizeOf<ZooHeader>()];
stream.ReadExactly(hdr, 0, hdr.Length);
@@ -67,7 +67,7 @@ public sealed partial class Zoo
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf<ZooHeader>()];
var hdr = new byte[Marshal.SizeOf<ZooHeader>()];
stream.ReadExactly(hdr, 0, hdr.Length);
@@ -105,7 +105,7 @@ public sealed partial class Zoo
if(header.acmt_len > 0)
{
byte[] buffer = new byte[header.acmt_len];
var buffer = new byte[header.acmt_len];
stream.Position = header.acmt_pos;
encoding ??= Encoding.UTF8;
stream.ReadExactly(buffer, 0, buffer.Length);

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;
@@ -56,7 +56,7 @@ public sealed partial class Zoo
ArchiveSupportedFeature.SupportsFilenames |
ArchiveSupportedFeature.SupportsSubdirectories;
byte[] hdr = new byte[Marshal.SizeOf<ZooHeader>()];
var hdr = new byte[Marshal.SizeOf<ZooHeader>()];
_stream.ReadExactly(hdr, 0, hdr.Length);
@@ -86,7 +86,7 @@ public sealed partial class Zoo
do
{
byte[] buf = new byte[Marshal.SizeOf<Direntry>()];
var buf = new byte[Marshal.SizeOf<Direntry>()];
if(_stream.Position + buf.Length >= _stream.Length) break;
@@ -94,7 +94,7 @@ public sealed partial class Zoo
entry = Marshal.ByteArrayToStructureLittleEndian<Direntry>(buf);
int pos = 56; // dir_crc
var pos = 56; // dir_crc
if(entry.namlen > 0)
{

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// Copied from zoo.h

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Collections.Generic;

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -50,7 +50,7 @@
<ItemGroup>
<PackageReference Include="Aaru.Checksums.Native"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection"/>
<PackageReference Include="Sentry" />
<PackageReference Include="Sentry"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Aaru.Generators\Aaru.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>

View File

@@ -41,7 +41,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// Copyright 2017 The Chromium Authors. All rights reserved.
// ****************************************************************************/

View File

@@ -41,7 +41,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// Copyright 2017 The Chromium Authors. All rights reserved.
// ****************************************************************************/

View File

@@ -31,7 +31,7 @@
// 3. This notice may not be removed or altered from any source distribution.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// Copyright (C) 1995-2011 Mark Adler
// Copyright (C) Jean-loup Gailly
// ****************************************************************************/

View File

@@ -23,7 +23,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Diagnostics.CodeAnalysis;

View File

@@ -27,7 +27,7 @@
// along with this program.If not, see<http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ECC algorithm from ECM(c) 2002-2011 Neill Corlett
// ****************************************************************************/
@@ -82,8 +82,8 @@ public static class CdChecksums
{
case 2448:
{
byte[] subchannel = new byte[96];
byte[] channel = new byte[2352];
var subchannel = new byte[96];
var channel = new byte[2352];
Array.Copy(buffer, 0, channel, 0, 2352);
Array.Copy(buffer, 2352, subchannel, 0, 96);
@@ -121,7 +121,7 @@ public static class CdChecksums
for(uint i = 0; i < 256; i++)
{
uint edc = i;
uint j = (uint)(i << 1 ^ ((i & 0x80) == 0x80 ? 0x11D : 0));
var j = (uint)(i << 1 ^ ((i & 0x80) == 0x80 ? 0x11D : 0));
_eccFTable[i] = (byte)j;
_eccBTable[i ^ j] = (byte)i;
@@ -197,15 +197,15 @@ public static class CdChecksums
{
//AaruLogging.DebugWriteLine(MODULE_NAME, "Mode 0 sector at address {0:X2}:{1:X2}:{2:X2}",
// channel[0x00C], channel[0x00D], channel[0x00E]);
for(int i = 0x010; i < 0x930; i++)
for(var i = 0x010; i < 0x930; i++)
{
if(channel[i] == 0x00) continue;
AaruLogging.Debug(MODULE_NAME,
"Mode 0 sector with error at address: {0:X2}:{1:X2}:{2:X2}",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Mode 0 sector with error at address: {0:X2}:{1:X2}:{2:X2}",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
return false;
}
@@ -225,19 +225,19 @@ public static class CdChecksums
channel[0x81A] != 0x00 ||
channel[0x81B] != 0x00:
AaruLogging.Debug(MODULE_NAME,
"Mode 1 sector with data in reserved bytes at address: {0:X2}:{1:X2}:{2:X2}",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Mode 1 sector with data in reserved bytes at address: {0:X2}:{1:X2}:{2:X2}",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
return false;
case 0x01:
{
byte[] address = new byte[4];
byte[] data = new byte[2060];
byte[] data2 = new byte[2232];
byte[] eccP = new byte[172];
byte[] eccQ = new byte[104];
var address = new byte[4];
var data = new byte[2060];
var data2 = new byte[2232];
var eccP = new byte[172];
var eccQ = new byte[104];
Array.Copy(channel, 0x0C, address, 0, 4);
Array.Copy(channel, 0x10, data, 0, 2060);
@@ -254,22 +254,22 @@ public static class CdChecksums
if(failedEccP)
{
AaruLogging.Debug(MODULE_NAME,
"Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC P check",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC P check",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
}
if(failedEccQ)
{
AaruLogging.Debug(MODULE_NAME,
"Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC Q check",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC Q check",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
}
uint storedEdc = BitConverter.ToUInt32(channel, 0x810);
var storedEdc = BitConverter.ToUInt32(channel, 0x810);
uint calculatedEdc = ComputeEdc(0, channel, 0x810);
correctEdc = calculatedEdc == storedEdc;
@@ -277,12 +277,12 @@ public static class CdChecksums
if(calculatedEdc == storedEdc) return !failedEccP && !failedEccQ;
AaruLogging.Debug(MODULE_NAME,
"Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}",
channel[0x00C],
channel[0x00D],
channel[0x00E],
calculatedEdc,
storedEdc);
"Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}",
channel[0x00C],
channel[0x00D],
channel[0x00E],
calculatedEdc,
storedEdc);
return false;
}
@@ -292,7 +292,7 @@ public static class CdChecksums
{
//AaruLogging.DebugWriteLine(MODULE_NAME, "Mode 2 sector at address {0:X2}:{1:X2}:{2:X2}",
// channel[0x00C], channel[0x00D], channel[0x00E]);
byte[] mode2Sector = new byte[channel.Length - 0x10];
var mode2Sector = new byte[channel.Length - 0x10];
Array.Copy(channel, 0x10, mode2Sector, 0, mode2Sector.Length);
if((channel[0x012] & 0x20) == 0x20) // mode 2 form 2
@@ -303,13 +303,13 @@ public static class CdChecksums
channel[0x013] != channel[0x017])
{
AaruLogging.Debug(MODULE_NAME,
"Subheader copies differ in mode 2 form 2 sector at address: {0:X2}:{1:X2}:{2:X2}",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Subheader copies differ in mode 2 form 2 sector at address: {0:X2}:{1:X2}:{2:X2}",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
}
uint storedEdc = BitConverter.ToUInt32(mode2Sector, 0x91C);
var storedEdc = BitConverter.ToUInt32(mode2Sector, 0x91C);
// No CRC stored!
if(storedEdc == 0x00000000) return true;
@@ -321,12 +321,12 @@ public static class CdChecksums
if(calculatedEdc == storedEdc) return true;
AaruLogging.Debug(MODULE_NAME,
"Mode 2 form 2 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}",
channel[0x00C],
channel[0x00D],
channel[0x00E],
calculatedEdc,
storedEdc);
"Mode 2 form 2 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}",
channel[0x00C],
channel[0x00D],
channel[0x00E],
calculatedEdc,
storedEdc);
return false;
}
@@ -338,15 +338,15 @@ public static class CdChecksums
channel[0x013] != channel[0x017])
{
AaruLogging.Debug(MODULE_NAME,
"Subheader copies differ in mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Subheader copies differ in mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
}
byte[] address = new byte[4];
byte[] eccP = new byte[172];
byte[] eccQ = new byte[104];
var address = new byte[4];
var eccP = new byte[172];
var eccQ = new byte[104];
Array.Copy(mode2Sector, 0x80C, eccP, 0, 172);
Array.Copy(mode2Sector, 0x8B8, eccQ, 0, 104);
@@ -360,22 +360,22 @@ public static class CdChecksums
if(failedEccP)
{
AaruLogging.Debug(MODULE_NAME,
"Mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC P check",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC P check",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
}
if(failedEccQ)
{
AaruLogging.Debug(MODULE_NAME,
"Mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC Q check",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC Q check",
channel[0x00C],
channel[0x00D],
channel[0x00E]);
}
uint storedEdc = BitConverter.ToUInt32(mode2Sector, 0x808);
var storedEdc = BitConverter.ToUInt32(mode2Sector, 0x808);
uint calculatedEdc = ComputeEdc(0, mode2Sector, 0x808);
correctEdc = calculatedEdc == storedEdc;
@@ -383,23 +383,23 @@ public static class CdChecksums
if(calculatedEdc == storedEdc) return !failedEccP && !failedEccQ;
AaruLogging.Debug(MODULE_NAME,
"Mode 2 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}",
channel[0x00C],
channel[0x00D],
channel[0x00E],
calculatedEdc,
storedEdc);
"Mode 2 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}",
channel[0x00C],
channel[0x00D],
channel[0x00E],
calculatedEdc,
storedEdc);
return false;
}
}
default:
AaruLogging.Debug(MODULE_NAME,
"Unknown mode {0} sector at address: {1:X2}:{2:X2}:{3:X2}",
channel[0x00F],
channel[0x00C],
channel[0x00D],
channel[0x00E]);
"Unknown mode {0} sector at address: {1:X2}:{2:X2}:{3:X2}",
channel[0x00F],
channel[0x00C],
channel[0x00D],
channel[0x00E]);
return null;
}
@@ -407,7 +407,7 @@ public static class CdChecksums
static uint ComputeEdc(uint edc, IReadOnlyList<byte> src, int size)
{
int pos = 0;
var pos = 0;
for(; size > 0; size--) edc = edc >> 8 ^ _edcTable[(edc ^ src[pos++]) & 0xFF];
@@ -416,22 +416,22 @@ public static class CdChecksums
static bool? CheckCdSectorSubChannel(IReadOnlyList<byte> subchannel)
{
bool? status = true;
byte[] qSubChannel = new byte[12];
byte[] cdTextPack1 = new byte[18];
byte[] cdTextPack2 = new byte[18];
byte[] cdTextPack3 = new byte[18];
byte[] cdTextPack4 = new byte[18];
byte[] cdSubRwPack1 = new byte[24];
byte[] cdSubRwPack2 = new byte[24];
byte[] cdSubRwPack3 = new byte[24];
byte[] cdSubRwPack4 = new byte[24];
bool? status = true;
var qSubChannel = new byte[12];
var cdTextPack1 = new byte[18];
var cdTextPack2 = new byte[18];
var cdTextPack3 = new byte[18];
var cdTextPack4 = new byte[18];
var cdSubRwPack1 = new byte[24];
var cdSubRwPack2 = new byte[24];
var cdSubRwPack3 = new byte[24];
var cdSubRwPack4 = new byte[24];
int i = 0;
var i = 0;
for(int j = 0; j < 12; j++) qSubChannel[j] = 0;
for(var j = 0; j < 12; j++) qSubChannel[j] = 0;
for(int j = 0; j < 18; j++)
for(var j = 0; j < 18; j++)
{
cdTextPack1[j] = 0;
cdTextPack2[j] = 0;
@@ -439,7 +439,7 @@ public static class CdChecksums
cdTextPack4[j] = 0;
}
for(int j = 0; j < 24; j++)
for(var j = 0; j < 24; j++)
{
cdSubRwPack1[j] = 0;
cdSubRwPack2[j] = 0;
@@ -447,7 +447,7 @@ public static class CdChecksums
cdSubRwPack4[j] = 0;
}
for(int j = 0; j < 12; j++)
for(var j = 0; j < 12; j++)
{
qSubChannel[j] = (byte)(qSubChannel[j] | (subchannel[i++] & 0x40) << 1);
qSubChannel[j] = (byte)(qSubChannel[j] | subchannel[i++] & 0x40);
@@ -461,7 +461,7 @@ public static class CdChecksums
i = 0;
for(int j = 0; j < 18; j++)
for(var j = 0; j < 18; j++)
{
cdTextPack1[j] = (byte)(cdTextPack1[j] | (subchannel[i++] & 0x3F) << 2);
@@ -476,7 +476,7 @@ public static class CdChecksums
cdTextPack1[j] = (byte)(cdTextPack1[j] | subchannel[i++] & 0x3F);
}
for(int j = 0; j < 18; j++)
for(var j = 0; j < 18; j++)
{
cdTextPack2[j] = (byte)(cdTextPack2[j] | (subchannel[i++] & 0x3F) << 2);
@@ -491,7 +491,7 @@ public static class CdChecksums
cdTextPack2[j] = (byte)(cdTextPack2[j] | subchannel[i++] & 0x3F);
}
for(int j = 0; j < 18; j++)
for(var j = 0; j < 18; j++)
{
cdTextPack3[j] = (byte)(cdTextPack3[j] | (subchannel[i++] & 0x3F) << 2);
@@ -506,7 +506,7 @@ public static class CdChecksums
cdTextPack3[j] = (byte)(cdTextPack3[j] | subchannel[i++] & 0x3F);
}
for(int j = 0; j < 18; j++)
for(var j = 0; j < 18; j++)
{
cdTextPack4[j] = (byte)(cdTextPack4[j] | (subchannel[i++] & 0x3F) << 2);
@@ -523,13 +523,13 @@ public static class CdChecksums
i = 0;
for(int j = 0; j < 24; j++) cdSubRwPack1[j] = (byte)(subchannel[i++] & 0x3F);
for(var j = 0; j < 24; j++) cdSubRwPack1[j] = (byte)(subchannel[i++] & 0x3F);
for(int j = 0; j < 24; j++) cdSubRwPack2[j] = (byte)(subchannel[i++] & 0x3F);
for(var j = 0; j < 24; j++) cdSubRwPack2[j] = (byte)(subchannel[i++] & 0x3F);
for(int j = 0; j < 24; j++) cdSubRwPack3[j] = (byte)(subchannel[i++] & 0x3F);
for(var j = 0; j < 24; j++) cdSubRwPack3[j] = (byte)(subchannel[i++] & 0x3F);
for(int j = 0; j < 24; j++) cdSubRwPack4[j] = (byte)(subchannel[i++] & 0x3F);
for(var j = 0; j < 24; j++) cdSubRwPack4[j] = (byte)(subchannel[i++] & 0x3F);
switch(cdSubRwPack1[0])
{
@@ -563,41 +563,38 @@ public static class CdChecksums
break;
default:
AaruLogging.Debug(MODULE_NAME,
Localization.Detected_unknown_Pack_type_in_subchannel_mode_0_item_1,
Convert.ToString(cdSubRwPack1[0] & 0x38, 2),
Convert.ToString(cdSubRwPack1[0] & 0x07, 2));
Localization.Detected_unknown_Pack_type_in_subchannel_mode_0_item_1,
Convert.ToString(cdSubRwPack1[0] & 0x38, 2),
Convert.ToString(cdSubRwPack1[0] & 0x07, 2));
break;
}
ushort qSubChannelCrc = BigEndianBitConverter.ToUInt16(qSubChannel, 10);
byte[] qSubChannelForCrc = new byte[10];
var qSubChannelCrc = BigEndianBitConverter.ToUInt16(qSubChannel, 10);
var qSubChannelForCrc = new byte[10];
Array.Copy(qSubChannel, 0, qSubChannelForCrc, 0, 10);
ushort calculatedQcrc = CRC16CcittContext.Calculate(qSubChannelForCrc);
if(qSubChannelCrc != calculatedQcrc)
{
AaruLogging.Debug(MODULE_NAME,
Localization.Q_subchannel_CRC_0_expected_1,
calculatedQcrc,
qSubChannelCrc);
AaruLogging.Debug(MODULE_NAME, Localization.Q_subchannel_CRC_0_expected_1, calculatedQcrc, qSubChannelCrc);
status = false;
}
if((cdTextPack1[0] & 0x80) == 0x80)
{
ushort cdTextPack1Crc = BigEndianBitConverter.ToUInt16(cdTextPack1, 16);
byte[] cdTextPack1ForCrc = new byte[16];
var cdTextPack1Crc = BigEndianBitConverter.ToUInt16(cdTextPack1, 16);
var cdTextPack1ForCrc = new byte[16];
Array.Copy(cdTextPack1, 0, cdTextPack1ForCrc, 0, 16);
ushort calculatedCdtp1Crc = CRC16CcittContext.Calculate(cdTextPack1ForCrc);
if(cdTextPack1Crc != calculatedCdtp1Crc && cdTextPack1Crc != 0)
{
AaruLogging.Debug(MODULE_NAME,
Localization.CD_Text_Pack_one_CRC_0_expected_1,
cdTextPack1Crc,
calculatedCdtp1Crc);
Localization.CD_Text_Pack_one_CRC_0_expected_1,
cdTextPack1Crc,
calculatedCdtp1Crc);
status = false;
}
@@ -605,22 +602,22 @@ public static class CdChecksums
if((cdTextPack2[0] & 0x80) == 0x80)
{
ushort cdTextPack2Crc = BigEndianBitConverter.ToUInt16(cdTextPack2, 16);
byte[] cdTextPack2ForCrc = new byte[16];
var cdTextPack2Crc = BigEndianBitConverter.ToUInt16(cdTextPack2, 16);
var cdTextPack2ForCrc = new byte[16];
Array.Copy(cdTextPack2, 0, cdTextPack2ForCrc, 0, 16);
ushort calculatedCdtp2Crc = CRC16CcittContext.Calculate(cdTextPack2ForCrc);
AaruLogging.Debug(MODULE_NAME,
Localization.Cyclic_CDTP2_0_Calc_CDTP2_1,
cdTextPack2Crc,
calculatedCdtp2Crc);
Localization.Cyclic_CDTP2_0_Calc_CDTP2_1,
cdTextPack2Crc,
calculatedCdtp2Crc);
if(cdTextPack2Crc != calculatedCdtp2Crc && cdTextPack2Crc != 0)
{
AaruLogging.Debug(MODULE_NAME,
Localization.CD_Text_Pack_two_CRC_0_expected_1,
cdTextPack2Crc,
calculatedCdtp2Crc);
Localization.CD_Text_Pack_two_CRC_0_expected_1,
cdTextPack2Crc,
calculatedCdtp2Crc);
status = false;
}
@@ -628,22 +625,22 @@ public static class CdChecksums
if((cdTextPack3[0] & 0x80) == 0x80)
{
ushort cdTextPack3Crc = BigEndianBitConverter.ToUInt16(cdTextPack3, 16);
byte[] cdTextPack3ForCrc = new byte[16];
var cdTextPack3Crc = BigEndianBitConverter.ToUInt16(cdTextPack3, 16);
var cdTextPack3ForCrc = new byte[16];
Array.Copy(cdTextPack3, 0, cdTextPack3ForCrc, 0, 16);
ushort calculatedCdtp3Crc = CRC16CcittContext.Calculate(cdTextPack3ForCrc);
AaruLogging.Debug(MODULE_NAME,
Localization.Cyclic_CDTP3_0_Calc_CDTP3_1,
cdTextPack3Crc,
calculatedCdtp3Crc);
Localization.Cyclic_CDTP3_0_Calc_CDTP3_1,
cdTextPack3Crc,
calculatedCdtp3Crc);
if(cdTextPack3Crc != calculatedCdtp3Crc && cdTextPack3Crc != 0)
{
AaruLogging.Debug(MODULE_NAME,
Localization.CD_Text_Pack_three_CRC_0_expected_1,
cdTextPack3Crc,
calculatedCdtp3Crc);
Localization.CD_Text_Pack_three_CRC_0_expected_1,
cdTextPack3Crc,
calculatedCdtp3Crc);
status = false;
}
@@ -651,22 +648,19 @@ public static class CdChecksums
if((cdTextPack4[0] & 0x80) != 0x80) return status;
ushort cdTextPack4Crc = BigEndianBitConverter.ToUInt16(cdTextPack4, 16);
byte[] cdTextPack4ForCrc = new byte[16];
var cdTextPack4Crc = BigEndianBitConverter.ToUInt16(cdTextPack4, 16);
var cdTextPack4ForCrc = new byte[16];
Array.Copy(cdTextPack4, 0, cdTextPack4ForCrc, 0, 16);
ushort calculatedCdtp4Crc = CRC16CcittContext.Calculate(cdTextPack4ForCrc);
AaruLogging.Debug(MODULE_NAME,
Localization.Cyclic_CDTP4_0_Calc_CDTP4_1,
cdTextPack4Crc,
calculatedCdtp4Crc);
AaruLogging.Debug(MODULE_NAME, Localization.Cyclic_CDTP4_0_Calc_CDTP4_1, cdTextPack4Crc, calculatedCdtp4Crc);
if(cdTextPack4Crc == calculatedCdtp4Crc || cdTextPack4Crc == 0) return status;
AaruLogging.Debug(MODULE_NAME,
Localization.CD_Text_Pack_four_CRC_0_expected_1,
cdTextPack4Crc,
calculatedCdtp4Crc);
Localization.CD_Text_Pack_four_CRC_0_expected_1,
cdTextPack4Crc,
calculatedCdtp4Crc);
return false;
}

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;
@@ -83,121 +83,6 @@ public partial class Crc16Context : IChecksum
if(!_useNative) _table = table ?? GenerateTable(polynomial, inverse);
}
#region IChecksum Members
/// <inheritdoc />
public string Name => "Adler-32";
/// <inheritdoc />
public Guid Id => new("D69CF1E7-4A7B-4605-9291-3A1BE4C2951F");
/// <inheritdoc />
public string Author => Authors.NataliaPortillo;
/// <inheritdoc />
/// <summary>Updates the hash with data.</summary>
/// <param name="data">Data buffer.</param>
/// <param name="len">Length of buffer to hash.</param>
public void Update(byte[] data, uint len)
{
switch(_useNative)
{
case true when _useCcitt:
crc16_ccitt_update(_nativeContext, data, len);
break;
case true when _useIbm:
crc16_update(_nativeContext, data, len);
break;
default:
{
if(_inverse)
StepInverse(ref _hashInt, _table, data, len);
else
Step(ref _hashInt, _table, data, len);
break;
}
}
}
/// <inheritdoc />
/// <summary>Updates the hash with data.</summary>
/// <param name="data">Data buffer.</param>
public void Update(byte[] data) => Update(data, (uint)data.Length);
/// <inheritdoc />
/// <summary>Returns a byte array of the hash value.</summary>
public byte[] Final()
{
ushort crc = 0;
switch(_useNative)
{
case true when _useCcitt:
crc16_ccitt_final(_nativeContext, ref crc);
crc16_ccitt_free(_nativeContext);
break;
case true when _useIbm:
crc16_final(_nativeContext, ref crc);
crc16_free(_nativeContext);
break;
default:
{
if(_inverse)
crc = (ushort)~(_hashInt ^ _finalSeed);
else
crc = (ushort)(_hashInt ^ _finalSeed);
break;
}
}
return BigEndianBitConverter.GetBytes(crc);
}
/// <inheritdoc />
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
public string End()
{
var crc16Output = new StringBuilder();
ushort final = 0;
switch(_useNative)
{
case true when _useCcitt:
crc16_ccitt_final(_nativeContext, ref final);
crc16_ccitt_free(_nativeContext);
break;
case true when _useIbm:
crc16_final(_nativeContext, ref final);
crc16_free(_nativeContext);
break;
default:
{
if(_inverse)
final = (ushort)~(_hashInt ^ _finalSeed);
else
final = (ushort)(_hashInt ^ _finalSeed);
break;
}
}
byte[] finalBytes = BigEndianBitConverter.GetBytes(final);
foreach(byte t in finalBytes) crc16Output.Append(t.ToString("x2"));
return crc16Output.ToString();
}
#endregion
[LibraryImport("libAaru.Checksums.Native", SetLastError = true)]
private static partial IntPtr crc16_init();
@@ -632,4 +517,119 @@ public partial class Crc16Context : IChecksum
return localHashInt;
}
#region IChecksum Members
/// <inheritdoc />
public string Name => "Adler-32";
/// <inheritdoc />
public Guid Id => new("D69CF1E7-4A7B-4605-9291-3A1BE4C2951F");
/// <inheritdoc />
public string Author => Authors.NataliaPortillo;
/// <inheritdoc />
/// <summary>Updates the hash with data.</summary>
/// <param name="data">Data buffer.</param>
/// <param name="len">Length of buffer to hash.</param>
public void Update(byte[] data, uint len)
{
switch(_useNative)
{
case true when _useCcitt:
crc16_ccitt_update(_nativeContext, data, len);
break;
case true when _useIbm:
crc16_update(_nativeContext, data, len);
break;
default:
{
if(_inverse)
StepInverse(ref _hashInt, _table, data, len);
else
Step(ref _hashInt, _table, data, len);
break;
}
}
}
/// <inheritdoc />
/// <summary>Updates the hash with data.</summary>
/// <param name="data">Data buffer.</param>
public void Update(byte[] data) => Update(data, (uint)data.Length);
/// <inheritdoc />
/// <summary>Returns a byte array of the hash value.</summary>
public byte[] Final()
{
ushort crc = 0;
switch(_useNative)
{
case true when _useCcitt:
crc16_ccitt_final(_nativeContext, ref crc);
crc16_ccitt_free(_nativeContext);
break;
case true when _useIbm:
crc16_final(_nativeContext, ref crc);
crc16_free(_nativeContext);
break;
default:
{
if(_inverse)
crc = (ushort)~(_hashInt ^ _finalSeed);
else
crc = (ushort)(_hashInt ^ _finalSeed);
break;
}
}
return BigEndianBitConverter.GetBytes(crc);
}
/// <inheritdoc />
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
public string End()
{
var crc16Output = new StringBuilder();
ushort final = 0;
switch(_useNative)
{
case true when _useCcitt:
crc16_ccitt_final(_nativeContext, ref final);
crc16_ccitt_free(_nativeContext);
break;
case true when _useIbm:
crc16_final(_nativeContext, ref final);
crc16_free(_nativeContext);
break;
default:
{
if(_inverse)
final = (ushort)~(_hashInt ^ _finalSeed);
else
final = (ushort)(_hashInt ^ _finalSeed);
break;
}
}
byte[] finalBytes = BigEndianBitConverter.GetBytes(final);
foreach(byte t in finalBytes) crc16Output.Append(t.ToString("x2"));
return crc16Output.ToString();
}
#endregion
}

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -41,7 +41,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// Copyright 2017 The Chromium Authors. All rights reserved.
// ****************************************************************************/

View File

@@ -42,7 +42,7 @@
// 3. This notice may not be removed or altered from any source distribution.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// Copyright (c) 2016 Marian Beermann (add support for initial value, restructuring)
// Copyright (C) 2013 Intel Corporation. All rights reserved.
// ****************************************************************************/

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -18,7 +18,7 @@
// https://github.com/rawrunprotected/crc
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -41,7 +41,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// Copyright 2017 The Chromium Authors. All rights reserved.
// ****************************************************************************/

View File

@@ -41,7 +41,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// Copyright 2017 The Chromium Authors. All rights reserved.
// ****************************************************************************/

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// Disabled because the speed is abnormally slow

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;
@@ -47,53 +47,6 @@ public sealed class Md5Context : IChecksum
/// <summary>Initializes the MD5 hash provider</summary>
public Md5Context() => _provider = MD5.Create();
#region IChecksum Members
/// <inheritdoc />
public string Name => Localization.MD5_Name;
/// <inheritdoc />
public Guid Id => new("C78674C4-F699-4FAB-A618-1661AF659A7C");
/// <inheritdoc />
public string Author => Authors.NataliaPortillo;
/// <inheritdoc />
/// <summary>Updates the hash with data.</summary>
/// <param name="data">Data buffer.</param>
/// <param name="len">Length of buffer to hash.</param>
public void Update(byte[] data, uint len) => _provider.TransformBlock(data, 0, (int)len, data, 0);
/// <inheritdoc />
/// <summary>Updates the hash with data.</summary>
/// <param name="data">Data buffer.</param>
public void Update(byte[] data) => Update(data, (uint)data.Length);
/// <inheritdoc />
/// <summary>Returns a byte array of the hash value.</summary>
public byte[] Final()
{
_provider.TransformFinalBlock([], 0, 0);
return _provider.Hash;
}
/// <inheritdoc />
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
public string End()
{
_provider.TransformFinalBlock([], 0, 0);
var md5Output = new StringBuilder();
if(_provider.Hash is null) return null;
foreach(byte h in _provider.Hash) md5Output.Append(h.ToString("x2"));
return md5Output.ToString();
}
#endregion
/// <summary>Gets the hash of a file</summary>
/// <param name="filename">File path.</param>
public static byte[] File(string filename)
@@ -142,4 +95,51 @@ public sealed class Md5Context : IChecksum
/// <param name="data">Data buffer.</param>
/// <param name="hash">Byte array of the hash value.</param>
public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash);
#region IChecksum Members
/// <inheritdoc />
public string Name => Localization.MD5_Name;
/// <inheritdoc />
public Guid Id => new("C78674C4-F699-4FAB-A618-1661AF659A7C");
/// <inheritdoc />
public string Author => Authors.NataliaPortillo;
/// <inheritdoc />
/// <summary>Updates the hash with data.</summary>
/// <param name="data">Data buffer.</param>
/// <param name="len">Length of buffer to hash.</param>
public void Update(byte[] data, uint len) => _provider.TransformBlock(data, 0, (int)len, data, 0);
/// <inheritdoc />
/// <summary>Updates the hash with data.</summary>
/// <param name="data">Data buffer.</param>
public void Update(byte[] data) => Update(data, (uint)data.Length);
/// <inheritdoc />
/// <summary>Returns a byte array of the hash value.</summary>
public byte[] Final()
{
_provider.TransformFinalBlock([], 0, 0);
return _provider.Hash;
}
/// <inheritdoc />
/// <summary>Returns a hexadecimal representation of the hash value.</summary>
public string End()
{
_provider.TransformFinalBlock([], 0, 0);
var md5Output = new StringBuilder();
if(_provider.Hash is null) return null;
foreach(byte h in _provider.Hash) md5Output.Append(h.ToString("x2"));
return md5Output.ToString();
}
#endregion
}

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;
@@ -39,7 +39,6 @@ namespace Aaru.Checksums;
/// <summary>Handles native implementations of compression algorithms</summary>
public static partial class Native
{
static bool _checked;
static bool _supported;
/// <summary>Set to return native as never supported</summary>
@@ -55,10 +54,10 @@ public static partial class Native
{
if(ForceManaged) return false;
if(_checked) return _supported;
if(field) return _supported;
ulong version;
_checked = true;
field = true;
try
{

View File

@@ -27,7 +27,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// Copyright (C) 1996 Phil Karn
// Copyright (C) 1995 Robert Morelos-Zaragoza
// Copyright (C) 1995 Hari Thirumoorthy
@@ -194,7 +194,7 @@ public class ReedSolomon
{
int i;
int mask = 1;
var mask = 1;
_alphaTo[_mm] = 0;
for(i = 0; i < _mm; i++)
@@ -300,8 +300,9 @@ public class ReedSolomon
{
if(_mm != 8)
{
if(data[i] > _nn) return -1; /* Illegal symbol */
if(data[i] > _nn) return -1;
}
/* Illegal symbol */
int feedback = _indexOf[data[i] ^ bb[_nn - _kk - 1]];
@@ -355,26 +356,27 @@ public class ReedSolomon
throw new UnauthorizedAccessException(Localization.Trying_to_calculate_RS_without_initializing);
erasPos = new int[_nn - _kk];
int i, j;
int q, tmp;
int[] recd = new int[_nn];
int[] lambda = new int[_nn - _kk + 1]; /* Err+Eras Locator poly */
int[] s = new int[_nn - _kk + 1]; /* syndrome poly */
int[] b = new int[_nn - _kk + 1];
int[] t = new int[_nn - _kk + 1];
int[] omega = new int[_nn - _kk + 1];
int[] root = new int[_nn - _kk];
int[] reg = new int[_nn - _kk + 1];
int[] loc = new int[_nn - _kk];
int count;
int i, j;
int q, tmp;
var recd = new int[_nn];
var lambda = new int[_nn - _kk + 1]; /* Err+Eras Locator poly */
var s = new int[_nn - _kk + 1]; /* syndrome poly */
var b = new int[_nn - _kk + 1];
var t = new int[_nn - _kk + 1];
var omega = new int[_nn - _kk + 1];
var root = new int[_nn - _kk];
var reg = new int[_nn - _kk + 1];
var loc = new int[_nn - _kk];
int count;
/* data[] is in polynomial form, copy and convert to index form */
for(i = _nn - 1; i >= 0; i--)
{
if(_mm != 8)
{
if(data[i] > _nn) return -1; /* Illegal symbol */
if(data[i] > _nn) return -1;
}
/* Illegal symbol */
recd[i] = _indexOf[data[i]];
}
@@ -382,7 +384,7 @@ public class ReedSolomon
/* first form the syndromes; i.e., evaluate recd(x) at roots of g(x)
* namely @**(B0+i), i = 0, ... ,(NN-KK-1)
*/
int synError = 0;
var synError = 0;
for(i = 1; i <= _nn - _kk; i++)
{
@@ -457,8 +459,7 @@ public class ReedSolomon
return -1;
}
AaruLogging.Debug(MODULE_NAME,
Localization.Erasure_positions_as_determined_by_roots_of_Eras_Loc_Poly);
AaruLogging.Debug(MODULE_NAME, Localization.Erasure_positions_as_determined_by_roots_of_Eras_Loc_Poly);
for(i = 0; i < count; i++) AaruLogging.Debug(MODULE_NAME, "{0} ", loc[i]);
@@ -479,7 +480,7 @@ public class ReedSolomon
{
/* r is the step number */
/* Compute discrepancy at the r-th step in poly-form */
int discrR = 0;
var discrR = 0;
for(i = 0; i < r; i++)
{
@@ -530,7 +531,7 @@ public class ReedSolomon
}
/* Convert lambda to index form and compute deg(lambda(x)) */
int degLambda = 0;
var degLambda = 0;
for(i = 0; i < _nn - _kk + 1; i++)
{
@@ -582,7 +583,7 @@ public class ReedSolomon
* Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo
* x**(NN-KK)). in index form. Also find deg(omega).
*/
int degOmega = 0;
var degOmega = 0;
for(i = 0; i < _nn - _kk; i++)
{
@@ -607,7 +608,7 @@ public class ReedSolomon
*/
for(j = count - 1; j >= 0; j--)
{
int num1 = 0;
var num1 = 0;
for(i = degOmega; i >= 0; i--)
{
@@ -615,7 +616,7 @@ public class ReedSolomon
}
int num2 = _alphaTo[Modnn(root[j] * (B0 - 1) + _nn)];
int den = 0;
var den = 0;
/* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */
for(i = Min(degLambda, _nn - _kk - 1) & ~1; i >= 0; i -= 2)

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using Aaru.CommonTypes.Interfaces;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -27,7 +27,7 @@
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// Based on ssdeep

View File

@@ -34,7 +34,7 @@
<PackageReference Include="Macross.Json.Extensions"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions"/>
<PackageReference Include="Sentry" />
<PackageReference Include="Sentry"/>
<PackageReference Include="System.ComponentModel.Annotations"/>
<PackageReference Include="System.Security.Principal.Windows"/>
<PackageReference Include="System.ValueTuple"/>

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,10 +33,11 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Text.Json.Serialization;
using Aaru.Localization;
// ReSharper disable UnusedMember.Global
// ReSharper disable ClassNeverInstantiated.Global
@@ -47,83 +48,155 @@ namespace Aaru.CommonTypes.AaruMetadata;
public enum Architecture
{
[JsonPropertyName("4004")]
[LocalizedDescription(nameof(UI.Architecture_4004))]
_4004,
[JsonPropertyName("4040")]
[LocalizedDescription(nameof(UI.Architecture_4040))]
_4040,
[JsonPropertyName("6502")]
[LocalizedDescription(nameof(UI.Architecture_6502))]
_6502,
[JsonPropertyName("65816")]
[LocalizedDescription(nameof(UI.Architecture_65816))]
_65816,
[JsonPropertyName("8008")]
[LocalizedDescription(nameof(UI.Architecture_8008))]
_8008,
[JsonPropertyName("8051")]
[LocalizedDescription(nameof(UI.Architecture_8051))]
_8051,
[JsonPropertyName("8080")]
[LocalizedDescription(nameof(UI.Architecture_8080))]
_8080,
[JsonPropertyName("8085")]
[LocalizedDescription(nameof(UI.Architecture_8085))]
_8085,
[LocalizedDescription(nameof(UI.Architecture_Aarch64))]
Aarch64,
[LocalizedDescription(nameof(UI.Architecture_Am29000))]
Am29000,
[LocalizedDescription(nameof(UI.Architecture_Amd64))]
Amd64,
[LocalizedDescription(nameof(UI.Architecture_Apx432))]
Apx432,
[LocalizedDescription(nameof(UI.Architecture_Arm))]
Arm,
[LocalizedDescription(nameof(UI.Architecture_Avr))]
Avr,
[LocalizedDescription(nameof(UI.Architecture_Avr32))]
Avr32,
[LocalizedDescription(nameof(UI.Architecture_Axp))]
Axp,
[LocalizedDescription(nameof(UI.Architecture_Clipper))]
Clipper,
[LocalizedDescription(nameof(UI.Architecture_Cray))]
Cray,
[LocalizedDescription(nameof(UI.Architecture_Esa390))]
Esa390,
[LocalizedDescription(nameof(UI.Architecture_Hobbit))]
Hobbit,
[LocalizedDescription(nameof(UI.Architecture_I86))]
I86,
[LocalizedDescription(nameof(UI.Architecture_I860))]
I860,
[LocalizedDescription(nameof(UI.Architecture_I960))]
I960,
[LocalizedDescription(nameof(UI.Architecture_Ia32))]
Ia32,
[LocalizedDescription(nameof(UI.Architecture_Ia64))]
Ia64,
[LocalizedDescription(nameof(UI.Architecture_M56K))]
M56K,
[LocalizedDescription(nameof(UI.Architecture_M6800))]
M6800,
[LocalizedDescription(nameof(UI.Architecture_M6801))]
M6801,
[LocalizedDescription(nameof(UI.Architecture_M6805))]
M6805,
[LocalizedDescription(nameof(UI.Architecture_M6809))]
M6809,
[LocalizedDescription(nameof(UI.Architecture_M68K))]
M68K,
[LocalizedDescription(nameof(UI.Architecture_M88K))]
M88K,
[LocalizedDescription(nameof(UI.Architecture_Mcs41))]
Mcs41,
[LocalizedDescription(nameof(UI.Architecture_Mcs48))]
Mcs48,
[LocalizedDescription(nameof(UI.Architecture_Mips32))]
Mips32,
[LocalizedDescription(nameof(UI.Architecture_Mips64))]
Mips64,
[LocalizedDescription(nameof(UI.Architecture_Msp430))]
Msp430,
[LocalizedDescription(nameof(UI.Architecture_Nios2))]
Nios2,
[LocalizedDescription(nameof(UI.Architecture_Openrisc))]
Openrisc,
[LocalizedDescription(nameof(UI.Architecture_Parisc))]
Parisc,
[LocalizedDescription(nameof(UI.Architecture_PDP1))]
PDP1,
[LocalizedDescription(nameof(UI.Architecture_PDP10))]
PDP10,
[LocalizedDescription(nameof(UI.Architecture_PDP11))]
PDP11,
[LocalizedDescription(nameof(UI.Architecture_PDP7))]
PDP7,
[LocalizedDescription(nameof(UI.Architecture_PDP8))]
PDP8,
[LocalizedDescription(nameof(UI.Architecture_Pic))]
Pic,
[LocalizedDescription(nameof(UI.Architecture_Power))]
Power,
[LocalizedDescription(nameof(UI.Architecture_Ppc))]
Ppc,
[LocalizedDescription(nameof(UI.Architecture_Ppc64))]
Ppc64,
[LocalizedDescription(nameof(UI.Architecture_Prism))]
Prism,
[LocalizedDescription(nameof(UI.Architecture_Renesasrx))]
Renesasrx,
[LocalizedDescription(nameof(UI.Architecture_Riscv))]
Riscv,
[LocalizedDescription(nameof(UI.Architecture_S360))]
S360,
[LocalizedDescription(nameof(UI.Architecture_S370))]
S370,
[LocalizedDescription(nameof(UI.Architecture_Sh))]
Sh,
[LocalizedDescription(nameof(UI.Architecture_Sh1))]
Sh1,
[LocalizedDescription(nameof(UI.Architecture_Sh2))]
Sh2,
[LocalizedDescription(nameof(UI.Architecture_Sh3))]
Sh3,
[LocalizedDescription(nameof(UI.Architecture_Sh4))]
Sh4,
[LocalizedDescription(nameof(UI.Architecture_Sh5))]
Sh5,
[LocalizedDescription(nameof(UI.Architecture_Sh64))]
Sh64,
[LocalizedDescription(nameof(UI.Architecture_Sparc))]
Sparc,
[LocalizedDescription(nameof(UI.Architecture_Sparc64))]
Sparc64,
[LocalizedDescription(nameof(UI.Architecture_Transputer))]
Transputer,
[LocalizedDescription(nameof(UI.Architecture_Vax))]
Vax,
[LocalizedDescription(nameof(UI.Architecture_We32000))]
We32000,
[LocalizedDescription(nameof(UI.Architecture_X32))]
X32,
[LocalizedDescription(nameof(UI.Architecture_Z80))]
Z80,
[LocalizedDescription(nameof(UI.Architecture_Z800))]
Z800,
[LocalizedDescription(nameof(UI.Architecture_Z8000))]
Z8000,
[LocalizedDescription(nameof(UI.Architecture_Z80000))]
Z80000,
[LocalizedDescription(nameof(UI.Architecture_Zarch))]
Zarch
}

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global
@@ -42,6 +42,7 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using Aaru.Localization;
namespace Aaru.CommonTypes.AaruMetadata;
@@ -49,33 +50,61 @@ namespace Aaru.CommonTypes.AaruMetadata;
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum BarcodeType
{
[LocalizedDescription(nameof(UI.BarcodeType_Aztec))]
Aztec,
[LocalizedDescription(nameof(UI.BarcodeType_Codabar))]
Codabar,
[LocalizedDescription(nameof(UI.BarcodeType_Code11))]
Code11,
[LocalizedDescription(nameof(UI.BarcodeType_Code128))]
Code128,
[LocalizedDescription(nameof(UI.BarcodeType_Code39))]
Code39,
[LocalizedDescription(nameof(UI.BarcodeType_Code93))]
Code93,
[LocalizedDescription(nameof(UI.BarcodeType_CPC_Binary))]
CPC_Binary,
[LocalizedDescription(nameof(UI.BarcodeType_EZcode))]
EZcode,
[LocalizedDescription(nameof(UI.BarcodeType_FIM))]
FIM,
[LocalizedDescription(nameof(UI.BarcodeType_ITF))]
ITF,
[LocalizedDescription(nameof(UI.BarcodeType_ITF14))]
ITF14,
[LocalizedDescription(nameof(UI.BarcodeType_EAN13))]
EAN13,
[LocalizedDescription(nameof(UI.BarcodeType_EAN8))]
EAN8,
[LocalizedDescription(nameof(UI.BarcodeType_MaxiCode))]
MaxiCode,
[LocalizedDescription(nameof(UI.BarcodeType_ISBN))]
ISBN,
[LocalizedDescription(nameof(UI.BarcodeType_ISRC))]
ISRC,
[LocalizedDescription(nameof(UI.BarcodeType_MSI))]
MSI,
[LocalizedDescription(nameof(UI.BarcodeType_ShotCode))]
ShotCode,
[LocalizedDescription(nameof(UI.BarcodeType_RM4SCC))]
RM4SCC,
[LocalizedDescription(nameof(UI.BarcodeType_QR))]
QR,
[LocalizedDescription(nameof(UI.BarcodeType_EAN5))]
EAN5,
[LocalizedDescription(nameof(UI.BarcodeType_EAN2))]
EAN2,
[LocalizedDescription(nameof(UI.BarcodeType_POSTNET))]
POSTNET,
[LocalizedDescription(nameof(UI.BarcodeType_PostBar))]
PostBar,
[LocalizedDescription(nameof(UI.BarcodeType_Plessey))]
Plessey,
[LocalizedDescription(nameof(UI.BarcodeType_Pharmacode))]
Pharmacode,
[LocalizedDescription(nameof(UI.BarcodeType_PDF417))]
PDF417,
[LocalizedDescription(nameof(UI.BarcodeType_PatchCode))]
PatchCode
}
@@ -92,4 +121,4 @@ public class Barcode
Type = (BarcodeType)cicm.type,
Value = cicm.Value
};
}
}

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,11 +33,12 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using Aaru.Localization;
// ReSharper disable UnusedMember.Global
// ReSharper disable ClassNeverInstantiated.Global
@@ -48,491 +49,977 @@ namespace Aaru.CommonTypes.AaruMetadata;
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum Language
{
[LocalizedDescription(nameof(UI.Language_aar))]
aar,
[LocalizedDescription(nameof(UI.Language_abk))]
abk,
[LocalizedDescription(nameof(UI.Language_ace))]
ace,
[LocalizedDescription(nameof(UI.Language_ach))]
ach,
[LocalizedDescription(nameof(UI.Language_ada))]
ada,
[LocalizedDescription(nameof(UI.Language_ady))]
ady,
[LocalizedDescription(nameof(UI.Language_afa))]
afa,
[LocalizedDescription(nameof(UI.Language_afh))]
afh,
[LocalizedDescription(nameof(UI.Language_afr))]
afr,
[LocalizedDescription(nameof(UI.Language_ain))]
ain,
[LocalizedDescription(nameof(UI.Language_aka))]
aka,
[LocalizedDescription(nameof(UI.Language_akk))]
akk,
[LocalizedDescription(nameof(UI.Language_alb))]
alb,
[LocalizedDescription(nameof(UI.Language_ale))]
ale,
[LocalizedDescription(nameof(UI.Language_alg))]
alg,
[LocalizedDescription(nameof(UI.Language_alt))]
alt,
[LocalizedDescription(nameof(UI.Language_amh))]
amh,
[LocalizedDescription(nameof(UI.Language_ang))]
ang,
[LocalizedDescription(nameof(UI.Language_anp))]
anp,
[LocalizedDescription(nameof(UI.Language_apa))]
apa,
[LocalizedDescription(nameof(UI.Language_ara))]
ara,
[LocalizedDescription(nameof(UI.Language_arc))]
arc,
[LocalizedDescription(nameof(UI.Language_arg))]
arg,
[LocalizedDescription(nameof(UI.Language_arm))]
arm,
[LocalizedDescription(nameof(UI.Language_arn))]
arn,
[LocalizedDescription(nameof(UI.Language_arp))]
arp,
[LocalizedDescription(nameof(UI.Language_art))]
art,
[LocalizedDescription(nameof(UI.Language_arw))]
arw,
[LocalizedDescription(nameof(UI.Language_asm))]
asm,
[LocalizedDescription(nameof(UI.Language_ast))]
ast,
[LocalizedDescription(nameof(UI.Language_ath))]
ath,
[LocalizedDescription(nameof(UI.Language_aus))]
aus,
[LocalizedDescription(nameof(UI.Language_ava))]
ava,
[LocalizedDescription(nameof(UI.Language_ave))]
ave,
[LocalizedDescription(nameof(UI.Language_awa))]
awa,
[LocalizedDescription(nameof(UI.Language_aym))]
aym,
[LocalizedDescription(nameof(UI.Language_aze))]
aze,
[LocalizedDescription(nameof(UI.Language_bad))]
bad,
[LocalizedDescription(nameof(UI.Language_bai))]
bai,
[LocalizedDescription(nameof(UI.Language_bak))]
bak,
[LocalizedDescription(nameof(UI.Language_bal))]
bal,
[LocalizedDescription(nameof(UI.Language_bam))]
bam,
[LocalizedDescription(nameof(UI.Language_ban))]
ban,
[LocalizedDescription(nameof(UI.Language_baq))]
baq,
[LocalizedDescription(nameof(UI.Language_bas))]
bas,
[LocalizedDescription(nameof(UI.Language_bat))]
bat,
[LocalizedDescription(nameof(UI.Language_bej))]
bej,
[LocalizedDescription(nameof(UI.Language_bel))]
bel,
[LocalizedDescription(nameof(UI.Language_bem))]
bem,
[LocalizedDescription(nameof(UI.Language_ben))]
ben,
[LocalizedDescription(nameof(UI.Language_ber))]
ber,
[LocalizedDescription(nameof(UI.Language_bho))]
bho,
[LocalizedDescription(nameof(UI.Language_bih))]
bih,
[LocalizedDescription(nameof(UI.Language_bik))]
bik,
[LocalizedDescription(nameof(UI.Language_bin))]
bin,
[LocalizedDescription(nameof(UI.Language_bis))]
bis,
[LocalizedDescription(nameof(UI.Language_bla))]
bla,
[LocalizedDescription(nameof(UI.Language_bnt))]
bnt,
[LocalizedDescription(nameof(UI.Language_bos))]
bos,
[LocalizedDescription(nameof(UI.Language_bra))]
bra,
[LocalizedDescription(nameof(UI.Language_bre))]
bre,
[LocalizedDescription(nameof(UI.Language_btk))]
btk,
[LocalizedDescription(nameof(UI.Language_bua))]
bua,
[LocalizedDescription(nameof(UI.Language_bug))]
bug,
[LocalizedDescription(nameof(UI.Language_bul))]
bul,
[LocalizedDescription(nameof(UI.Language_bur))]
bur,
[LocalizedDescription(nameof(UI.Language_byn))]
byn,
[LocalizedDescription(nameof(UI.Language_cad))]
cad,
[LocalizedDescription(nameof(UI.Language_cai))]
cai,
[LocalizedDescription(nameof(UI.Language_car))]
car,
[LocalizedDescription(nameof(UI.Language_cat))]
cat,
[LocalizedDescription(nameof(UI.Language_cau))]
cau,
[LocalizedDescription(nameof(UI.Language_ceb))]
ceb,
[LocalizedDescription(nameof(UI.Language_cel))]
cel,
[LocalizedDescription(nameof(UI.Language_cha))]
cha,
[LocalizedDescription(nameof(UI.Language_chb))]
chb,
[LocalizedDescription(nameof(UI.Language_che))]
che,
[LocalizedDescription(nameof(UI.Language_chg))]
chg,
[LocalizedDescription(nameof(UI.Language_chi))]
chi,
[LocalizedDescription(nameof(UI.Language_chk))]
chk,
[LocalizedDescription(nameof(UI.Language_chm))]
chm,
[LocalizedDescription(nameof(UI.Language_chn))]
chn,
[LocalizedDescription(nameof(UI.Language_cho))]
cho,
[LocalizedDescription(nameof(UI.Language_chp))]
chp,
[LocalizedDescription(nameof(UI.Language_chr))]
chr,
[LocalizedDescription(nameof(UI.Language_chu))]
chu,
[LocalizedDescription(nameof(UI.Language_chv))]
chv,
[LocalizedDescription(nameof(UI.Language_chy))]
chy,
[LocalizedDescription(nameof(UI.Language_cmc))]
cmc,
[LocalizedDescription(nameof(UI.Language_cop))]
cop,
[LocalizedDescription(nameof(UI.Language_cor))]
cor,
[LocalizedDescription(nameof(UI.Language_cos))]
cos,
[LocalizedDescription(nameof(UI.Language_cpe))]
cpe,
[LocalizedDescription(nameof(UI.Language_cpf))]
cpf,
[LocalizedDescription(nameof(UI.Language_cpp))]
cpp,
[LocalizedDescription(nameof(UI.Language_cre))]
cre,
[LocalizedDescription(nameof(UI.Language_crh))]
crh,
[LocalizedDescription(nameof(UI.Language_crp))]
crp,
[LocalizedDescription(nameof(UI.Language_csb))]
csb,
[LocalizedDescription(nameof(UI.Language_cus))]
cus,
[LocalizedDescription(nameof(UI.Language_cze))]
cze,
[LocalizedDescription(nameof(UI.Language_dak))]
dak,
[LocalizedDescription(nameof(UI.Language_dan))]
dan,
[LocalizedDescription(nameof(UI.Language_dar))]
dar,
[LocalizedDescription(nameof(UI.Language_day))]
day,
[LocalizedDescription(nameof(UI.Language_del))]
del,
[LocalizedDescription(nameof(UI.Language_den))]
den,
[LocalizedDescription(nameof(UI.Language_dgr))]
dgr,
[LocalizedDescription(nameof(UI.Language_din))]
din,
[LocalizedDescription(nameof(UI.Language_div))]
div,
[LocalizedDescription(nameof(UI.Language_doi))]
doi,
[LocalizedDescription(nameof(UI.Language_dra))]
dra,
[LocalizedDescription(nameof(UI.Language_dsb))]
dsb,
[LocalizedDescription(nameof(UI.Language_dua))]
dua,
[LocalizedDescription(nameof(UI.Language_dum))]
dum,
[LocalizedDescription(nameof(UI.Language_dut))]
dut,
[LocalizedDescription(nameof(UI.Language_dyu))]
dyu,
[LocalizedDescription(nameof(UI.Language_dzo))]
dzo,
[LocalizedDescription(nameof(UI.Language_efi))]
efi,
[LocalizedDescription(nameof(UI.Language_egy))]
egy,
[LocalizedDescription(nameof(UI.Language_eka))]
eka,
[LocalizedDescription(nameof(UI.Language_elx))]
elx,
[LocalizedDescription(nameof(UI.Language_eng))]
eng,
[LocalizedDescription(nameof(UI.Language_enm))]
enm,
[LocalizedDescription(nameof(UI.Language_epo))]
epo,
[LocalizedDescription(nameof(UI.Language_est))]
est,
[LocalizedDescription(nameof(UI.Language_ewe))]
ewe,
[LocalizedDescription(nameof(UI.Language_ewo))]
ewo,
[LocalizedDescription(nameof(UI.Language_fan))]
fan,
[LocalizedDescription(nameof(UI.Language_fao))]
fao,
[LocalizedDescription(nameof(UI.Language_fat))]
fat,
[LocalizedDescription(nameof(UI.Language_fij))]
fij,
[LocalizedDescription(nameof(UI.Language_fil))]
fil,
[LocalizedDescription(nameof(UI.Language_fin))]
fin,
[LocalizedDescription(nameof(UI.Language_fiu))]
fiu,
[LocalizedDescription(nameof(UI.Language_fon))]
fon,
[LocalizedDescription(nameof(UI.Language_fre))]
fre,
[LocalizedDescription(nameof(UI.Language_frm))]
frm,
[LocalizedDescription(nameof(UI.Language_fro))]
fro,
[LocalizedDescription(nameof(UI.Language_frr))]
frr,
[LocalizedDescription(nameof(UI.Language_frs))]
frs,
[LocalizedDescription(nameof(UI.Language_fry))]
fry,
[LocalizedDescription(nameof(UI.Language_ful))]
ful,
[LocalizedDescription(nameof(UI.Language_fur))]
fur,
[LocalizedDescription(nameof(UI.Language_gaa))]
gaa,
[LocalizedDescription(nameof(UI.Language_gay))]
gay,
[LocalizedDescription(nameof(UI.Language_gba))]
gba,
[LocalizedDescription(nameof(UI.Language_gem))]
gem,
[LocalizedDescription(nameof(UI.Language_geo))]
geo,
[LocalizedDescription(nameof(UI.Language_ger))]
ger,
[LocalizedDescription(nameof(UI.Language_gez))]
gez,
[LocalizedDescription(nameof(UI.Language_gil))]
gil,
[LocalizedDescription(nameof(UI.Language_gla))]
gla,
[LocalizedDescription(nameof(UI.Language_gle))]
gle,
[LocalizedDescription(nameof(UI.Language_glg))]
glg,
[LocalizedDescription(nameof(UI.Language_glv))]
glv,
[LocalizedDescription(nameof(UI.Language_gmh))]
gmh,
[LocalizedDescription(nameof(UI.Language_goh))]
goh,
[LocalizedDescription(nameof(UI.Language_gon))]
gon,
[LocalizedDescription(nameof(UI.Language_gor))]
gor,
[LocalizedDescription(nameof(UI.Language_got))]
got,
[LocalizedDescription(nameof(UI.Language_grb))]
grb,
[LocalizedDescription(nameof(UI.Language_grc))]
grc,
[LocalizedDescription(nameof(UI.Language_gre))]
gre,
[LocalizedDescription(nameof(UI.Language_grn))]
grn,
[LocalizedDescription(nameof(UI.Language_gsw))]
gsw,
[LocalizedDescription(nameof(UI.Language_guj))]
guj,
[LocalizedDescription(nameof(UI.Language_gwi))]
gwi,
[LocalizedDescription(nameof(UI.Language_hai))]
hai,
[LocalizedDescription(nameof(UI.Language_hat))]
hat,
[LocalizedDescription(nameof(UI.Language_hau))]
hau,
[LocalizedDescription(nameof(UI.Language_haw))]
haw,
[LocalizedDescription(nameof(UI.Language_heb))]
heb,
[LocalizedDescription(nameof(UI.Language_her))]
her,
[LocalizedDescription(nameof(UI.Language_hil))]
hil,
[LocalizedDescription(nameof(UI.Language_him))]
him,
[LocalizedDescription(nameof(UI.Language_hin))]
hin,
[LocalizedDescription(nameof(UI.Language_hit))]
hit,
[LocalizedDescription(nameof(UI.Language_hmn))]
hmn,
[LocalizedDescription(nameof(UI.Language_hmo))]
hmo,
[LocalizedDescription(nameof(UI.Language_hrv))]
hrv,
[LocalizedDescription(nameof(UI.Language_hsb))]
hsb,
[LocalizedDescription(nameof(UI.Language_hun))]
hun,
[LocalizedDescription(nameof(UI.Language_hup))]
hup,
[LocalizedDescription(nameof(UI.Language_iba))]
iba,
[LocalizedDescription(nameof(UI.Language_ibo))]
ibo,
[LocalizedDescription(nameof(UI.Language_ice))]
ice,
[LocalizedDescription(nameof(UI.Language_ido))]
ido,
[LocalizedDescription(nameof(UI.Language_iii))]
iii,
[LocalizedDescription(nameof(UI.Language_ijo))]
ijo,
[LocalizedDescription(nameof(UI.Language_iku))]
iku,
[LocalizedDescription(nameof(UI.Language_ile))]
ile,
[LocalizedDescription(nameof(UI.Language_ilo))]
ilo,
[LocalizedDescription(nameof(UI.Language_ina))]
ina,
[LocalizedDescription(nameof(UI.Language_inc))]
inc,
[LocalizedDescription(nameof(UI.Language_ind))]
ind,
[LocalizedDescription(nameof(UI.Language_ine))]
ine,
[LocalizedDescription(nameof(UI.Language_inh))]
inh,
[LocalizedDescription(nameof(UI.Language_ipk))]
ipk,
[LocalizedDescription(nameof(UI.Language_ira))]
ira,
[LocalizedDescription(nameof(UI.Language_iro))]
iro,
[LocalizedDescription(nameof(UI.Language_ita))]
ita,
[LocalizedDescription(nameof(UI.Language_jav))]
jav,
[LocalizedDescription(nameof(UI.Language_jbo))]
jbo,
[LocalizedDescription(nameof(UI.Language_jpn))]
jpn,
[LocalizedDescription(nameof(UI.Language_jpr))]
jpr,
[LocalizedDescription(nameof(UI.Language_jrb))]
jrb,
[LocalizedDescription(nameof(UI.Language_kaa))]
kaa,
[LocalizedDescription(nameof(UI.Language_kab))]
kab,
[LocalizedDescription(nameof(UI.Language_kac))]
kac,
[LocalizedDescription(nameof(UI.Language_kal))]
kal,
[LocalizedDescription(nameof(UI.Language_kam))]
kam,
[LocalizedDescription(nameof(UI.Language_kan))]
kan,
[LocalizedDescription(nameof(UI.Language_kar))]
kar,
[LocalizedDescription(nameof(UI.Language_kas))]
kas,
[LocalizedDescription(nameof(UI.Language_kau))]
kau,
[LocalizedDescription(nameof(UI.Language_kaw))]
kaw,
[LocalizedDescription(nameof(UI.Language_kaz))]
kaz,
[LocalizedDescription(nameof(UI.Language_kbd))]
kbd,
[LocalizedDescription(nameof(UI.Language_kha))]
kha,
[LocalizedDescription(nameof(UI.Language_khi))]
khi,
[LocalizedDescription(nameof(UI.Language_khm))]
khm,
[LocalizedDescription(nameof(UI.Language_kho))]
kho,
[LocalizedDescription(nameof(UI.Language_kik))]
kik,
[LocalizedDescription(nameof(UI.Language_kin))]
kin,
[LocalizedDescription(nameof(UI.Language_kir))]
kir,
[LocalizedDescription(nameof(UI.Language_kmb))]
kmb,
[LocalizedDescription(nameof(UI.Language_kok))]
kok,
[LocalizedDescription(nameof(UI.Language_kom))]
kom,
[LocalizedDescription(nameof(UI.Language_kon))]
kon,
[LocalizedDescription(nameof(UI.Language_kor))]
kor,
[LocalizedDescription(nameof(UI.Language_kos))]
kos,
[LocalizedDescription(nameof(UI.Language_kpe))]
kpe,
[LocalizedDescription(nameof(UI.Language_krc))]
krc,
[LocalizedDescription(nameof(UI.Language_krl))]
krl,
[LocalizedDescription(nameof(UI.Language_kro))]
kro,
[LocalizedDescription(nameof(UI.Language_kru))]
kru,
[LocalizedDescription(nameof(UI.Language_kua))]
kua,
[LocalizedDescription(nameof(UI.Language_kum))]
kum,
[LocalizedDescription(nameof(UI.Language_kur))]
kur,
[LocalizedDescription(nameof(UI.Language_kut))]
kut,
[LocalizedDescription(nameof(UI.Language_lad))]
lad,
[LocalizedDescription(nameof(UI.Language_lah))]
lah,
[LocalizedDescription(nameof(UI.Language_lam))]
lam,
[LocalizedDescription(nameof(UI.Language_lao))]
lao,
[LocalizedDescription(nameof(UI.Language_lat))]
lat,
[LocalizedDescription(nameof(UI.Language_lav))]
lav,
[LocalizedDescription(nameof(UI.Language_lez))]
lez,
[LocalizedDescription(nameof(UI.Language_lim))]
lim,
[LocalizedDescription(nameof(UI.Language_lin))]
lin,
[LocalizedDescription(nameof(UI.Language_lit))]
lit,
[LocalizedDescription(nameof(UI.Language_lol))]
lol,
[LocalizedDescription(nameof(UI.Language_loz))]
loz,
[LocalizedDescription(nameof(UI.Language_ltz))]
ltz,
[LocalizedDescription(nameof(UI.Language_lua))]
lua,
[LocalizedDescription(nameof(UI.Language_lub))]
lub,
[LocalizedDescription(nameof(UI.Language_lug))]
lug,
[LocalizedDescription(nameof(UI.Language_lui))]
lui,
[LocalizedDescription(nameof(UI.Language_lun))]
lun,
[LocalizedDescription(nameof(UI.Language_luo))]
luo,
[LocalizedDescription(nameof(UI.Language_lus))]
lus,
[LocalizedDescription(nameof(UI.Language_mac))]
mac,
[LocalizedDescription(nameof(UI.Language_mad))]
mad,
[LocalizedDescription(nameof(UI.Language_mag))]
mag,
[LocalizedDescription(nameof(UI.Language_mah))]
mah,
[LocalizedDescription(nameof(UI.Language_mai))]
mai,
[LocalizedDescription(nameof(UI.Language_mak))]
mak,
[LocalizedDescription(nameof(UI.Language_mal))]
mal,
[LocalizedDescription(nameof(UI.Language_man))]
man,
[LocalizedDescription(nameof(UI.Language_mao))]
mao,
[LocalizedDescription(nameof(UI.Language_map))]
map,
[LocalizedDescription(nameof(UI.Language_mar))]
mar,
[LocalizedDescription(nameof(UI.Language_mas))]
mas,
[LocalizedDescription(nameof(UI.Language_may))]
may,
[LocalizedDescription(nameof(UI.Language_mdf))]
mdf,
[LocalizedDescription(nameof(UI.Language_mdr))]
mdr,
[LocalizedDescription(nameof(UI.Language_men))]
men,
[LocalizedDescription(nameof(UI.Language_mga))]
mga,
[LocalizedDescription(nameof(UI.Language_mic))]
mic,
[LocalizedDescription(nameof(UI.Language_min))]
min,
[LocalizedDescription(nameof(UI.Language_mis))]
mis,
[LocalizedDescription(nameof(UI.Language_mkh))]
mkh,
[LocalizedDescription(nameof(UI.Language_mlg))]
mlg,
[LocalizedDescription(nameof(UI.Language_mlt))]
mlt,
[LocalizedDescription(nameof(UI.Language_mnc))]
mnc,
[LocalizedDescription(nameof(UI.Language_mni))]
mni,
[LocalizedDescription(nameof(UI.Language_mno))]
mno,
[LocalizedDescription(nameof(UI.Language_moh))]
moh,
[LocalizedDescription(nameof(UI.Language_mon))]
mon,
[LocalizedDescription(nameof(UI.Language_mos))]
mos,
[LocalizedDescription(nameof(UI.Language_mul))]
mul,
[LocalizedDescription(nameof(UI.Language_mun))]
mun,
[LocalizedDescription(nameof(UI.Language_mus))]
mus,
[LocalizedDescription(nameof(UI.Language_mwl))]
mwl,
[LocalizedDescription(nameof(UI.Language_mwr))]
mwr,
[LocalizedDescription(nameof(UI.Language_myn))]
myn,
[LocalizedDescription(nameof(UI.Language_myv))]
myv,
[LocalizedDescription(nameof(UI.Language_nah))]
nah,
[LocalizedDescription(nameof(UI.Language_nai))]
nai,
[LocalizedDescription(nameof(UI.Language_nap))]
nap,
[LocalizedDescription(nameof(UI.Language_nau))]
nau,
[LocalizedDescription(nameof(UI.Language_nav))]
nav,
[LocalizedDescription(nameof(UI.Language_nbl))]
nbl,
[LocalizedDescription(nameof(UI.Language_nde))]
nde,
[LocalizedDescription(nameof(UI.Language_ndo))]
ndo,
[LocalizedDescription(nameof(UI.Language_nds))]
nds,
[LocalizedDescription(nameof(UI.Language_nep))]
nep,
[LocalizedDescription(nameof(UI.Language_new))]
@new,
[LocalizedDescription(nameof(UI.Language_nia))]
nia,
[LocalizedDescription(nameof(UI.Language_nic))]
nic,
[LocalizedDescription(nameof(UI.Language_niu))]
niu,
[LocalizedDescription(nameof(UI.Language_nno))]
nno,
[LocalizedDescription(nameof(UI.Language_nob))]
nob,
[LocalizedDescription(nameof(UI.Language_nog))]
nog,
[LocalizedDescription(nameof(UI.Language_non))]
non,
[LocalizedDescription(nameof(UI.Language_nor))]
nor,
[LocalizedDescription(nameof(UI.Language_nqo))]
nqo,
[LocalizedDescription(nameof(UI.Language_nso))]
nso,
[LocalizedDescription(nameof(UI.Language_nub))]
nub,
[LocalizedDescription(nameof(UI.Language_nwc))]
nwc,
[LocalizedDescription(nameof(UI.Language_nya))]
nya,
[LocalizedDescription(nameof(UI.Language_nym))]
nym,
[LocalizedDescription(nameof(UI.Language_nyn))]
nyn,
[LocalizedDescription(nameof(UI.Language_nyo))]
nyo,
[LocalizedDescription(nameof(UI.Language_nzi))]
nzi,
[LocalizedDescription(nameof(UI.Language_oci))]
oci,
[LocalizedDescription(nameof(UI.Language_oji))]
oji,
[LocalizedDescription(nameof(UI.Language_ori))]
ori,
[LocalizedDescription(nameof(UI.Language_orm))]
orm,
[LocalizedDescription(nameof(UI.Language_osa))]
osa,
[LocalizedDescription(nameof(UI.Language_oss))]
oss,
[LocalizedDescription(nameof(UI.Language_ota))]
ota,
[LocalizedDescription(nameof(UI.Language_oto))]
oto,
[LocalizedDescription(nameof(UI.Language_paa))]
paa,
[LocalizedDescription(nameof(UI.Language_pag))]
pag,
[LocalizedDescription(nameof(UI.Language_pal))]
pal,
[LocalizedDescription(nameof(UI.Language_pam))]
pam,
[LocalizedDescription(nameof(UI.Language_pan))]
pan,
[LocalizedDescription(nameof(UI.Language_pap))]
pap,
[LocalizedDescription(nameof(UI.Language_pau))]
pau,
[LocalizedDescription(nameof(UI.Language_peo))]
peo,
[LocalizedDescription(nameof(UI.Language_per))]
per,
[LocalizedDescription(nameof(UI.Language_phi))]
phi,
[LocalizedDescription(nameof(UI.Language_phn))]
phn,
[LocalizedDescription(nameof(UI.Language_pli))]
pli,
[LocalizedDescription(nameof(UI.Language_pol))]
pol,
[LocalizedDescription(nameof(UI.Language_pon))]
pon,
[LocalizedDescription(nameof(UI.Language_por))]
por,
[LocalizedDescription(nameof(UI.Language_pra))]
pra,
[LocalizedDescription(nameof(UI.Language_pro))]
pro,
[LocalizedDescription(nameof(UI.Language_pus))]
pus,
[JsonPropertyName("qaa-qtz")]
[LocalizedDescription(nameof(UI.Language_qaaqtz))]
qaaqtz,
[LocalizedDescription(nameof(UI.Language_que))]
que,
[LocalizedDescription(nameof(UI.Language_raj))]
raj,
[LocalizedDescription(nameof(UI.Language_rap))]
rap,
[LocalizedDescription(nameof(UI.Language_rar))]
rar,
[LocalizedDescription(nameof(UI.Language_roa))]
roa,
[LocalizedDescription(nameof(UI.Language_roh))]
roh,
[LocalizedDescription(nameof(UI.Language_rom))]
rom,
[LocalizedDescription(nameof(UI.Language_rum))]
rum,
[LocalizedDescription(nameof(UI.Language_run))]
run,
[LocalizedDescription(nameof(UI.Language_rup))]
rup,
[LocalizedDescription(nameof(UI.Language_rus))]
rus,
[LocalizedDescription(nameof(UI.Language_sad))]
sad,
[LocalizedDescription(nameof(UI.Language_sag))]
sag,
[LocalizedDescription(nameof(UI.Language_sah))]
sah,
[LocalizedDescription(nameof(UI.Language_sai))]
sai,
[LocalizedDescription(nameof(UI.Language_sal))]
sal,
[LocalizedDescription(nameof(UI.Language_sam))]
sam,
[LocalizedDescription(nameof(UI.Language_san))]
san,
[LocalizedDescription(nameof(UI.Language_sas))]
sas,
[LocalizedDescription(nameof(UI.Language_sat))]
sat,
[LocalizedDescription(nameof(UI.Language_scn))]
scn,
[LocalizedDescription(nameof(UI.Language_sco))]
sco,
[LocalizedDescription(nameof(UI.Language_sel))]
sel,
[LocalizedDescription(nameof(UI.Language_sem))]
sem,
[LocalizedDescription(nameof(UI.Language_sga))]
sga,
[LocalizedDescription(nameof(UI.Language_sgn))]
sgn,
[LocalizedDescription(nameof(UI.Language_shn))]
shn,
[LocalizedDescription(nameof(UI.Language_sid))]
sid,
[LocalizedDescription(nameof(UI.Language_sin))]
sin,
[LocalizedDescription(nameof(UI.Language_sio))]
sio,
[LocalizedDescription(nameof(UI.Language_sit))]
sit,
[LocalizedDescription(nameof(UI.Language_sla))]
sla,
[LocalizedDescription(nameof(UI.Language_slo))]
slo,
[LocalizedDescription(nameof(UI.Language_slv))]
slv,
[LocalizedDescription(nameof(UI.Language_sma))]
sma,
[LocalizedDescription(nameof(UI.Language_sme))]
sme,
[LocalizedDescription(nameof(UI.Language_smi))]
smi,
[LocalizedDescription(nameof(UI.Language_smj))]
smj,
[LocalizedDescription(nameof(UI.Language_smn))]
smn,
[LocalizedDescription(nameof(UI.Language_smo))]
smo,
[LocalizedDescription(nameof(UI.Language_sms))]
sms,
[LocalizedDescription(nameof(UI.Language_sna))]
sna,
[LocalizedDescription(nameof(UI.Language_snd))]
snd,
[LocalizedDescription(nameof(UI.Language_snk))]
snk,
[LocalizedDescription(nameof(UI.Language_sog))]
sog,
[LocalizedDescription(nameof(UI.Language_som))]
som,
[LocalizedDescription(nameof(UI.Language_son))]
son,
[LocalizedDescription(nameof(UI.Language_sot))]
sot,
[LocalizedDescription(nameof(UI.Language_spa))]
spa,
[LocalizedDescription(nameof(UI.Language_srd))]
srd,
[LocalizedDescription(nameof(UI.Language_srn))]
srn,
[LocalizedDescription(nameof(UI.Language_srp))]
srp,
[LocalizedDescription(nameof(UI.Language_srr))]
srr,
[LocalizedDescription(nameof(UI.Language_ssa))]
ssa,
[LocalizedDescription(nameof(UI.Language_ssw))]
ssw,
[LocalizedDescription(nameof(UI.Language_suk))]
suk,
[LocalizedDescription(nameof(UI.Language_sun))]
sun,
[LocalizedDescription(nameof(UI.Language_sus))]
sus,
[LocalizedDescription(nameof(UI.Language_sux))]
sux,
[LocalizedDescription(nameof(UI.Language_swa))]
swa,
[LocalizedDescription(nameof(UI.Language_swe))]
swe,
[LocalizedDescription(nameof(UI.Language_syc))]
syc,
[LocalizedDescription(nameof(UI.Language_syr))]
syr,
[LocalizedDescription(nameof(UI.Language_tah))]
tah,
[LocalizedDescription(nameof(UI.Language_tai))]
tai,
[LocalizedDescription(nameof(UI.Language_tam))]
tam,
[LocalizedDescription(nameof(UI.Language_tat))]
tat,
[LocalizedDescription(nameof(UI.Language_tel))]
tel,
[LocalizedDescription(nameof(UI.Language_tem))]
tem,
[LocalizedDescription(nameof(UI.Language_ter))]
ter,
[LocalizedDescription(nameof(UI.Language_tet))]
tet,
[LocalizedDescription(nameof(UI.Language_tgk))]
tgk,
[LocalizedDescription(nameof(UI.Language_tgl))]
tgl,
[LocalizedDescription(nameof(UI.Language_tha))]
tha,
[LocalizedDescription(nameof(UI.Language_tib))]
tib,
[LocalizedDescription(nameof(UI.Language_tig))]
tig,
[LocalizedDescription(nameof(UI.Language_tir))]
tir,
[LocalizedDescription(nameof(UI.Language_tiv))]
tiv,
[LocalizedDescription(nameof(UI.Language_tkl))]
tkl,
[LocalizedDescription(nameof(UI.Language_tlh))]
tlh,
[LocalizedDescription(nameof(UI.Language_tli))]
tli,
[LocalizedDescription(nameof(UI.Language_tmh))]
tmh,
[LocalizedDescription(nameof(UI.Language_tog))]
tog,
[LocalizedDescription(nameof(UI.Language_ton))]
ton,
[LocalizedDescription(nameof(UI.Language_tpi))]
tpi,
[LocalizedDescription(nameof(UI.Language_tsi))]
tsi,
[LocalizedDescription(nameof(UI.Language_tsn))]
tsn,
[LocalizedDescription(nameof(UI.Language_tso))]
tso,
[LocalizedDescription(nameof(UI.Language_tuk))]
tuk,
[LocalizedDescription(nameof(UI.Language_tum))]
tum,
[LocalizedDescription(nameof(UI.Language_tup))]
tup,
[LocalizedDescription(nameof(UI.Language_tur))]
tur,
[LocalizedDescription(nameof(UI.Language_tut))]
tut,
[LocalizedDescription(nameof(UI.Language_tvl))]
tvl,
[LocalizedDescription(nameof(UI.Language_twi))]
twi,
[LocalizedDescription(nameof(UI.Language_tyv))]
tyv,
[LocalizedDescription(nameof(UI.Language_udm))]
udm,
[LocalizedDescription(nameof(UI.Language_uga))]
uga,
[LocalizedDescription(nameof(UI.Language_uig))]
uig,
[LocalizedDescription(nameof(UI.Language_ukr))]
ukr,
[LocalizedDescription(nameof(UI.Language_umb))]
umb,
[LocalizedDescription(nameof(UI.Language_und))]
und,
[LocalizedDescription(nameof(UI.Language_urd))]
urd,
[LocalizedDescription(nameof(UI.Language_uzb))]
uzb,
[LocalizedDescription(nameof(UI.Language_vai))]
vai,
[LocalizedDescription(nameof(UI.Language_ven))]
ven,
[LocalizedDescription(nameof(UI.Language_vie))]
vie,
[LocalizedDescription(nameof(UI.Language_vol))]
vol,
[LocalizedDescription(nameof(UI.Language_vot))]
vot,
[LocalizedDescription(nameof(UI.Language_wak))]
wak,
[LocalizedDescription(nameof(UI.Language_wal))]
wal,
[LocalizedDescription(nameof(UI.Language_war))]
war,
[LocalizedDescription(nameof(UI.Language_was))]
was,
[LocalizedDescription(nameof(UI.Language_wel))]
wel,
[LocalizedDescription(nameof(UI.Language_wen))]
wen,
[LocalizedDescription(nameof(UI.Language_wln))]
wln,
[LocalizedDescription(nameof(UI.Language_wol))]
wol,
[LocalizedDescription(nameof(UI.Language_xal))]
xal,
[LocalizedDescription(nameof(UI.Language_xho))]
xho,
[LocalizedDescription(nameof(UI.Language_yao))]
yao,
[LocalizedDescription(nameof(UI.Language_yap))]
yap,
[LocalizedDescription(nameof(UI.Language_yid))]
yid,
[LocalizedDescription(nameof(UI.Language_yor))]
yor,
[LocalizedDescription(nameof(UI.Language_ypk))]
ypk,
[LocalizedDescription(nameof(UI.Language_zap))]
zap,
[LocalizedDescription(nameof(UI.Language_zbl))]
zbl,
[LocalizedDescription(nameof(UI.Language_zen))]
zen,
[LocalizedDescription(nameof(UI.Language_zgh))]
zgh,
[LocalizedDescription(nameof(UI.Language_zha))]
zha,
[LocalizedDescription(nameof(UI.Language_znd))]
znd,
[LocalizedDescription(nameof(UI.Language_zul))]
zul,
[LocalizedDescription(nameof(UI.Language_zun))]
zun,
[LocalizedDescription(nameof(UI.Language_zxx))]
zxx,
[LocalizedDescription(nameof(UI.Language_zza))]
zza
}
}

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global
@@ -41,6 +41,7 @@
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using Aaru.Localization;
namespace Aaru.CommonTypes.AaruMetadata;
@@ -48,16 +49,28 @@ namespace Aaru.CommonTypes.AaruMetadata;
[SuppressMessage("ReSharper", "InconsistentNaming")]
public enum ReleaseType
{
[LocalizedDescription(nameof(UI.ReleaseType_Retail))]
Retail,
[LocalizedDescription(nameof(UI.ReleaseType_Bundle))]
Bundle,
[LocalizedDescription(nameof(UI.ReleaseType_Coverdisc))]
Coverdisc,
[LocalizedDescription(nameof(UI.ReleaseType_Subscription))]
Subscription,
[LocalizedDescription(nameof(UI.ReleaseType_Demo))]
Demo,
[LocalizedDescription(nameof(UI.ReleaseType_OEM))]
OEM,
[LocalizedDescription(nameof(UI.ReleaseType_Shareware))]
Shareware,
[LocalizedDescription(nameof(UI.ReleaseType_FOSS))]
FOSS,
[LocalizedDescription(nameof(UI.ReleaseType_Adware))]
Adware,
[LocalizedDescription(nameof(UI.ReleaseType_Donationware))]
Donationware,
[LocalizedDescription(nameof(UI.ReleaseType_DigitalDownload))]
DigitalDownload,
[LocalizedDescription(nameof(UI.ReleaseType_SaaS))]
SaaS
}

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
using System;

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global

View File

@@ -33,7 +33,7 @@
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2025 Natalia Portillo
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/
// ReSharper disable UnusedMember.Global

Some files were not shown because too many files have changed in this diff Show More