Commit Graph
181 Commits
Author SHA1 Message Date
Sucukdeluxe 378b5e2a9e fix: reconcile native extraction outputs
Use the validated native archive plan to recognize exact files after successful WinRAR and 7-Zip runs even when progress output contains no parseable completion lines. Preserve extractor-specific rename targets across subst mappings, keep 7-Zip directory paths when RAR flat mode is active, and reject colliding RAR flat targets before extraction.
2026-08-22 21:11:58 +02:00
Sucukdeluxe 2f031dc350 fix(collector): restore direct DLC drag imports
Resolve dropped file paths through Electron webUtils, send dragged DLC containers directly to Downloads, and keep explicit collector imports bounded so metadata enrichment cannot leave the interface permanently busy.
2026-08-22 20:17:58 +02:00
Sucukdeluxe 340d6597cc test(window): cover dark native theme in main process
Extend the Electron main-process mock with nativeTheme and verify startup forces the dark title-bar contract.
2026-08-22 19:51:44 +02:00
Sucukdeluxe 50673717aa fix(window): force dark native title bar
Apply Electron nativeTheme dark mode before creating the main window so the Windows title bar remains dark across local, server, and RDP user profiles. Add focused coverage for the native theme contract.
2026-08-22 19:27:33 +02:00
Sucukdeluxe 0d73f7e074 fix(downloads): restore hardened output scope release gates
Detect stale or foreign files in package-specific extraction directories before starting fresh work while excluding current and atomic ownership markers.

Keep recursive directory inspection confined to the start-conflict boundary and let archive cleanup prune empty package directories directly.

Register German-audio, auto-rename, collection, hybrid, and legacy fixtures through real complete PackageOutputScope records with current method signatures.

Verify plain stops only persist after active work drains, while update-restart parking keeps both its immediate checkpoint and final queued state.
2026-08-22 18:24:50 +02:00
Sucukdeluxe d4f8166c86 fix(extraction): isolate explicit jobs and run cancellation
Use validated explicit archive paths without recursively discovering a shared package root. Route selective post-processing stops through the coordinator run owner so another generation of the same package remains active, while preserving unfiltered package cancellation behavior.
2026-08-22 17:40:19 +02:00
Sucukdeluxe 522f53d787 fix(extraction): close final scope integration gaps
Ignore late JVM output events after abort or timeout until the real child close reconciles opened files. Restrict deferred archive cleanup to package-owned item paths so shared download roots retain foreign archives while package-local empty directory cleanup still works. Update deferred ownership and output-scope fixtures to the coordinator contract.
2026-08-22 17:29:03 +02:00
Sucukdeluxe 3e18ec57ea fix(extraction): harden daemon termination and drain deadlines
Prevent aborted daemon waiters and pre-aborted requests from spawning one-shot JVM children. Ignore buffered request completion after abort or timeout so permits and disk leases remain owned until real daemon close. Keep incomplete shutdown operations and leases alive past the shared deadline while returning explicit drain status, and make multipart reservations fail closed whenever any deduplicated member size is unknown. Add real daemon boot, busy, abort, timeout, DONE race, deadline, and reservation regression coverage.
2026-08-22 17:10:01 +02:00
Sucukdeluxe 648e7fed3a fix(extraction): coordinate jobs leases and shutdown
Route full, hybrid, top-level nested, and deferred nested archive work through the single global coordinator and remove the package-level extraction slot layer. Build each operation reservation from deduplicated multipart members, retain it through real child close and package output-scope finalization, and preserve package/run cancellation ownership while clearing queued waiters. Delay native and JVM abort/timeout completion until child close, retain daemon requests until exit, drain extraction before session persistence, and stop the daemon last. Add focused integration, process lifecycle, lease, and shutdown ordering regression coverage.
2026-08-22 16:54:41 +02:00
Sucukdeluxe 36eaafd5b9 feat(extraction): add global archive coordinator
Add a fair operation-aware queue that owns the global archive child limit across packages and extraction modes. Support live resizing, immutable operation identity, selective run and package cancellation, ghost-waiter cleanup, idempotent permits, deduplicated multipart disk reservations, held operation leases, and deadline-bounded shutdown draining. Cover peak concurrency, fairness, resize, cancellation, multi-batch drain renewal, terminal lease paths, multipart accounting, and shutdown ordering with focused RED-to-GREEN tests.
2026-08-22 16:36:12 +02:00
Sucukdeluxe 87bfa6576c fix: validate raw archive targets before conflicts 2026-08-22 16:22:43 +02:00
Sucukdeluxe b5f57e7a29 fix: reject colliding archive targets before extraction
Build a typed normalized target plan for internal ZIP, native list preflight, Zip4j, and SevenZipJBinding before any output directory or file is mutated. Reject file-directory aliases, file ancestors, case-insensitive aliases, and duplicate file targets while allowing identical directory declarations. Preserve linear archive planning and ship the rebuilt Java runtime classes.
2026-08-22 16:07:35 +02:00
Sucukdeluxe 1859aaf539 fix: preflight complete archives before mutation
Plan and validate every internal ZIP, Zip4j, and SevenZipJBinding entry and final conflict target before any archive output mutates the filesystem. Preserve raw RAR list entry whitespace for strict validation and keep any non-matching package owner marker immutable while direct scoped outputs continue without marker reissuance.
2026-08-22 15:53:33 +02:00
Sucukdeluxe 6724b3605c fix: close Windows extraction namespace gaps
Reject alternate data streams, reserved Win32 device names, and trailing-dot or trailing-space aliases before internal ZIP, JVM, or native extraction writes. Preflight native archive entry lists, reconcile opened JVM outputs to partial or removed state on abnormal results, and replace hardlink-based owner markers with portable exclusive reservation plus atomic replacement while allowing direct scoped extraction to continue when marker persistence is unavailable.
2026-08-22 15:40:59 +02:00
Sucukdeluxe 11d63dd2be fix: validate extraction ownership before writes
Reject symlink and reparse boundaries before internal ZIP or JVM outputs are opened, track opened, committed, partial, removed output lifecycle events, and convert output callback failures into controlled extractor failures without poisoning the JVM daemon. Gate legacy recovery behind an atomically created package-generation owner marker and keep unmarked reused or shared directories fail closed. Parse native RAR output from strictly verified locale-independent candidates while retaining ambiguous rename rejection.
2026-08-22 15:24:19 +02:00
Sucukdeluxe 58237bed0c fix: scope extraction follow-up work
Remove .rd-output staging and merge handling, parse validated native extractor output, and drive nested extraction, rename, audio, cleanup, residual handling, and library collection from package-owned output records. Preserve provenance migration, package pruning, and run-owned waiter isolation while allowing one bounded legacy adoption scan only for provably exclusive package roots.
2026-08-22 13:54:25 +02:00
Sucukdeluxe 9049489e87 feat: track direct extraction outputs
Replace package staging assumptions with validated per-generation output records for internal ZIP and both JVM backends. Persist resume v2 using relative archive identities, complete member fingerprints, and concrete verified outputs so basename collisions, changed members, missing outputs, and unknown versions fail closed.
2026-08-22 13:37:19 +02:00
Sucukdeluxe afa7da11da fix: harden package post-processing provenance
Version package-owned output counts so unversioned global legacy values cannot remain authoritative after session load.

Capture extracted outputs through same-volume package staging, preserve overwrite, skip, and rename conflicts, retain partial abort output deterministically, and eliminate per-package full scans of shared roots while keeping extraction work parallel.

Carry normalized archive path provenance, prune explicitly deleted package generations without dropping package_done run evidence, and transfer run-owned post-process slots without releasing foreign waiters or exceeding maxParallelExtract.
2026-08-22 13:02:27 +02:00
Sucukdeluxe 7a052e995c fix: serialize provenance capture for shared extract roots
Protect each shared extraction target with a path-scoped asynchronous handoff so concurrent packages cannot claim each other's files between provenance snapshots. Independent extract directories remain parallel, and the handoff is released on both success and failure.

Add a concurrent two-package regression proving delayed entry and one attributed output per package.
2026-08-22 12:34:42 +02:00
Sucukdeluxe 36cb60fee9 fix: harden archive metrics and result retention
Derive archive operation identity from item-path provenance so equal basenames in different directories remain distinct, and keep unknown part counts at zero when no item provenance exists.

Prune finalized results only after their generation is no longer current or referenced, and add 80-package digest and individual delivery coverage to prove deterministic paging without event loss.
2026-08-22 12:31:44 +02:00
Sucukdeluxe a266610c31 fix: scope extracted output counts to package provenance
Snapshot non-archive outputs around each main, hybrid, and nested extraction and attribute only files created or changed by that package. Persist deduplicated hashed provenance keys so shared extract directories and restarts cannot count unrelated package outputs.

Cover startup extraction in a shared target containing an existing foreign file and validate persisted provenance normalization.
2026-08-22 12:27:59 +02:00
Sucukdeluxe 91b9596d6f fix: retain complete package failure telemetry
Include immediately cleaned successful files and byte aggregates when finalizing package results so mixed cleanup states remain partial instead of failed.

Carry additive download, offline, extraction, remux, and cleanup failure counters alongside the prioritized display phase, aggregate them into run results, and expose cleanup failures in the final summary.
2026-08-22 12:24:18 +02:00
Sucukdeluxe c634b70396 fix: preserve postprocessing run ownership across stops
Bind main, deferred, and hybrid postprocessing controllers to the run context that owns their package generation. Abort only the stopped run and unowned work so a later run cannot cancel deferred completion for an earlier run.

Treat stop and shutdown aborts as lifecycle cancellation instead of cleanup failure and cover the real deferred handoff through package, run, history, and cleanup results.
2026-08-22 12:22:21 +02:00
Sucukdeluxe ae2691319d fix: serialize every download start through lifecycle
Route full, package, and item starts through a shared typed start request lifecycle. Preserve targeted scopes while a stop drains, publish pending-start state consistently, and dispatch the accepted request only after the old work has settled.

Add package and item regression coverage and update the notification lifecycle assertion to the pending/drain contract.
2026-08-22 12:20:33 +02:00
Sucukdeluxe 7f3030ecc5 Improve contextual help and download filter grouping
Open contextual help from wrapper hover and focus, close it only after pointer or focus exits the shared trigger-popover region, and make clicks open-only. Remove the standalone package title and present the existing download filters as the first compact neutral sidebar group without changing filter behavior. Extend the visual driver and manifest with hover, leave, focus, blur, internal-focus, and real headless Chromium regression coverage.
2026-08-22 11:46:56 +02:00
Sucukdeluxe 9cdd0310a5 Harden disclosure visuals and download toolbar tail
Replace the synthetic disclosure interpolation test with a real Chrome headless run against the existing visual harness, sampling rendered height, transform, opacity, and adjacent row geometry during collapse and expansion.

Group the global downloads disclosure action in a responsive toolbar tail, remove the horizontal toolbar scroll path, and keep the action pinned within the supported 1120 pixel layout while the schedule is open.

Disable the global disclosure action for a truly empty queue and cover the empty model plus responsive DOM boundaries.
2026-08-22 11:32:23 +02:00
Sucukdeluxe a101bd0bed Fix disclosure fading and global package toggles
Fade the shared virtual item group from transparent to opaque while expanding and reverse the opacity while collapsing, preserving the clipping row as the geometry owner.

Move the downloads package toggle to the far toolbar edge and add a collector toolbar toggle backed by raw unfiltered package IDs.

Cover opacity endpoints, intermediate frame geometry, toolbar ordering, and filter-independent collector toggle semantics.
2026-08-22 11:18:05 +02:00
Sucukdeluxe f57b513625 Align provider selection and abort observation
Share one pure provider selection plan between real unrestrict routing and cooldown projection, including direct 1Fichier and DDownload paths, disabled Mega aliases, and the secondary-provider exception used when Real-Debrid is cooling down. Attach terminal observers to raw serialized web jobs before evaluating already-aborted signals so late rejections stay handled while the queue remains available. Add RED-to-GREEN regressions for each provider-selection counterexample and pre-aborted Real-Debrid, AllDebrid, and BestDebrid jobs.
2026-08-22 11:05:42 +02:00
Sucukdeluxe ab31d04410 Fix lifecycle review findings
Advance each serialized web-provider queue when an aborted caller is released while retaining terminal observation of the underlying request. Preserve an accepted pending start across repeated stop requests and dispatch it exactly once after drain. Derive provider retry deadlines from eligible queued items, configured fallback chains, enabled accounts and keys, and matching provider or hoster cooldowns. Add RED-to-GREEN coverage for queue progress, repeated stop behavior, disabled accounts, alternative providers, unrelated hosters, and post-processing-only state.
2026-08-22 10:53:00 +02:00
Sucukdeluxe ad29239661 Complete provider waits and lifecycle visibility
Release aborted Real-Debrid, AllDebrid, and BestDebrid web callers even when underlying requests ignore cancellation while retaining terminal rejection observers. Publish provider cooldown deadlines and emit a fresh idle snapshot at the earliest expiry. Abort and visibly drain post-processing before dispatching one pending restart. Surface lifecycle phase, reason, retry countdown, and remaining work in the download controls. Add focused regressions for provider abort races, cooldown expiry, post-processing drain, pending start visibility, and the updated rapid stop contract.
2026-08-22 10:39:07 +02:00
Sucukdeluxe 1f97ce8b42 Harden download stop and restart lifecycle
Publish an explicit lifecycle snapshot with active download and post-processing counts. Guard asynchronous start recovery with a dedicated generation so a stop cannot revive an invalidated run. Keep starts requested during stopping pending until old work drains, then dispatch the accepted request once. Protect active task ownership and post-processing drain cleanup from stale finalizers. Cover recovery invalidation, pending restart dispatch, and late task cleanup with focused regression tests.
2026-08-22 10:26:43 +02:00
Sucukdeluxe 2e94484274 Validate daily schedule start times
Disable schedule activation until the local time input matches a strict HH:MM value.

Keep a defensive activation guard that surfaces a localized validation error and skips persistence when invoked with invalid state.

Add red-green coverage for empty, malformed, out-of-range hour, and out-of-range minute values.
2026-08-22 10:12:25 +02:00
Sucukdeluxe 30bedd17dd Add recurring daily schedule controls
Replace the one-time renderer schedule form with recurring local time and start-day settings while preserving legacy schedule visibility.

Keep the toolbar slot mounted and inaccessible while closed, animate width, opacity, and horizontal position through the global motion preference, and add localized labels.

Surface activation and cancellation failures, reconcile the authoritative snapshot after failed writes, and cover the behavior with focused red-green tests.
2026-08-22 10:02:29 +02:00
Sucukdeluxe 0ca00149eb fix(scheduler): harden daily start reconciliation
Preserve legacy one-time schedules across internal account state saves and clear them only for explicit renderer daily-rule updates.

Enforce monotone handled and pending calendar receipts across backward local-date changes, invalidate late in-flight start results on shutdown, and align queue eligibility with enabled non-cancelled packages.

Replace the in-memory restart assertion with real settings persistence and add RED/GREEN regression coverage for every reviewed behavior.
2026-08-22 09:50:37 +02:00
Sucukdeluxe 4eb95c92b9 feat(scheduler): persist recurring daily starts
Add a local-calendar daily start scheduler with pending receipts, per-day deduplication, DST-safe target calculation, missed-day recovery, and retryable account/start failure outcomes.

Persist and validate the daily rule, expose its next target to the renderer, preserve legacy one-time schedules until a daily rule is saved, and gate boot auto-resume on recorded active-run evidence.

Wire boot, settings, account, suspend, resume, interval, and shutdown lifecycle handling with focused RED/GREEN coverage for calendar, persistence, renderer, and controller boundaries.
2026-08-22 09:36:45 +02:00
Sucukdeluxe d7384c34d1 fix(notifications): preserve in-flight outbox events
Reserve the actively delivered outbox event while the external sender is pending so concurrent persistence cannot evict it through expiry or capacity enforcement. Apply the delivery outcome under the exclusive chain before normal cleanup resumes, preserving retry state, delivery acknowledgements, and cooldown timing without duplicate sends. Add deterministic concurrency regressions for expiry-success and capacity-failure races.
2026-08-22 09:09:54 +02:00
Sucukdeluxe 3ec9085444 fix(notifications): harden final delivery lifecycle
Enforce one shared shutdown deadline while persisting late digests during blocked sends. Start stall cooldowns from serialized delivery acknowledgements, atomically rewrite cleaned legacy outboxes, retain run summaries for 24 hours, and prevent duplicate history or synthetic post-process start times.
2026-08-22 08:58:36 +02:00
Sucukdeluxe 6715f42ff8 docs: document notification center v2 2026-08-22 08:32:54 +02:00
Sucukdeluxe 259fa7094b fix(notifications): redact failure details 2026-08-22 08:17:50 +02:00
Sucukdeluxe 1b8f6fe4b6 fix(support): expose notification health aggregates 2026-08-22 08:00:25 +02:00
Sucukdeluxe 16679e73b5 feat(settings): configure notification center 2026-08-22 07:51:01 +02:00
Sucukdeluxe b3f60eada8 fix(notifications): harden stall monitor lifecycle 2026-08-22 07:37:40 +02:00
Sucukdeluxe 311475c93b feat(notifications): detect persistent download stalls 2026-08-22 07:23:54 +02:00
Sucukdeluxe 4fd30802e5 fix(notifications): harden remaining threshold scope 2026-08-22 06:55:57 +02:00
Sucukdeluxe 2142ae8bf0 feat(notifications): alert on remaining volume 2026-08-22 06:42:13 +02:00
Sucukdeluxe f4c4fb2fac fix(notifications): isolate package result ownership
Prevent active and completed run contexts from being duplicated into standalone tracking during later starts. Scope start-triggered recovery reactivation to enabled, non-excluded packages so foreign stopped generations remain suppressed while explicit retries keep working.
2026-08-22 06:22:44 +02:00
Sucukdeluxe 26ebd931b7 fix(notifications): preserve stopped package suppression 2026-08-22 06:06:27 +02:00
Sucukdeluxe 96966c3eca fix(notifications): harden active run lifecycle tracking 2026-08-22 05:51:08 +02:00
Sucukdeluxe 514d1b1d86 fix(notifications): stabilize active and postprocess-only runs 2026-08-22 05:38:58 +02:00
Sucukdeluxe de97dd4bea fix(notifications): preserve run and package result identity 2026-08-22 05:27:04 +02:00