Commit Graph
98 Commits
Author SHA1 Message Date
Sucukdeluxe d9c66fe20f fix: make automation completion evidence durable
CI / verify (push) Canceled after 0s
Persist successful watched-file uploads in a dedicated fsync-backed ledger before exposing completion to the renderer. Match entries by normalized full path, hoster, size, and modification time so restart reconciliation skips unchanged completed files while changed files and explicit manual retries remain available.

Remove restored queue ghosts from the ledger even when history and user upload logging are unavailable. Preserve per-hoster partial completion, capture missing file metadata asynchronously, fail closed on corrupted or unwritable evidence, and keep local persistence failures outside automatic upload retries.

Stream managed upload logs with bounded lines, bytes, files, directories, and result counts. Include numbered rotations, reject unconfirmed rows, share concurrent scans through a generation-safe cache, invalidate after successful appends, avoid synchronous configuration and directory reads, and close streams on every path.
2026-08-27 15:14:43 +02:00
Sucukdeluxe 58b92856a6 fix: prevent folder-monitor reuploads after completion
Discover base, daily, session, and fallback upload logs across configured, Desktop, and application-data locations without blocking the Electron main process.

Treat in-session completion keys as authoritative automation evidence so removing finished rows cannot cause periodic reconciliation to enqueue and upload the same file again.

Add real handler and done-remove-reconcile regressions covering custom extensions, mixed-case log names, fallback paths, stale evidence, and asynchronous log reads.
2026-08-27 13:22:35 +02:00
Sucukdeluxe 5a369f7598 fix: eliminate upload queue stalls under automation load
Move atomic configuration writes off the Electron main event loop and preserve concurrent queue and folder monitor state.

Make finish-and-pause interrupt queued admission waits without aborting active uploads, then resume only persistently marked automation jobs across active, idle, restart, and finalization races.

Reuse bounded automation evidence snapshots, refresh them during long drains, and cover high-load persistence, pause, resume, and hidden Electron behavior with regression tests.
2026-08-27 07:15:39 +02:00
Sucukdeluxe afd3b70cf3 fix: harden automation reconciliation and pause lifecycle
Keep full folder scans recoverable under duplicate protection and classify every discovered file once before automatic admission.

Separate manual previews from automatic capacity limits, serialize renderer intake, normalize automation counters and intervals, and make Main authoritative for runtime timestamps.

Enforce persistent pause across startup, import, close recovery, resume failures, and reconciliation while preserving read-only paused scans and exactly one activation reconciliation.

Restore failed asynchronous rotation chunks, complete automation localization and unlimited queue accessibility, and tighten hidden integration cleanup coverage.
2026-08-26 15:47:31 +02:00
Sucukdeluxe 28a475401e fix: preserve rotation logs during quit fallback
Route synchronous account-rotation shutdown flushes through the internal log writer so failures under userData/logs retry userData/internal-logs in the same order as runtime writes.

Keep buffered lines until a target accepts the full chunk, report the successful fallback as the active path, and retain the buffer when every internal target fails.

Cover the real EISDIR primary-path case, complete fallback failure, and main-process quit delegation without launching Electron.
2026-08-26 12:37:17 +02:00
Sucukdeluxe d21b721de4 fix: keep internal audit logs in user data
Route upload audit and account rotation output through one internal userData log resolver with a contained fallback directory.

Report active writer paths to diagnostics and log reveal actions while preserving the configurable fileuploader.log fallback contract and leaving existing Desktop files untouched.

Cover primary paths, fallback containment, rotation, active path reporting, log opening, and upload log isolation with focused tests.
2026-08-26 12:27:13 +02:00
Sucukdeluxe 9adb38de08 feat: persist automation pause state 2026-08-26 10:05:26 +02:00
Sucukdeluxe 2063599611 fix: preserve delivered folder reservations 2026-08-26 09:46:44 +02:00
Sucukdeluxe 7890292d96 fix: track pending folder reservations 2026-08-26 09:39:18 +02:00
Sucukdeluxe d16823acbc fix: retain pending folder files across pause 2026-08-26 09:31:52 +02:00
Sucukdeluxe 724280b0cf fix: harden folder monitor lifecycle 2026-08-26 09:24:18 +02:00
Sucukdeluxe c414a4a303 feat: reconcile monitored folders 2026-08-26 09:10:44 +02:00
Sucukdeluxe 4d0b58285f fix: clamp fractional automation queue limits 2026-08-26 09:02:19 +02:00
Sucukdeluxe 41ae750e97 fix: preserve automation queue safety limit 2026-08-26 08:58:21 +02:00
Sucukdeluxe 9bc872bc00 feat: add automation control policies 2026-08-26 08:51:26 +02:00
Sucukdeluxe b769467d08 feat: add automatic account cooldown recovery
Replace session-long account failure pauses with classified 15, 30, 60, and 120 minute cooldowns for temporary account problems. Keep credential, OTP, banned, and disabled states manual while ignoring unknown, file, network, hoster, and bare WAF errors. Reset escalation after confirmed uploads, deduplicate parallel failures, publish revisioned pause snapshots, and show a stable localized countdown with automatic reactivation.
2026-08-22 18:18:02 +02:00
Sucukdeluxe 15c363912f fix: bind removal plans to full key identity
Require both the current record ID and decrypted full key to match a prepared removal plan before deleting local state.

Invalidate mismatched plans before returning KEYRING_REMOVE_PLAN_INVALID so a replacement with the same canonical ID cannot be deleted and the stale plan cannot be reused.

Cover normal, idempotent, rebased, duplicate-ID, and same-ID replacement removal behavior while preserving the replacement generation.
2026-08-22 16:13:43 +02:00
Sucukdeluxe c5d4f4aef8 fix: separate legacy recovery from versioned keyring state
Keep a fully validated v1 primary authoritative over differing legacy recovery snapshots, recover missing or unusable v1 primaries from the best valid legacy candidate, and migrate the next mutation to v2 generation one.

Rebase prepared removals onto the current serialized keyring state so intervening creates survive, generations remain monotonic, and already absent targets complete idempotently.

Restrict canonical same-generation conflict blocking to true v2 documents and add separate legacy and v2 regression coverage without exposing key material.
2026-08-22 16:06:44 +02:00
Sucukdeluxe df96cc3011 fix: replace keyring ordering with committed generations
Read strict v1 keyrings as generation zero and write strict v2 documents with monotonically increasing safe integer generations. Select the highest fully validated generation and reject conflicting canonical payloads at the same generation.

Make a hidden, file-synced, disk-revalidated recovery staging file the rollback boundary. Publish it as a visible recovery candidate before treating the local transaction as committed, then keep primary, backup, and cleanup work best-effort.

Remove mtime and directory-fsync truth from recovery decisions and cover rollback-safe staging failures, post-commit publication failures, stale candidates, v1 migration, and generation conflicts.
2026-08-22 15:55:07 +02:00
Sucukdeluxe 82578b5f6e fix: establish durable keyring publication boundary
Fsync the keyring directory after both complete temporary files are written and synced, before replacing the primary document. Pre-publication directory failures now preserve the prior primary state and remain rollback-safe.

Keep the durable recovery temporary file available when later directory or backup publication work fails, and verify that it restores the committed keyring.

Rank equal-time recovery candidates deterministically with recovery temps before primary temps and backups, and consider equal-time commit temps alongside a valid primary.
2026-08-22 15:36:11 +02:00
Sucukdeluxe 8041aeead9 fix: complete managed backup key remediation
Recover from structurally valid but undecryptable primary keyrings by selecting a fully cryptographically validated backup or recovery temp and reporting KEYRING_RECOVERED.

Keep committed primary writes successful when best-effort post-publication cleanup fails, preventing ambiguous retries after durable local publication.

Intercept clipboard writes inside the hidden Electron Main-process integration probe, remove the duplicate key-created toast, and make authoritative refresh coverage differ from optimistic state.
2026-08-22 15:24:33 +02:00
Sucukdeluxe 49fa4518c9 fix: harden managed online backup key handling
Require canonical encrypted envelopes and surface typed sanitized keyring corruption states.

Persist crash-durable primary and recovery files, prevalidate removal plans, isolate renderer refresh authority, and cover the real hidden Windows DPAPI and IPC composition.
2026-08-22 13:28:47 +02:00
Sucukdeluxe 2bfa153136 fix: preserve committed backup creation success 2026-08-22 10:46:23 +02:00
Sucukdeluxe 6fc516433f feat: coordinate managed online backup keys 2026-08-22 10:38:47 +02:00
Sucukdeluxe 84032e0e68 refactor: expose online backup deletion outcome 2026-08-22 10:29:31 +02:00
Sucukdeluxe b55f99de24 fix: enforce strict online backup keyring entries 2026-08-22 10:25:32 +02:00
Sucukdeluxe 5a059670f6 feat: add encrypted online backup keyring 2026-08-22 10:20:23 +02:00
Sucukdeluxe aa7ae774e6 fix: preserve remote-session compositor rendering
Remove the RDP-specific hardware acceleration shutdown that forced Chromium renderers into software compositing on Windows Server sessions. Add a production-wide startup invariant and a hidden full-width Electron compositor regression covering renderer switches, viewport geometry, and both painted edges.
2026-08-21 07:51:11 +02:00
Sucukdeluxe 3c863d6623 revert: remove the batch completion summary
Remove the dedicated completion toast and failure action after user review while leaving all other update and queue improvements intact.
2026-08-21 01:16:15 +02:00
Sucukdeluxe 04bd4b396c feat: summarize completed upload batches
Capture real batch duration and show a dedicated localized completion summary with success, failure, and skipped counts plus a direct action to open failed uploads.
2026-08-21 01:10:53 +02:00
Sucukdeluxe 4d3a4f1a8a feat: show update download telemetry
Calculate download throughput and remaining time from verified installer bytes and display downloaded size, total size, speed, and ETA beneath the progress track while retaining the last values after cancellation.
2026-08-21 00:28:48 +02:00
Sucukdeluxe 577e1dd9c9 feat: allow active update downloads to be canceled
Keep the dialog cancel action available during update downloads, abort the active network stream, and surface a clean canceled state with retry support. Normalize cancellation across updater, main process, renderer, and translations with regression coverage.
2026-08-20 23:57:54 +02:00
Sucukdeluxe 990d4c4ffa fix: render update download progress incrementally
Use the verified manifest size for percentage calculations, suppress duplicate percentage events, and yield between buffered download updates so Electron can paint intermediate progress before completion. Add a regression test that proves renderer-observable progress during an immediately buffered download.
2026-08-20 14:01:07 +02:00
Sucukdeluxe ff1593be81 fix: gate native window reveal on renderer load
Keep BrowserWindow hidden until both ready-to-show and did-finish-load are complete, preventing the incomplete header from reaching the screen.

Render a static upload-speed baseline beneath the transparent canvas so the zero line exists independently of renderer timers.

Add regression coverage for both reveal event orders, load failures, and the script-independent header baseline.
2026-08-20 13:45:02 +02:00
Sucukdeluxe 6d458e37f3 fix: stabilize the header on first paint
Pass the installed version with the startup language so the renderer can display it before asynchronous initialization.

Seed and start the upload sparkline immediately, keep a fixed update-action slot across all update states, and remove the delayed automatic update check.

Add first-frame regression coverage for version, speed baseline, update geometry, and startup query behavior.
2026-08-20 13:27:55 +02:00
Sucukdeluxe c4c7907686 feat: improve live update and upload feedback
CI / verify (push) Has been cancelled
Refresh release metadata immediately before downloading an update and keep automatic checks current while the app remains open.

Accept desktop file drops from the first renderer frame, preserve early and rapid drops until initialization completes, and show the live remaining upload size in the sidebar.

Add regression coverage for update freshness, startup drag-and-drop ordering, localization, and remaining-byte retry behavior. Bump the application to v2.1.25.
2026-08-20 10:40:58 +02:00
Sucukdeluxe d7c9f287e4 release: restore v2.1.19 baseline for v2.1.24
CI / verify (push) Has been cancelled
Restore the v2.1.19 application baseline and retain only the focused import preflight summary with duplicate, unavailable, destination, job, and size-limit visibility.
2026-08-17 04:25:22 +02:00
Sucukdeluxe 6a2eda1252 fix: accept equivalent installer metadata names
Allow updater manifests from the Gitea and GitHub release pipelines to use different separator characters in the same installer filename while preserving exact version, size, checksum, and executable validation.
2026-08-17 03:29:00 +02:00
Sucukdeluxe 329d22e5b7 feat: add secure batch completion reports
Generate immutable post-cleanup summaries only after queue, history, and recovery finalization. Add bilingual accessible report UI, host and cleanup metrics, report-bound JSON and sanitized error CSV exports, renderer reload recovery, duplicate-filename-safe accounting, and public-source verification coverage.
2026-08-17 00:18:20 +02:00
Sucukdeluxe c8170b8556 feat: add upload schedule windows
Add local weekly upload windows with overnight support, live settings updates, and a shared abortable upload gate.

Keep active transfers running while queued jobs wait outside the window without consuming attempts or parallel slots. Validate and localize the automation settings in German and English, including next-start status and hidden Electron coverage.
2026-08-16 23:56:13 +02:00
Sucukdeluxe 2eaa30c0a8 fix: reload authoritative host health history
Refresh host health from the persisted retention-filtered history after batch completion, allowing the existing generation guard to reject stale responses and removing the competing local merge path.
2026-08-16 23:25:42 +02:00
Sucukdeluxe 5ace779b14 fix: correct host health sampling
Keep the complete loaded history snapshot, sample only valid non-future recent batches, count seven-day failures independently, ignore disabled accounts in issue counters, and preserve loading and error states across batch completion.
2026-08-16 23:03:18 +02:00
Sucukdeluxe 0ee749617c feat: add host health overview
Summarize up to fifty recent batches and current account state into a local host health table with success rates, effective historical throughput, recent failures, last success, and bilingual accessible empty states.
2026-08-16 22:46:15 +02:00
Sucukdeluxe 3da1b08514 fix: harden import preflight admission
Keep configured size-limit counts identical to real queue admission, invalidate cancelled import generations, preserve explicit empty destination choices, normalize Windows namespace aliases, inspect files through one read handle, and retain exact rejection balances.
2026-08-16 22:01:16 +02:00
Sucukdeluxe 88a3ee0937 feat: add import preflight summaries
Inspect every manual file, folder, and drag-and-drop import before queue admission. Report exact duplicate, filename-filter, filesystem, destination, configured size-limit, and resulting job counts in the host selection dialog with live bilingual updates.
2026-08-16 21:31:56 +02:00
Sucukdeluxe 16f6f93a72 Polish account interactions and settings layout
CI / verify (push) Successful in 5m2s
Add smooth account editor transitions with immediate input release, keep the cursor visible in development and production windows, align host option descriptions, and ensure localized settings search placeholders fit at narrow widths. Bump the application to v2.1.22 and extend hidden Electron regression coverage.
2026-08-15 22:35:51 +02:00
Sucukdeluxe f1774b50f8 Add configurable filename import filters
CI / verify (push) Failing after 14m47s
Add include and exclude filename conditions across every new import path, show accepted and excluded counts before destination selection, and keep restored queues unchanged.

Refine the settings layout and reorder upload telemetry for faster status reading.
2026-08-15 05:13:14 +02:00
Sucukdeluxe b286574902 Harden upload finalization and release verification
CI / verify (push) Failing after 21m12s
Preserve uncertain remote commits and destructive source-cleanup requirements across cancellation, persistence failures, retries, and restart recovery. Revalidate account availability after admission waits and prevent late upload results from bypassing cancellation state. Strengthen release argument, CI tag, source allowlist, and secret scanning gates. Run the Electron smoke suite in a fully hidden offscreen harness that cannot reveal, focus, or elevate native windows.
2026-08-15 04:06:53 +02:00
Sucukdeluxe 0845016efe Close post-upload and admission race gaps
Treat fallback result fetch and body failures as uncertain Doodstream commits, and coordinate interval timing with slot acquisition so upload starts remain spaced without occupying another host's global slot during the wait.
2026-08-14 00:07:27 +02:00
Sucukdeluxe 28094414a8 Harden terminal upload finalization recovery 2026-08-14 00:07:13 +02:00