Commit Graph
177 Commits
Author SHA1 Message Date
Sucukdeluxe 2d62dd69d0 fix(accounts): move action controls farther right
Shift the visible Action header and every account row menu together twenty pixels toward the table edge while preserving the fixed column width. Update the focused layout regression coverage to require the exact requested offset.
2026-08-15 02:30:12 +02:00
Sucukdeluxe 48430ef045 fix(accounts): nudge action controls right
Move the visible Action header and each row menu together six pixels toward the table edge while preserving the fixed action-column width and alignment. Add focused coverage for the shared offset.
2026-08-15 02:25:14 +02:00
Sucukdeluxe b70cab60d1 fix(accounts): center the visible action column
Add a visible Action header to the fixed account-table action column and remove the right padding that shifted row menus away from its center. Keep all resizable content column widths unchanged and cover the header and alignment contract.
2026-08-15 02:21:48 +02:00
Sucukdeluxe 586ebea201 fix(accounts): simplify identity copy tooltips
Show only the copy action in populated username and email cell tooltips instead of repeating values already visible in the table. Preserve explicit accessible button labels and add German and English regression coverage.
2026-08-15 02:17:24 +02:00
Sucukdeluxe d91e2a4ab9 fix(accounts): separate Debrid-Link username and email
Persist the username and email returned by the Debrid-Link account endpoint as distinct identity fields and project them into their matching account-table columns. Migrate cached legacy statuses that stored a username in the email field, preserve both fields through renderer validation and sanitization, and cover API responses with and without an email address.
2026-08-15 02:11:59 +02:00
Sucukdeluxe 90fc77f203 fix(accounts): release row focus after Escape
Blur the focused account row only when Escape clears an active account selection. This prevents Chromium focus-visible styling from leaving a thick clipped blue outline while retaining accessible focus indicators during normal keyboard navigation.
2026-08-15 02:00:54 +02:00
Sucukdeluxe b5854a2227 fix(accounts): clear multi-selection globally on Escape
Route account selection clearing through the existing window-level Escape handler so it works regardless of which account surface owns focus. Preserve text editing and open overlay behavior, and remove the misleading focus-dependent workspace handler.
2026-08-15 01:53:03 +02:00
Sucukdeluxe 007235bb38 feat(accounts): add multi-selection and batch removal
Support Windows-style single and Ctrl/Cmd additive row selection, clear selections with Escape, and show the selected count on the removal action. Remove selected accounts behind one confirmation, strengthen the selected-row treatment, and delete the redundant global account activation switch so individual account toggles remain authoritative.
2026-08-15 01:47:32 +02:00
Sucukdeluxe 8a112747fc feat(accounts): improve table controls and secure credential reveal
Add persistent keyboard-accessible column resizing and increase the action-column edge spacing. Disable the active-only refresh action when no enabled checkable account exists and move the account-enabled control below the daily limit field. Add an explicit trusted IPC path that reveals only the selected stored credential on demand, keeps credentials out of renderer snapshots and audit fields, clears dialog state on close, and supports native clipboard copying. Cover UI behavior, request validation, provider-specific credential lookup, preload forwarding, renderer-state secrecy, and IPC trust boundaries.
2026-08-15 01:36:04 +02:00
Sucukdeluxe 479c2b600a fix(accounts): unlock parent provider when enabling rows
Make individual Debrid-Link and Mega-Debrid switches express an explicit enabled target. Enabling a row now clears both its own disabled identifier and the effective provider lock; Mega-Debrid also re-enables the selected API or web mode.

Keep row-level disabling scoped to the selected account, align the legacy key view with the effective provider state, and cover the provider-plus-account lock combination with a regression test.
2026-08-15 01:19:29 +02:00
Sucukdeluxe 0119534e07 fix(accounts): refresh active logins and toggle instantly
Split bulk account checks into active-only and all-configured scopes so disabled providers, Mega-Debrid accounts, and Debrid-Link keys no longer distort the normal result count. Preserve explicit full checks for diagnosing disabled credentials and surface their failed status.

Render account enablement from the optimistic settings draft, persist it with revision-safe rollback, and apply the same immediate behavior to individual and bulk switches. Extend the IPC contract, translations, changelog, and regression coverage.
2026-08-15 01:14:54 +02:00
Sucukdeluxe 64c846861b fix(downloads): show remaining volume before total
Place the current unfinished download volume ahead of the historical total in the downloads status sidebar. Lock the user-facing metric order with a renderer regression test.
2026-08-15 01:00:36 +02:00
Sucukdeluxe a26fabe990 release: prepare v2.0.40
Document the complete package disclosure no-motion fix and update package metadata for the dual-host Windows release.
v2.0.40
2026-08-15 00:52:13 +02:00
Sucukdeluxe 34c50fc2fb fix(downloads): fully disable package disclosure motion
Disable the persistent virtual row and spacer transitions when package disclosure animation is turned off, so following packages reposition immediately instead of continuing to slide. Add a renderer regression test covering the real no-motion class and CSS boundary.
2026-08-15 00:46:50 +02:00
Sucukdeluxe 159a54a029 release: prepare v2.0.39
Document the settings compatibility fix and update package metadata for the dual-host Windows release.
v2.0.39
2026-08-15 00:22:51 +02:00
Sucukdeluxe 5980b48d60 fix(settings): accept omitted optional values after upgrades
Restore the v2.0.35 renderer settings validation behavior that was lost when the download path returned to the v2.0.28 baseline. Ignore undefined optional values at top level and inside structured settings while continuing to reject unknown concrete keys and invalid types. Cover a full settings save containing a Real-Debrid account status without the optional email field, plus obsolete optional-field handling.
2026-08-15 00:18:01 +02:00
Sucukdeluxe 31e87b80f3 release: prepare v2.0.38
Set the application and lockfile version to 2.0.38 and document the optional package disclosure motion setting in the public English changelog. This release keeps motion enabled by default while allowing remote and lower-performance systems to disable only package expand and collapse transitions.
v2.0.38
2026-08-15 00:04:14 +02:00
Sucukdeluxe d1d1817f86 feat: make package disclosure motion optional
Add a persisted general setting that keeps package expand and collapse motion enabled by default while allowing remote and lower-performance systems to switch it off. Route the setting through normalized application state and renderer settings, bypass transition grouping when disabled, and retain the existing virtualized package list behavior. Cover legacy defaults, explicit opt-out persistence, settings presentation, and the immediate disclosure path with focused regression tests.
2026-08-14 23:59:51 +02:00
Sucukdeluxe 08512d38a4 release: complete v2.0.37 public notes v2.0.37 2026-08-14 23:39:01 +02:00
Sucukdeluxe c71cac7dc7 fix(downloads): animate package contents as one panel 2026-08-14 23:33:19 +02:00
Sucukdeluxe 18c8085a4a tune(downloads): extend package disclosure motion 2026-08-14 23:22:35 +02:00
Sucukdeluxe 4d1127a802 tune(downloads): slow package disclosure motion 2026-08-14 23:13:57 +02:00
Sucukdeluxe 318a4f6913 fix(downloads): keep collapse rows mounted across viewport 2026-08-14 23:11:05 +02:00
Sucukdeluxe 56aed073f3 fix(downloads): make package disclosure motion visible
Keep the explicitly requested 300 ms package transition active when Chromium reports reduced motion, and separate the prepared and active disclosure states by a painted frame. Add focused regression coverage and an opt-in motion mode for the visual harness while keeping normal captures deterministic.
2026-08-14 22:38:06 +02:00
Sucukdeluxe 9cf89b8493 feat(downloads): restore package disclosure motion and remaining size
Restore smooth 300 ms expand and collapse transitions without removing row virtualization. Limit animated disclosure rows globally, preserve live item updates during motion, support rapid reversal, and keep large queues bounded.

Add a Remaining sidebar metric that sums only unfinished known bytes while clearly marking unknown open sizes. Cover multi-package limits, live transition merges, honest remaining-size semantics, translations, and accessibility.
2026-08-14 22:24:00 +02:00
Sucukdeluxe 3974853634 feat(ui): refresh branding and account identity copying
Replace every active application icon asset with the new high-resolution artwork, including transparent PNG, complete Windows ICO sizes, and the documentation screenshot.

Turn populated username and email cells into non-selectable copy actions backed by validated native Electron clipboard IPC while keeping empty cells and row interactions unchanged.
2026-08-14 21:56:25 +02:00
Sucukdeluxe b80209a10f fix(realdebrid): persist web status and report relevant provider errors
Check Real-Debrid API and browser sessions through the account status flow, retain the service status across settings updates, and refresh the account row when a browser login is detected. Exclude unavailable providers that were never attempted from conversion failures and prevent aggregated fallback text from being mislabeled as a Debrid-Link terminal error. Bump the development version to 2.0.37 and add focused regression coverage.
2026-08-14 21:02:30 +02:00
Sucukdeluxe c2d5dbaeb3 release: publish v2.0.36 stable download rollback
Restore the proven v2.0.28 download-processing baseline under a new release version after later builds caused severe throughput degradation during large parallel queues. Keep the verified startup, credential, storage, queue, and updater behavior while preparing fresh Windows artifacts for both public release hosts.
v2.0.36
2026-08-14 20:33:56 +02:00
Sucukdeluxe ca015553f3 fix(startup): preserve Electron WebContents receivers v2.0.28 2026-08-12 21:48:45 +02:00
Sucukdeluxe d58c3a262f fix(startup): allow case-insensitive renderer paths on Windows
Normalizes local renderer file URLs to filesystem paths before comparison so Windows path casing cannot block the packaged application during initial navigation. Adds a regression test covering case-insensitive packaged renderer URLs and records the v2.0.27 release notes.
v2.0.27
2026-08-12 21:31:08 +02:00
Sucukdeluxe 12179af243 release: publish v2.0.26 log storage controls
Documents the configurable log storage location and increments the desktop release version to 2.0.26. The release keeps settings, credentials, and runtime state in AppData while safely migrating recognised log data.
v2.0.26
2026-08-12 12:08:42 +02:00
Sucukdeluxe 56ff988a7c fix(logs): make log storage location safe and configurable
Adds an AppData/Desktop log storage selector with controlled migration of known log files only. Keeps runtime data and credentials in AppData, consolidates desktop rename logs into the chosen directory, and exposes the active log folder through the desktop UI.\n\nFlushes early recovery diagnostics into the runtime log before a location migration, preserves the active trace configuration as valid JSON during moves, and prevents backup imports from failing when the requested log location is unavailable. Adds regression coverage for desktop paths, legacy log migration, secret exclusion, and trace-config replacement.
2026-08-12 11:59:16 +02:00
Sucukdeluxe a02ffe4623 chore(release): remove internal task report v2.0.25 2026-08-12 02:23:40 +02:00
Sucukdeluxe fb16cf2ebd chore(release): prepare v2.0.25 2026-08-12 02:23:18 +02:00
Sucukdeluxe 7af3587dfd Virtualize downloads table rows
Add a custom download virtualizer with fixed 40px package rows, 38px file rows, overscan, and pinned rename rows.

Keep the downloads model logically complete so header selection, shift ranges, and actionable selections operate on every filtered expanded row instead of the rendered DOM window.

Render the virtualized body inside the existing downloads table scrollport without adding a second scroll context, while preserving column drag data attributes, row click behavior, context menus, and disabled native package dragging.

Cover bounded rendering, full logical row selection, scroll window geometry, pinned inline rename rendering, and responsive scrollport CSS with focused tests.
2026-08-12 02:21:17 +02:00
Sucukdeluxe 51b422fa10 feat(storage): reserve capacity before writes 2026-08-12 02:09:21 +02:00
Sucukdeluxe ebfd98226b feat: harden remote diagnostics authentication
Bind the diagnostics flow to bearer-only authentication and reject query token attempts with controlled responses. Compare bearer token bytes with timing-safe equality, remove wildcard CORS, and mark diagnostics/support responses as no-store.

Move trace configuration mutation behind POST, add method failure handling, add a small per-IP/loopback in-memory request limit, and keep generated setup and support-manifest URLs token-free while pointing support access at a local bridge/tunnel flow.

Sanitize backup remote diagnostics on export and restore so legacy token, endpoint, host mode, and port values are not persisted; restores only keep the allowlist and force local binding.

Tests cover bearer accept/reject, query rejection, GET mutation rejection, no-store/CORS behavior, loopback default binding, rate limiting, token-free hints, and backup sanitation.
2026-08-12 00:59:07 +02:00
Sucukdeluxe ba413010c8 Fix Electron redirect and login boundary hardening
Apply the central Electron navigation policy to will-redirect in addition to will-navigate so main and remote-login windows block hostile redirect targets with the same exact host rules.

Make main-window webPreferences explicitly keep webSecurity enabled and insecure content disabled, and make allowlisted external URL opening await shell.openExternal so IPC returns false on denied or failed opens without unhandled rejections.

Expand focused coverage with hostile redirect cases, controlled shell failure handling, and AllDebrid Web behavior tests for existing-session generation plus login-required browser-window retry flow.
2026-08-12 00:43:02 +02:00
Sucukdeluxe 265498d629 Harden Electron trust boundaries
Add centralized browser security helpers for restrictive BrowserWindow profiles, navigation denial, popup denial, permission denial, and exact HTTPS host allowlists. Apply those policies to the main renderer window and to the Real-Debrid and AllDebrid browser-login windows without weakening the credential renderer boundary.

Add shared IPC sender validation for renderer handlers so development accepts only the local Vite origin and non-development accepts only the built file renderer tree. Route the registered renderer IPC handlers through the shared guard and restrict app:open-external to the same exact HTTPS allowlist.

Cover the hardening with focused red-green tests for untrusted navigation, popup handling, permission requests, exact host/subdomain matching, packaged file renderer boundaries, untrusted IPC senders, and both browser-login window profiles.
2026-08-12 00:30:49 +02:00
Sucukdeluxe bfb901903d fix(downloads): harden compact finalization status
Use the compact finalization text for status-cell titles so item tooltips cannot expose raw archive details in German or English.

Require exactly two non-empty finite fraction values with one slash and a positive total before deriving progress. Invalid, infinite, NaN, zero-total, and extra-part forms now resolve to the phase only, with regression coverage for every case.
2026-08-12 00:16:26 +02:00
Sucukdeluxe 1664478770 fix(downloads): compact finalization statuses
Normalize German and English finalization producer labels before they reach package and item status cells. Derive percentages from valid fractions, clamp them to the visible 0-100 range, and reduce malformed fractions or zero totals to the phase name.

Preserve legacy percentage labels while preventing finalization lines ending in archive names from being classified as bare extraction archives. Cover current and legacy forms, both languages, package and item rendering, localization, and invalid numeric input.
2026-08-12 00:09:18 +02:00
Sucukdeluxe 15f53f9c92 Sanitize account check IPC statuses
Centralize DebridAccountStatus sanitizing for direct account-check responses. The shared sanitizer collects stored and submitted credential variants, including raw, trimmed, URL-encoded, URL-decoded, full credential lines, and login:secret forms, then redacts credential-like query params, key-value echoes, authorization, cookie, API-key, token, password, secret, session, backup passphrase, and archive password text before any status DTO reaches the renderer.

Apply the sanitizer to bulk checkDebridAccounts results, single checkAccountCredentials results, and account command credential checks before returning, throwing, or persisting statuses. Reuse the same sanitizer for renderer snapshots so status redaction stays on one path.

Replace the Debrid-Link key popup copy action with a truthful non-secret masked-identity copy action and cover the regression so no renderer path copies key.token or reports a secret-copy success without a secret readback.
2026-08-11 23:47:49 +02:00
Sucukdeluxe 26d62a9337 Harden renderer account IPC boundary
Move secret-bearing account and settings state behind main-process boundaries for Task 1B. Renderer snapshots now expose RendererSettings plus safe account metadata instead of full AppSettings, with provider tokens, passwords, API keys, archive passwords, and notification URLs excluded from renderer-bound state. Add write-only account create, replace, update-secret, and delete IPC commands, validate renderer settings updates against the safe shape, and keep account command results limited to safe settings, safe accounts, and stable account IDs.

Preserve existing account behavior while removing renderer secret access: blank replace secrets retain stored main-process secrets, Mega-Debrid API/Web pools stay mode-specific, Debrid-Link key metadata migrates by stable key ID, and delete/enable operations target stable account or provider identities. Remove obsolete renderer-side account status helpers from the old settings snapshot flow.

Add focused coverage for all supported renderer account kinds, secret-free UiSnapshot serialization, preload account command forwarding, malformed payload error sanitization, Mega-Debrid preferApi preservation, Debrid-Link key metadata migration, account edit safety, settings UI, debug server settings payloads, link export, and visual fixtures.
2026-08-11 23:22:44 +02:00
Sucukdeluxe 1cb381fa50 fix(security): require passphrases for local backups
Derive every MDD2 key from a non-empty user passphrase and the per-backup scrypt salt while keeping the embedded application material isolated to read-only MDD1 migration imports. Normalize missing, wrong, and authentication-failure results to the same controlled decryption error.

Add the modal-based export confirmation and format-aware import flow across renderer, preload, IPC, and controller boundaries. Clear transient passphrase state on completion or cancellation, retain pending import data only until consumption, and keep passphrases out of results, snapshots, payloads, and logs.

Cover mismatch and cancellation paths, MDD1 passphrase-free migration, preload forwarding, successful UI/crypto round-trips, one-byte-short ciphertext, authenticated empty ciphertext, and truncated legacy envelopes.
2026-08-11 22:32:58 +02:00
Sucukdeluxe 6f94e13cb5 feat(security): harden local backup encryption
Write new backups as MDD2 envelopes with per-file scrypt salts, random IVs, and AES-256-GCM authenticated encryption. Authenticate the versioned header and normalize malformed or tampered payload failures without exposing protected data.

Keep MDD1 decryption as read-only migration compatibility and add regression coverage for known legacy imports, truncation, unsupported versions, nondeterministic output, and tampering across every protected envelope field.
2026-08-11 22:08:38 +02:00
Sucukdeluxe de13f1bbde fix(storage): preserve sanitized settings backups
Restore previous-state recovery semantics by reading and normalizing the prior primary config, reapplying the current credential persistence policy, and atomically storing that sanitized prior state as the backup for both sync and async saves.

Create a credential-free current-state fallback when the prior primary is absent or invalid, capture async settings before later mutations, and add matching regression coverage for recovery, credential removal, and safe fallback behavior across both save paths.
2026-08-11 21:58:29 +02:00
Sucukdeluxe 5af7b5c32f fix(security): purge credentials from settings backups
Write the newly protected settings payload to both sync and async config backups so disabling credential persistence or losing encryption availability cannot leave previously stored provider secrets behind.

Replace content-based prefix detection with a typed, versioned safeStorage envelope, preserve arbitrary legacy plaintext for migration, and emit field-only diagnostics for encryption failures without exposing credentials or ciphertext. Add regression coverage for both save paths, both persistence-off conditions, and prefix-shaped plaintext values.
2026-08-11 21:50:02 +02:00
Sucukdeluxe 97ad90ad4f feat(security): encrypt persisted provider credentials
Protect every remembered provider credential with Electron safeStorage and restore it only inside the main process. Migrate legacy plaintext settings atomically across the primary config and its backup while keeping credentials memory-only when encryption is unavailable or remembering is disabled.

Initialize credential protection after app readiness but before settings are loaded, add masked renderer projection metadata, and cover encryption, migration, unavailable-storage, and persistence behavior with focused tests.
2026-08-11 21:38:25 +02:00
Sucukdeluxe 2861fd95f7 fix(downloads): stabilize queue and disk recovery
Keep package rows in their existing visible order across runtime state changes and remove obsolete automatic progress grouping.

Require an active usable provider before starting or resuming downloads, recover temporary disk-write blocks without consuming normal retries, and surface disk waits and extraction failures at package level.

Add focused regression coverage and prepare the v2.0.24 release metadata and changelog.
v2.0.24
2026-08-11 20:08:06 +02:00
Sucukdeluxe a6e6d2d439 release: ship v2.0.23 queue and account reliability fixes
Normalize RapidGator aliases, stabilize active queue ordering, preserve user-controlled package expansion, and align compact queue status presentation.

Separate Mega-Debrid API and Web credential pools, migrate legacy credentials and disabled states safely, refresh live account availability without restart, honor disabled credential persistence, and invalidate Web sessions without allowing stale in-flight, retry, or queued logins to restore old cookies.

Expand regression coverage for account isolation, legacy migration, session races, live scheduler refresh, update notes, and responsive queue behavior.
v2.0.23
2026-08-11 18:31:01 +02:00