diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 0b3e98a..0486dfa 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -5,6 +5,7 @@ use sysinfo::{ ProcessStatus, NetworksExt, NetworkExt, + Disk, DiskExt, SystemExt, CpuExt, @@ -75,6 +76,21 @@ pub struct SystemStats { pub disk_free_bytes: u64, } +// Assume MacOS or Linux +#[cfg(not(target_os = "windows"))] +fn filter_disks(disks: &[Disk]) -> Vec<&sysinfo::Disk> { + disks.iter().filter(|disk| { + // Filter for physical disks - typically those mounted at "/" + disk.mount_point() == std::path::Path::new("/") + }) + .collect() +} + +#[cfg(target_os = "windows")] +fn filter_disks(disks: &[Disk]) -> Vec<&sysinfo::Disk> { + disks.iter().collect() +} + #[tauri::command] async fn get_processes(state: State<'_, AppState>) -> Result<(Vec, SystemStats), String> { let processes_data; @@ -121,12 +137,9 @@ async fn get_processes(state: State<'_, AppState>) -> Result<(Vec, *last_update = (current_time, current_rx, current_tx); - // Calculate total disk usage - only for physical disks - let disk_stats = sys.disks().iter() - .filter(|disk| { - // Filter for physical disks - typically those mounted at "/" - disk.mount_point() == std::path::Path::new("/") - }) + // Calculate total disk usage + let disk_stats = filter_disks(&sys.disks()) + .iter() .fold((0, 0, 0), |acc, disk| { ( acc.0 + disk.total_space(), diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index 35b2a40..4a21e08 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -2,35 +2,49 @@ import { writable } from 'svelte/store'; import { themes, type Theme } from '$lib/styles'; function createThemeStore() { - // Get initial theme from localStorage or default to catppuccin - const storedTheme = typeof window !== 'undefined' - ? localStorage.getItem('theme') - : 'catppuccin'; - - const { subscribe, set } = writable(themes[storedTheme || 'catppuccin']); + // Default theme + const defaultTheme = themes.catppuccin; + + // Initialize with default theme + const { subscribe, set } = writable(defaultTheme); + + // Initialize theme on client-side only + if (typeof window !== 'undefined') { + const storedTheme = localStorage.getItem('theme'); + if (storedTheme && themes[storedTheme]) { + set(themes[storedTheme]); + } + } return { subscribe, setTheme: (themeName: string) => { const theme = themes[themeName]; if (theme) { - localStorage.setItem('theme', themeName); + if (typeof window !== 'undefined') { + localStorage.setItem('theme', themeName); + } set(theme); applyTheme(theme); } }, init: () => { - const theme = themes[storedTheme || 'catppuccin']; + const storedTheme = typeof window !== 'undefined' + ? localStorage.getItem('theme') + : null; + const theme = (storedTheme && themes[storedTheme]) || defaultTheme; applyTheme(theme); } }; } function applyTheme(theme: Theme) { - const root = document.documentElement; - Object.entries(theme.colors).forEach(([key, value]) => { - root.style.setProperty(`--${key}`, value); - }); + if (typeof window !== 'undefined') { + const root = document.documentElement; + Object.entries(theme.colors).forEach(([key, value]) => { + root.style.setProperty(`--${key}`, value); + }); + } } export const themeStore = createThemeStore();