release: prepare v2.0.52

This commit is contained in:
Sucukdeluxe
2026-08-21 10:42:24 +02:00
parent 5aa0359a93
commit c375491c88
4 changed files with 27 additions and 6 deletions
+17
View File
@@ -4,6 +4,23 @@ All notable changes to Multi-Debrid Downloader are documented in this file.
## [Unreleased] ## [Unreleased]
## [2.0.52] - 2026-08-21
### Rolling account statistics
- Added a true rolling Last 24 Hours range directly after Today in Statistics.
- Attributed downloaded traffic to the exact Real-Debrid, Mega-Debrid, or Debrid-Link account that produced each direct link.
- Displayed the known account username with its provider while retaining safe fallback labels for accounts without checked identity data.
- Kept the rolling total accurate across midnight, account disablement, deletion, application restarts, and session-statistics resets.
- Started exact rolling account collection after the upgrade without inventing historical account ownership from older daily totals.
### Statistics precision and performance
- Kept primary statistics data totals in gigabytes above 1 TB so large daily volumes remain precise, for example 1,250 GB instead of 1.2 TB.
- Stored traffic in sparse minute buckets with a bounded 48-hour retention window.
- Maintained the visible 24-hour aggregate incrementally and kept raw minute history out of frequent renderer snapshots.
- Preserved full rolling history in encrypted full backups while removing account IDs and labels from support statistics.
## [2.0.51] - 2026-08-21 ## [2.0.51] - 2026-08-21
### In-app updates ### In-app updates
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "multi-debrid-downloader", "name": "multi-debrid-downloader",
"version": "2.0.51", "version": "2.0.52",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "multi-debrid-downloader", "name": "multi-debrid-downloader",
"version": "2.0.51", "version": "2.0.52",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"adm-zip": "0.6.0", "adm-zip": "0.6.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "multi-debrid-downloader", "name": "multi-debrid-downloader",
"version": "2.0.51", "version": "2.0.52",
"description": "Desktop downloader", "description": "Desktop downloader",
"main": "build/main/main/main.js", "main": "build/main/main/main.js",
"author": "Sucukdeluxe", "author": "Sucukdeluxe",
+5 -1
View File
@@ -3,6 +3,7 @@ import os from "node:os";
import path from "node:path"; import path from "node:path";
import crypto from "node:crypto"; import crypto from "node:crypto";
import { spawnSync } from "node:child_process"; import { spawnSync } from "node:child_process";
import { finished } from "node:stream/promises";
import { afterEach, describe, expect, it } from "vitest"; import { afterEach, describe, expect, it } from "vitest";
import { createPackage } from "@electron/asar"; import { createPackage } from "@electron/asar";
@@ -47,7 +48,10 @@ async function createFixtureAsar(version: string): Promise<Buffer> {
fs.mkdirSync(path.join(sourceDir, "build", "main", "main"), { recursive: true }); fs.mkdirSync(path.join(sourceDir, "build", "main", "main"), { recursive: true });
fs.writeFileSync(path.join(sourceDir, "package.json"), JSON.stringify({ name: "multi-debrid-downloader", version }), "utf8"); fs.writeFileSync(path.join(sourceDir, "package.json"), JSON.stringify({ name: "multi-debrid-downloader", version }), "utf8");
fs.writeFileSync(path.join(sourceDir, "build", "main", "main", "main.js"), `var package_default = { name: "multi-debrid-downloader", version: "${version}" };`, "utf8"); fs.writeFileSync(path.join(sourceDir, "build", "main", "main", "main.js"), `var package_default = { name: "multi-debrid-downloader", version: "${version}" };`, "utf8");
await createPackage(sourceDir, outputPath); const output = await createPackage(sourceDir, outputPath) as unknown as NodeJS.WritableStream | undefined;
if (output && typeof output.once === "function" && !(output as { writableFinished?: boolean }).writableFinished) {
await finished(output);
}
const payload = fs.readFileSync(outputPath); const payload = fs.readFileSync(outputPath);
fs.rmSync(rootDir, { recursive: true, force: true }); fs.rmSync(rootDir, { recursive: true, force: true });
return payload; return payload;