Skip to content

Releases: NeWbY100/ReScene.NET

v1.2.6

12 May 10:16

Choose a tag to compare

Added

  • SRS Creator gains an optional Main file input. When set, the writer locates each track's signature inside the main file after profiling and records the offset as TrackInfo.MatchOffset, mirroring pyrescene's -c flag. Produces SRS files byte-equivalent to scene tooling output (matching MatchOffset values rather than 0). MKV uses the EBML walker (handles subtitle-style tracks); other containers fall back to a raw byte scan. Tracks the verifier cannot locate keep MatchOffset = 0 and emit a warning instead of failing.
  • SRS Reconstructor and SRS Creator both show live scan progress (percent, MB scanned, throughput, ETA) during their long file-walking steps. The Reconstructor modal stays open through the "Rebuilding" and "Verifying CRC" phases — heading transitions through "Rebuilding Sample" → "Verifying CRC" → close — instead of disappearing while the EBML walker traverses the media file silently.
  • RAR Reconstructor warns via MessageBox when an imported SRR carries no RAR reconstruction information (no RAR file entries, no archived files, and no detected compression method). The user is told to configure options manually instead of being left wondering why nothing auto-populated.
  • RAR Reconstructor surfaces timestamp-preservation failures. When the brute-force input copy cannot apply the source file's mtime/ctime/atime onto the working copy (denied by ACLs, read-only volume, …), a single summary MessageBox lists the affected paths after the run completes, explaining that the produced RAR's File Time (DOS) may not match the original. Per-file warnings continue to flow through the system log in real time.

Fixed

  • MKV sample reconstruction no longer fails with "Unable to locate track signature for track N in the media file" when the SRS was generated from a sample containing subtitle tracks (or any track whose individual Block payloads are smaller than the 256-byte signature). MKVContainerRebuilder.FindSampleStreams now walks the media file's EBML structure and matches each track's signature progressively across non-contiguous Block payloads — mirroring pyrescene's _mkv_block_find, including partial-match reset/re-try as a fresh match start. The previous raw byte scan in SRSRebuilder.FindSignature is preserved as a fallback for non-MKV containers.
  • MKVContainerRebuilder.ExtractMediaAttachments skips past Cluster bodies during its sweep. Attachments never live inside Clusters, and walking every SimpleBlock in a multi-GB MKV turned the attachment pass into a multi-second silent stall.
  • Reconstructor input copies now propagate the source file's LastWriteTime / CreationTime / LastAccessTime onto the destination after the stream copy. Previously the stream copy stamped destinations with "now", so when the SRR carried no archived timestamps WinRAR packed FILE_HEAD.FTIME with the copy time instead of the source's mtime. With SRR-driven timestamps the existing ApplyFileTimestamps step still overrides — same end result. With an empty SRR, the file's correct mtime now flows through to the produced RAR.
  • Compare tab's SRSContainerChunks matcher used to return the first matching node (usually the "Container Structure" parent, whose Data is a List<SRSContainerChunk> rather than a single chunk), leaving the opposite-side Properties panel empty when clicking through to a Cluster / EBML / Segment / etc. node. FindMatchingNode now special-cases the type and matches parent-to-parent and chunk-to-chunk by Label.

Full Changelog: v1.2.5...v1.2.6

v1.2.5

10 May 12:23

Choose a tag to compare

Added

  • RAR Reconstructor patcher gains per-file modification-time rewriting. PatchOptions.FileModifiedTimes maps file names to target DateTimes; the patcher overwrites the matching file header's 4-byte DOS FTIME field and, when LHD_EXTTIME is set and the EXT_TIME mtime nibble carries the present bit, rewrites the sub-second remainder in-place at its existing precision (0–3 bytes), updating the +1s rounding flag for odd-second targets. RAROptions exposes NeedsMtimePatching (true when host-OS patching is enabled and FileTimestamps has entries) and Manager wires the existing RAROptions.FileTimestamps into the patch options. Sidesteps file system / WinRAR precision quirks that prevent the source file's mtime from being faithfully captured into the produced archive.

Fixed

  • RARProcess now registers CodePagesEncodingProvider.Instance before resolving the OEM code page. Without this, Encoding.GetEncoding for non-Unicode code pages (437, 850, 1252, …) throws ArgumentException on .NET Core / .NET 5+ and the OEM-encoding path silently fell back into its catch arm.

Full Changelog: v1.2.4...v1.2.5

v1.2.4

10 May 12:03

Choose a tag to compare

Fixed

  • Compare tab no longer reports two RAR files as identical when only their block payload bytes differ. FileComparer.CompareDetailedBlocks now byte-compares each block's data region (StartOffset + HeaderSize through + DataSize) in 64 KB chunks when both sides supply an IHexDataSource, surfacing a Block Data property difference and marking the affected file/service block as [DIFF] in the structure tree. Previously the comparator only inspected parsed RAR header fields, so two archives with identical metadata (filename, packed size, file CRC32, timestamp) but different compressed payloads — the exact case produced when reconstructing — slipped through as "identical."
  • The status bar can no longer disagree with the hex-view byte diff: when the structural compare finds zero differences but the byte-level hex diff reports differing ranges, the status now reads "Byte-level differences detected in current hex view but no structural differences found." instead of "Files are identical."

Full Changelog: v1.2.3...v1.2.4

v1.2.3

08 May 09:10

Choose a tag to compare

Added

  • Compare tab now overlays a translucent red highlight on bytes that differ between the left and right files inside the currently selected block. The diff is computed asynchronously in 64 KB chunks with progressive UI updates and is cancelled when the selection changes; trailing bytes on the longer side are marked when block lengths differ. Status text shows a Computing byte diff… NN% progress indicator while the scan runs.
  • RAR Reconstructor tab gains Import / Export Config commands that persist all user-editable fields and switches as JSON via the new ReconstructorConfig snapshot type.
  • Brute-Force Progress window gets an Auto-scroll toggle that keeps the version grid pinned to the latest entry as runs complete.

Full Changelog: v1.2.2...v1.2.3

v1.2.2

07 May 13:12

Choose a tag to compare

Full Changelog: v1.2.1...v1.2.2

v1.2.1

05 May 17:06

Choose a tag to compare

What's New

Features

  • Hex view search — Ctrl+F opens an Inspector search bar with hex/ASCII modes, Next/Prev (F3, Shift+F3), live search-as-you-type, "Highlight all matches" overlay, and auto-scroll-into-view
  • SRR integrity verify — Inspector → "Verify integrity" walks the file structure and reports block count, file size, and per-issue severity/offset/message
  • Rename and reorder stored files — Inspector context menu adds Rename… / Move Up / Move Down, with a new dark-themed prompt window for the new name
  • Export properties to JSON — right-click any tree node to export the selected node's properties or the entire tree's structural dump (text, block-type, offset, length, children)
  • Settings window — Help → Settings… persists default app name, default output directory, and recent files limit to %LOCALAPPDATA%\ReScene.NET\settings.json; SRR/SRS Creator tabs seed defaults from these settings
  • ReScene.Cli console project — a new dependency-free rescene CLI (inspect, verify, create, extract) backed by ReScene.Lib
  • Save log to file — every tab with a log (SRR Creator, SRS Creator, RAR Reconstructor, SRS Reconstructor, SRS Restorer) gets a "Save log…" button

Fixes

  • Tree filter no longer leaves empty rows for non-matching parents (collapses the entire row instead of only the label)
  • AppSettings default app name carries version info from FormatUtilities.GetDefaultAppName() so newly created files keep the version suffix
  • Hex search auto-focuses the input when opened with Ctrl+F
  • Hex search expands the visible range to the whole file so a match outside the current block scrolls into view
  • FindBackward no longer hangs the UI thread when the search reaches the start of the file with no valid match
  • Next/Prev now scroll the match into view (auto-scroll path was wired only to SelectionLength changes — fixed for offset-only changes too)
  • All-match highlights clear when the pattern has no matches, when the search box is emptied, and when the search bar is closed
  • Inspector hex search bar receives focus reliably via IsVisibleChanged instead of the unreliable FocusManager.FocusedElement

Refactoring (DRY/SOLID)

  • Move hex search utilities (IHexDataSource, HexSearcher, HexSearchPattern, HexMatchRange) to ReScene.Lib as the new ReScene.Hex namespace
  • ReScene.Cli: inspect prints blocks in document order rather than bucketed by collection; extract preserves relative directory structure and rejects ../rooted segments to prevent path traversal; create wires Ctrl+C through a CancellationTokenSource
  • Suppress empty Children / Properties arrays in JSON export
  • Tighten PromptWindow lifecycle (Esc/Cancel via IsCancel="True" so the bar dismisses from any focused control)
  • Tighten InspectorViewModel member ordering and helper placement

Style

  • Prefer var when the type is obvious from the right-hand side
  • Use expression bodies for one-liner relay-command and helper methods
  • Multi-line XML doc comments on all public members

CI/CD

  • Make CI the only source of truth for app version — .csproj defaults to 0.0.0-dev and the release workflow overrides via -p:Version= from the git tag

ReScene.Lib v1.2.1

v1.2.0

06 Apr 13:23

Choose a tag to compare

What's New

Features

  • Copy from Property Grid — right-click context menu on Inspector and Compare property grids with Copy Name / Copy Value / Copy Name: Value
  • Taskbar Progress — Windows taskbar shows progress during SRR/SRS creation, reconstruction, and sample restoration
  • Remember Window State — window size, position, maximized state, and selected tab persist between sessions
  • Drag-Drop Enhancements — SRR Creator stored files DataGrid accepts file drops; MainWindow accepts .rar files (opens in Inspector)
  • SRR Editing — add/remove stored files from existing SRR files via Inspector tree view context menu
  • Auto-expand Inspector root — tree view root node expands automatically when opening a file
  • About window — now shows version number and improved description

Refactoring (DRY/SOLID)

  • Extract FormatUtilities, FileDialogFilters, ViewModelBase.AppendLogEntry() — eliminate duplication across ViewModels
  • Extract ITempDirectoryService — replace inline temp directory management
  • Extract StreamUtilities, CrcUtility, EbmlReader — shared library utilities
  • Consolidate IsRar5Marker into RARUtils — remove 4 duplicate implementations
  • Extract SignatureScanner, RarVolumeNameComparer, RarVolumeIdentifier from god classes
  • SRSWriter: strategy pattern with 7 container handlers (2,410 → 291 lines, 88% reduction)
  • SRSRebuilder: strategy pattern with 7 container rebuilders (~1,800 → 343 lines, 81% reduction)
  • SRRFile: separate SRRFileParser from data model (1,462 → 607 lines, 58% reduction)
  • Manager: extract FileOperations (2,139 → 1,755 lines)

Style

  • Convert all single-line XML doc comments to multi-line format
  • Add blank lines before XML doc comment blocks
  • Update .editorconfig and CLAUDE.md guidelines

CI/CD

  • GitHub Actions release workflow with auto-versioning from git tags
  • Auto-tag and release ReScene.Lib submodule in sync

Docs

  • Add ISO/IMG support and M2V to README

v1.1.1

06 Apr 09:29

Choose a tag to compare

Full Changelog: v1.1.0...v1.1.1

v1.1.0

29 Mar 03:11

Choose a tag to compare

What's Changed

SRR Creator

  • Auto-include release files — scan for .nfo, .sfv, proof images, .m3u, .cue, .log files
  • Auto-create SRS — create .srs files for samples found in Sample/ subdirectory
  • Vobsub SRR — create nested SRR files for subtitle archives in Subs/ directories
  • Fix release detection — detect fix/patch releases and store main RAR as proof
  • Languages.diz — extract VobSub language metadata from .idx files
  • OSO hashes — compute and store OpenSubtitles hashes for archived files
  • Stored file DataGrid with editable "Stored As" column and Remove All button
  • App name includes version and git hash for both SRR and SRS creators
  • Match pyrescene file ordering (NFO first, main SFV last)
  • Normalize stored file paths to forward slashes

Compare View

  • SRS file comparison with property-level diff highlighting
  • OSO hash tree nodes with properties and hex view selection
  • Stored file and RAR volume hex view selection via ByteRange
  • Parent tree nodes highlighted when children have differences
  • Sections unique to one side marked as different
  • Close buttons to release file handles
  • Swap button centered between panels
  • File path bar aligned with content splitter

SRS Creator

  • Wider app name input with description text
  • App name includes version and git hash

Bug Fixes

  • Integer overflow bounds checks in RAR5HeaderReader, RARPatcher, RARDetailedHeader, SRRWriter

Full Changelog: v1.0.1...v1.1.0

v1.0.1

22 Mar 17:25

Choose a tag to compare

What's Changed

  • Fix: correct IsBusy aggregation — all 6 busy flags now checked consistently, added missing SrsReconstructor.IsRebuilding monitoring
  • Fix: wrap CreatorViewModel and SrsCreatorViewModel OnProgress handlers in Dispatcher.BeginInvoke to prevent cross-thread ObservableCollection access
  • Fix: replace anonymous PropertyChanged lambda with named handler in SampleRestorerViewModel so old entries are unsubscribed on reload
  • Fix: remove unused CancellationToken parameter from IBruteForceService.RunAsync
  • Feat: show version and git commit hash in status bar
  • Chore: update ReScene.Lib submodule to v1.0.1

Full Changelog: v1.0.0...v1.0.1