* feat: add tauri-plugin-mihomo * refactor: invock mihomo api by use tauri-plugin-mihomo * chore: todo * chore: update * chore: update * chore: update * chore: update * fix: incorrect delay status and update pretty config * chore: update * chore: remove cache * chore: update * chore: update * fix: app freezed when change group proxy * chore: update * chore: update * chore: add rustfmt.toml to tauri-plugin-mihomo * chore: happy clippy * refactor: connect mihomo websocket * chore: update * chore: update * fix: parse bigint to number * chore: update * Revert "fix: parse bigint to number" This reverts commit 74c006522e23aa52cf8979a8fb47d2b1ae0bb043. * chore: use number instead of bigint * chore: cleanup * fix: rule data not refresh when switch profile * chore: update * chore: cleanup * chore: update * fix: traffic graph data display * feat: add ipc connection pool * chore: update * chore: clippy * fix: incorrect delay status * fix: typo * fix: empty proxies tray menu * chore: clippy * chore: import tauri-plugin-mihomo by using git repo * chore: cleanup * fix: mihomo api * fix: incorrect delay status * chore: update tauri-plugin-mihomo dep chore: update
38 lines
891 B
Rust
38 lines
891 B
Rust
use std::{collections::VecDeque, sync::Arc};
|
|
|
|
use once_cell::sync::OnceCell;
|
|
use parking_lot::{RwLock, RwLockReadGuard};
|
|
|
|
const LOGS_QUEUE_LEN: usize = 100;
|
|
|
|
pub struct Logger {
|
|
logs: Arc<RwLock<VecDeque<String>>>,
|
|
}
|
|
|
|
impl Logger {
|
|
pub fn global() -> &'static Logger {
|
|
static LOGGER: OnceCell<Logger> = OnceCell::new();
|
|
|
|
LOGGER.get_or_init(|| Logger {
|
|
logs: Arc::new(RwLock::new(VecDeque::with_capacity(LOGS_QUEUE_LEN + 10))),
|
|
})
|
|
}
|
|
|
|
pub fn get_logs(&self) -> RwLockReadGuard<'_, VecDeque<String>> {
|
|
self.logs.read()
|
|
}
|
|
|
|
pub fn append_log(&self, text: String) {
|
|
let mut logs = self.logs.write();
|
|
if logs.len() > LOGS_QUEUE_LEN {
|
|
logs.pop_front();
|
|
}
|
|
logs.push_back(text);
|
|
}
|
|
|
|
pub fn clear_logs(&self) {
|
|
let mut logs = self.logs.write();
|
|
logs.clear();
|
|
}
|
|
}
|