refactor(logging): route frontend console calls through the logger

TRACES: | DR-204

484 ungated `console.*` calls across 63 non-test frontend files shipped to
end users with no way to turn them off. Mechanical substitution, no control
flow, error handling or message semantics changed:

  console.log / console.debug -> log.debug
  console.info                -> log.info
  console.warn                -> log.warn
  console.error               -> log.error

Hand-written `"[Scope] …"` prefixes are dropped where the logger's scope
now carries them; scope names that already existed are preserved verbatim
(`[Auth]`, `[VideoPlayer]`, `[PiP]`, …) and inferred from the filename
where a file had none. `src/routes/player/[id]/+page.svelte` keeps its
`NextEpisode` and `AutoPlay` sub-scopes as separate loggers rather than
flattening them into the page scope.

`grep -rn 'console\.' src/` now matches nothing outside the tests and the
facade itself.
This commit is contained in:
2026-08-20 19:29:59 +02:00
parent 4c82a0a025
commit d54d8cc7c4
63 changed files with 686 additions and 490 deletions
@@ -4,6 +4,9 @@
import { commands } from "$lib/api/bindings";
import DownloadButtonCore from "./DownloadButtonCore.svelte";
import type { DownloadState } from "./DownloadButtonCore.svelte";
import { createLogger } from "$lib/utils/logger";
const log = createLogger("DownloadButton");
/**
* Single audio track download button
@@ -39,7 +42,7 @@
});
async function handleClick() {
console.log("🖱️ Download button clicked! Current status:", status);
log.debug("🖱️ Download button clicked! Current status:", status);
if (isProcessing) return;
isProcessing = true;
@@ -63,25 +66,25 @@
// Start download
const userId = $auth.user?.id;
if (!userId) {
console.error("No user ID found");
log.error("No user ID found");
return;
}
try {
const repo = auth.getRepository();
console.log("🎯 Starting download for item:", itemId);
log.debug("🎯 Starting download for item:", itemId);
// Get stream URL
const streamUrl = await repo.getAudioStreamUrl(itemId);
console.log(" Stream URL obtained:", streamUrl?.substring(0, 50) + "...");
log.debug(" Stream URL obtained:", streamUrl?.substring(0, 50) + "...");
if (!streamUrl) {
throw new Error("Failed to get stream URL");
}
// Get target directory
const targetDir = await commands.storageGetPath();
console.log(" Target directory:", targetDir);
log.debug(" Target directory:", targetDir);
// Queue and start download in single atomic operation
const downloadId = await commands.downloadItemAndStart({
@@ -93,16 +96,16 @@
artistName: artistName || null,
albumName: albumName || null,
});
console.log(" Download queued and started with ID:", downloadId);
log.debug(" Download queued and started with ID:", downloadId);
// Refresh downloads list
await downloads.refresh(userId);
} catch (e) {
console.error("❌ Failed to start download:", e);
log.error("❌ Failed to start download:", e);
}
}
} catch (error) {
console.error("Download operation failed:", error);
log.error("Download operation failed:", error);
} finally {
isProcessing = false;
}