mirror of
https://github.com/tiennm99/claude-code-usage-bubble.git
synced 2026-09-05 12:16:49 +00:00
feat: clean-room rewrite — replace ported modules with original implementations
Every Rust module under src/ that previously contained upstream-derivative
code has been replaced by a from-scratch implementation:
diag/ log + simplelog file appender (was: diagnose.rs)
os/ color, dpi, registry, string, theme (was: theme.rs, native_interop.rs)
net/ WinHTTP-based HTTP client (was: ureq + native-tls)
i18n/ TOML-embedded locale tables (was: localization/*.rs)
usage/ trait UsageProvider + ClaudeProvider + ChatGptProvider + refresh
orchestrator + registry (was: poller.rs, models.rs)
creds/ trait CredentialSource + local/WSL/Codex impls (was: poller.rs)
tray/ stateless tray manager + tiny-skia anti-aliased badge renderer
(was: tray_icon.rs)
update/ release fetch + inline cmd /c handoff installer
(was: updater.rs's helper-exe pattern)
Application files (app.rs, bubble.rs, panel.rs, settings.rs) migrated to
the new modules. main.rs declares only the new modules.
NOTICE deleted; LICENSE is plain Apache-2.0; README updated to credit
inspiration rather than claim derivation. Cargo.toml drops ureq + native-tls
+ winres in favour of log + simplelog + thiserror + toml + tiny-skia +
embed-resource. Build script swapped to embed-resource via res/icon.rc.
External contracts preserved unchanged: Anthropic + ChatGPT endpoints and
headers, ~/.claude/.credentials.json + Codex auth.json paths, WSL bridging
via wsl.exe, CLI-driven token refresh, GitHub Releases JSON shape, Windows
registry path for startup, single-instance mutex name.
Phase docs: plans/260516-0707-cleanroom-rewrite/.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
// Diagnostic logging facade backed by `log` + `simplelog`.
|
||||
//
|
||||
// `init(true)` redirects every `log::info!`/`log::warn!`/`log::error!` call
|
||||
// across the crate to a file in `%TEMP%`. With `init(false)` (the default,
|
||||
// i.e. no `--diagnose` flag) logging is a no-op.
|
||||
|
||||
use std::fs::File;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use simplelog::{Config, LevelFilter, WriteLogger};
|
||||
|
||||
const LOG_FILE_NAME: &str = "claude-code-usage-bubble.log";
|
||||
|
||||
/// Initialise file-based logging. Idempotent — second call is a no-op.
|
||||
///
|
||||
/// Returns the resolved log-file path on success, or `Ok(None)` when
|
||||
/// `enabled` is false. `Err` is only returned if the file could not be
|
||||
/// opened (e.g. read-only `%TEMP%`); callers may ignore the error.
|
||||
pub fn init(enabled: bool) -> std::io::Result<Option<PathBuf>> {
|
||||
if !enabled {
|
||||
return Ok(None);
|
||||
}
|
||||
let path = std::env::temp_dir().join(LOG_FILE_NAME);
|
||||
let file = File::create(&path)?;
|
||||
// simplelog will refuse a second init; convert that into a soft no-op.
|
||||
let _ = WriteLogger::init(LevelFilter::Debug, Config::default(), file);
|
||||
log::info!("diagnostic logging enabled at {}", path.display());
|
||||
Ok(Some(path))
|
||||
}
|
||||
Reference in New Issue
Block a user