Implement comprehensive settings modal with:
- Theme switching (light/dark/auto) with system preference detection
- Language selection for 17 languages with native name sorting
- Developer mode with detailed logging and log viewer
- About section with app info and external links
- Update notification improvements with reduced log spam
Technical improvements:
- Added ThemeContext with persistent state management
- Implemented memory-safe log file reading (5MB limit)
- Fixed all ESLint, TypeScript, and Clippy warnings
- Added JSDoc documentation for public APIs
- Updated README.md and DEVELOPMENT.md with new features
Board detection:
- Parse Armbian filename pattern (Armbian_VERSION_BOARD_DISTRO_...) to extract board name
- Match extracted board name against database to show board image instead of generic icon
- Auto-load board data if not cached with race condition protection
- Fallback to generic icon for non-Armbian images
Decompression improvements:
- Decompress custom images to app cache directory (custom-decompress/)
- Use timestamp-based unique filenames to avoid conflicts
- Cleanup decompressed files after successful flash
Performance:
- Optimize lock scope to release mutex early after extracting boards
- Use compare-and-swap pattern to prevent race conditions
- Replace liblzma C bindings with native Rust lzma-rust2 library
- Use XzReaderMt for parallel decompression across all platforms
- Remove dependency on system xz command
- Use get_recommended_threads() to utilize half of CPU cores
- Clean up unused find_binary and get_binary_search_paths functions
- Update module documentation to reflect native Rust approach
This change provides consistent multi-threaded decompression performance
across macOS, Linux, and Windows without requiring external tools.
Replace PowerShell with Win32 APIs (CreateFileW, DeviceIoControl) for reliable
device enumeration on all Windows editions.
Key improvements:
- Add IOCTL_DISK_GET_DRIVE_GEOMETRY_EX for disk size and geometry
- Add IOCTL_STORAGE_QUERY_PROPERTY for bus type and model detection
- Add drive letter mapping via GetLogicalDrives() and volume extents
- Fix system disk detection (check for C: drive instead of assuming disk 0)
- Add smart stop: halt enumeration after 4 consecutive non-existent drives
- Refactor: extract helpers, reduce code by 26% (475→349 lines)
Error handling:
- Suppress expected errors (1,2,5,21) to eliminate log spam
- Only log unexpected device failures
Fixes device enumeration failures on Windows editions without PowerShell.
- Replace PowerShell-based partition discovery with Windows API
(FindFirstVolumeW/FindNextVolumeW, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS)
- Lock and dismount volumes before raw disk access using
FSCTL_LOCK_VOLUME and FSCTL_DISMOUNT_VOLUME
- Keep volume handles open during operation to prevent Windows remount
- Use FILE_FLAG_WRITE_THROUGH for writes, FILE_FLAG_NO_BUFFERING for
verification to bypass OS cache
- Fix intermittent UI freeze by releasing volume locks in background
threads with FSCTL_UNLOCK_VOLUME before CloseHandle
- Add sector-aligned reads for verification when using NO_BUFFERING
Features:
- Add SHA256 checksum verification after download (before decompression)
- Support cancellation during decompression phase
- Reset storage selection when cancelling flash operation
- Improve log format with ANSI colors for hastebin upload
API & Data:
- Switch to armbian-images.json endpoint (from all-images.json)
- Use board_name from API instead of local board_names.json lookup
- Add file_url_sha field for SHA256 verification
- Remove deprecated board_names.json file
- Add new vendors: Allwinner, ARM, SpacemiT, TQ-Group
- Fix YouYeeToo prefix capitalization
Localization:
- Add verifyingSha translation key to all 15 locales
- Remove unused home.images key from all locales
Documentation:
- Update README to mention SHA256 verification
- Integrate tauri-plugin-updater and tauri-plugin-process
- Rewrite UpdateModal with download progress and changelog display
- Add update manifest generation to CI workflow
- Update i18n translations for all 15 languages
- Configure Ed25519 signature verification for secure updates
- Add src-tauri/target to ESLint ignore list
- Fix React hooks lint warnings with eslint-disable comments
- Replace xz2 with liblzma using static feature to fix macOS
code signature mismatch when using ad-hoc signing
Add Microsoft.Windows.Common-Controls v6.0 dependency to app.manifest
to enable modern dialog APIs required by tauri-plugin-dialog.
Also add Windows 7/8/8.1/10/11 compatibility declarations.
- Add i18next and react-i18next for internationalization
- Add sys-locale Rust crate for cross-platform locale detection
- Add Tauri command get_system_locale for backend locale detection
- Create translation files for 14 languages:
EN, IT, DE, FR, ES, PT, NL, PL, RU, ZH, JA, KO, UK, TR
- Update all UI components to use translations
- Update README with new features and 307+ boards count
- Use lsblk TRAN field for reliable transport type detection
- Check sysfs path for /usb, /mmc_host/, /ata patterns
- Map MMC transport to SD for proper badge display
- Use UDisks2 D-Bus API for privilege escalation via polkit
- App runs as normal user, asks for password only when flashing
- Remove board image cache - load images directly from CDN
- Add periodic fdatasync during write for accurate progress bar
- Invalidate page cache before verification with posix_fadvise
- Remove pkexec wrapper and custom Linux packaging config