Desktop-Anwendung zum gleichzeitigen Hochladen auf mehrere File-Hoster
Go to file
Administrator 0f9096be3c perf(renderer): keep recent-uploads panel append-only past the cap (kill ~80ms per-completion freeze)
The recent-uploads panel had a cheap append-only fast path, but it was gated on
`rows.length > _recentLastRenderedLen`. maybeAddSessionFile caps sessionFilesData
by push-then-slice (2000 -> 2001 -> sliced back to 2000), so once a session
produces more than SESSION_FILES_CAP rows the length is pinned at the cap and the
gate is false forever. Every subsequent completion then fell through to the full
`tbody.innerHTML = rows.map(...).join('')` rebuild of all ~2000 rows.

The cap is per (link x file x hoster), so with 4-5 selected hosters the 2000 cap
is hit at only ~400-500 distinct files — very reachable in a long folder-monitor
session. Profiled in Chromium (same Blink engine as Electron, table-layout:fixed):
the full 2000-row rebuild costs ~80ms and ran on EVERY completion past the cap — a
repeating ~80ms main-thread freeze. That is the "fine on a fresh start, gets laggy
after many uploads while CPU (~40%) and RAM (~6GB, stable) stay normal" symptom: a
render-thread stall, not CPU saturation or a memory leak.

Fix: track newly-pushed rows in _recentPendingAppends (incremented in
maybeAddSessionFile, consumed every render) and gate the fast path on
`pendingAppends > 0` instead of length growth, so it survives the cap. Prepend the
new rows, then evict the same overflow count from the DOM bottom (oldest rows,
which is where the date-desc view places the front-of-array entries the cap slices
off). DOM work is O(added) again. The fast path is gated behind an explicit
`appendOnly` flag passed only by scheduleRecentRender's rAF, so selection / delete
/ clear / sort / batch-done renders stay full rebuilds and cannot wrong-evict or
double-prepend.

Verified in Blink over a simulated 5000-completion session (3/frame, far past the
cap): per-frame render 80ms -> median 7.4ms (>10x), and the DOM stays exactly equal
to the data (cap held at 2000, newest-on-top, oldest evicted, zero duplicates).
397/397 tests pass, eslint clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 01:47:59 +02:00
assets feat: custom app icon (arrows-up design) 2026-03-11 23:30:46 +01:00
docs feat(diagnostics): network bind + fail-closed IP allowlist + host-in-code (Tailscale, like rd-diagnostics-mcp) 2026-06-19 19:32:29 +02:00
gateway feat(diagnostics): network bind + fail-closed IP allowlist + host-in-code (Tailscale, like rd-diagnostics-mcp) 2026-06-19 19:32:29 +02:00
lib perf(config): cache parsed config + lean serialize + drop load() from log flush (long-run lag) 2026-06-21 00:49:55 +02:00
renderer perf(renderer): keep recent-uploads panel append-only past the cap (kill ~80ms per-completion freeze) 2026-06-21 01:47:59 +02:00
scripts fix: rcedit import in afterPack - icon was not being embedded in exe 2026-03-12 01:22:56 +01:00
tasks docs(lessons): 'do it like <other project>' = find + map it exactly, fail-closed allowlist model (v3.3.86) 2026-06-19 19:43:07 +02:00
tests perf(config): cache parsed config + lean serialize + drop load() from log flush (long-run lag) 2026-06-21 00:49:55 +02:00
.gitignore chore(gitignore): exclude electron-config + logs from tracking 2026-06-07 04:27:43 +02:00
app.py chore: initial commit - Electron multi-hoster uploader 2026-03-10 02:32:06 +01:00
eslint.config.mjs perf(config): cache parsed config + lean serialize + drop load() from log flush (long-run lag) 2026-06-21 00:49:55 +02:00
hosters.py chore: initial commit - Electron multi-hoster uploader 2026-03-10 02:32:06 +01:00
main.js perf(config): cache parsed config + lean serialize + drop load() from log flush (long-run lag) 2026-06-21 00:49:55 +02:00
package-lock.json chore(deps): npm audit fix --force — closes 12 deferred vulnerabilities 2026-04-28 11:53:53 +02:00
package.json release: v3.3.86 2026-06-19 19:39:15 +02:00
preload-drop-target.js feat: floating drop target window and English column labels 2026-03-12 04:11:01 +01:00
preload.js feat(diagnostics): read-only remote diagnostics agent over the existing WS transport (app side) 2026-06-19 17:24:32 +02:00
README.md docs: update README for Electron version 2026-03-10 02:35:43 +01:00
requirements.txt chore: initial commit - Electron multi-hoster uploader 2026-03-10 02:32:06 +01:00

Multi-Hoster-Upload

Desktop-Anwendung zum gleichzeitigen Hochladen von Dateien auf mehrere File-Hosting-Dienste.

Unterstuetzte Hoster

  • doodstream.com - API-Key basiert
  • voe.sx - API-Key basiert
  • vidmoly.me - Login basiert (Username/Passwort)
  • byse.sx - API-Key basiert

Installation

Setup (empfohlen)

Lade die Multi-Hoster-Upload Setup X.X.X.exe aus den Releases herunter und installiere.

Portable

Lade die Multi-Hoster-Upload X.X.X.exe herunter. Keine Installation noetig.

Entwicklung

npm install
npm start

Build

npm run release:win

Erzeugt Setup + Portable EXE im release/ Ordner.

Release

GITEA_TOKEN=dein_token npm run release:gitea -- 1.0.1 "Release notes"

Features

  • Drag & Drop oder Dateiauswahl
  • Gleichzeitiger Upload zu mehreren Hostern
  • Echtzeit-Fortschrittsanzeige
  • Ergebnis-Tabelle mit Sortierung und Kopier-Funktion
  • Upload-Verlauf (letzte 100 Eintraege)
  • Health-Check fuer Hoster-Verbindungen
  • Auto-Updater (prueft git.24-music.de)
  • Log-Datei kompatibel mit File & Image Uploader Format