Add encrypted Deepbrid API accounts with account validation, provider routing, fallback, usage tracking, safe error handling, and verified 1Fichier downloads. Restore persistent recurring daily starts with local-calendar deduplication and legacy schedule compatibility. Add durable Discord package, run, remaining-volume, stall, and recovery notifications with privacy-safe telemetry and disk-failure recovery.
47 lines
3.2 KiB
TypeScript
47 lines
3.2 KiB
TypeScript
import { getDebridLinkApiKeyIds } from "../shared/debrid-link-keys";
|
|
import { getMegaDebridAccountIds, mergeMegaDebridCredentialPools } from "../shared/mega-debrid-accounts";
|
|
import { getRealDebridAccountIds } from "../shared/real-debrid-accounts";
|
|
import type { AppSettings } from "../shared/types";
|
|
|
|
export function overlayLiveUsageCounters(target: AppSettings, liveSettings: AppSettings, liveTotalRuntimeMs: number): void {
|
|
const debridLinkKeyIds = new Set(getDebridLinkApiKeyIds(target.debridLinkApiKeys));
|
|
const megaAccountIds = new Set(getMegaDebridAccountIds(mergeMegaDebridCredentialPools(target.megaDebridApiCredentials || "", target.megaDebridWebCredentials || "") || target.megaCredentials || "", target.megaPassword || ""));
|
|
const realDebridAccountIds = new Set(getRealDebridAccountIds(target));
|
|
const targetDeepbridApiKey = target.deepbridApiKey.trim();
|
|
const liveDeepbridApiKey = liveSettings.deepbridApiKey.trim();
|
|
const validAccountIds = new Set([
|
|
...debridLinkKeyIds,
|
|
...megaAccountIds,
|
|
...realDebridAccountIds,
|
|
...(realDebridAccountIds.size === 0 && (target.realDebridUseWebLogin || target.token.trim()) ? ["svc-realdebrid"] : []),
|
|
...(targetDeepbridApiKey && targetDeepbridApiKey === liveDeepbridApiKey ? ["svc-deepbrid"] : [])
|
|
]);
|
|
target.totalDownloadedAllTime = Math.max(target.totalDownloadedAllTime || 0, liveSettings.totalDownloadedAllTime || 0);
|
|
target.totalCompletedFilesAllTime = Math.max(target.totalCompletedFilesAllTime || 0, liveSettings.totalCompletedFilesAllTime || 0);
|
|
target.totalRuntimeAllTimeMs = Math.max(target.totalRuntimeAllTimeMs || 0, liveTotalRuntimeMs);
|
|
target.providerDailyUsageDay = liveSettings.providerDailyUsageDay;
|
|
target.providerDailyUsageBytes = { ...(liveSettings.providerDailyUsageBytes || {}) };
|
|
target.providerTotalUsageBytes = { ...(liveSettings.providerTotalUsageBytes || {}) };
|
|
target.debridLinkApiKeyDailyUsageBytes = Object.fromEntries(
|
|
Object.entries(liveSettings.debridLinkApiKeyDailyUsageBytes || {}).filter(([keyId]) => debridLinkKeyIds.has(keyId))
|
|
);
|
|
target.debridLinkApiKeyTotalUsageBytes = Object.fromEntries(
|
|
Object.entries(liveSettings.debridLinkApiKeyTotalUsageBytes || {}).filter(([keyId]) => debridLinkKeyIds.has(keyId))
|
|
);
|
|
target.megaDebridAccountDailyUsageBytes = Object.fromEntries(
|
|
Object.entries(liveSettings.megaDebridAccountDailyUsageBytes || {}).filter(([accountId]) => megaAccountIds.has(accountId))
|
|
);
|
|
target.megaDebridAccountTotalUsageBytes = Object.fromEntries(
|
|
Object.entries(liveSettings.megaDebridAccountTotalUsageBytes || {}).filter(([accountId]) => megaAccountIds.has(accountId))
|
|
);
|
|
target.realDebridAccountDailyUsageBytes = Object.fromEntries(
|
|
Object.entries(liveSettings.realDebridAccountDailyUsageBytes || {}).filter(([accountId]) => realDebridAccountIds.has(accountId))
|
|
);
|
|
target.realDebridAccountTotalUsageBytes = Object.fromEntries(
|
|
Object.entries(liveSettings.realDebridAccountTotalUsageBytes || {}).filter(([accountId]) => realDebridAccountIds.has(accountId))
|
|
);
|
|
target.debridAccountStatuses = Object.fromEntries(
|
|
Object.entries(liveSettings.debridAccountStatuses || {}).filter(([accountId]) => validAccountIds.has(accountId))
|
|
);
|
|
}
|