Releases: pedrofuentes/github-saver
Releases · pedrofuentes/github-saver
v0.2.5-beta
What's New
⚡ Instant Startup with Cache
- Screensaver now loads instantly from cached data — no waiting for API fetch
- Background refresh updates cache for the next launch
- Validates cached contributions have actual year data before use
🎨 Loading Page
- New animated loading screen with GitHub-style contribution grid animation
- Shown on first launch while fetching data (before any cache exists)
🔧 Shared Data Parser Utilities
- Extracted common date/week alignment logic into \data-parser.js\
- New shared functions: \�uildDateMap, \�lignDaysToToday, \�lignWeeksToToday, \ormatDate\
- All modules refactored to use shared utilities instead of duplicating date logic
🏗️ Architecture Improvements
- \ScreensaverForm\ supports async \pendingDataTask\ for non-blocking data fetch with 30s timeout
- \TryLoadCachedData\ provides instant cached data path in \Program.cs\
- Cleaner early-guard pattern in module navigation logic
🧪 New Tests
- \ProgramTests\ — \TryLoadCachedData\ validation (cached data, empty contributions, missing files)
- \data-parser.test.js\ — shared parser utility tests (200 lines)
- \loading-page.test.js\ — loading page rendering tests
- \module-fallback.test.js\ — module data fallback tests
Screensaver Modules
- heatmap-multidata, heatmap-years, rain-days, rain-repos, heatmap-rain-weeks
Installation
- Download \GithubSaver.msi\ below
- Run the installer
- Open Screen Saver Settings and select GithubSaver
- Click Settings to configure your GitHub username and personal access token
Requirements
- Windows 10/11
- WebView2 Runtime (pre-installed on Windows 11)
Full Changelog
v0.2.4-beta
What's New
Security Hardening
- GraphQL injection prevention — use variables instead of string interpolation
- Path traversal protection — whitelist validation for module names
- Content Security Policy headers on all HTML files
- XSS prevention — innerHTML replaced with DOM API in config UI
- Safe JavaScript injection via JSON.parse() wrapper
- Input validation on all settings (TTL clamping, URL scheme check, module whitelist)
Architecture Improvements
- Extracted ILogger interface + FileLogger for dependency injection
- Extracted WebView2Helper — shared initialization with 10s timeout
- Extracted FileCacheService + ICacheService from GitHubDataService
- Extracted shared data-parser.js — removed duplicated code from 4 modules
- Settings schema versioning with migration support
- Type-safe PostMessage contract via MessageTypes constants
Bug Fixes
- Fixed data not loading — restored in-memory data flow
- Fixed empty API responses being cached
- Fixed missing token error message
- Credential error handling — config dialog no longer crashes
- Logger now includes stack traces and inner exception details
- Atomic settings write — prevents corruption on disk-full
Performance
- Pre-sort animation drops by layer (was sorting every frame at 60fps)
- Logger queue capped at 1000 entries
- HttpClient properly disposed via IDisposable
- Fetch timeout increased from 5s to 15s for first-time users
Installer
- User data cleaned up on uninstall, preserved on upgrade
- Auto-incrementing build number for reliable MSI upgrades
- Release build script (build-release.ps1)
Tests
- 255 C# + 110 JS = 365 total tests
Screensaver Modules
heatmap-multidata, heatmap-years, rain-days, rain-repos, heatmap-rain-weeks
Installation
- Download GithubSaver.msi and run the installer
- Open Screen Saver Settings and select GithubSaver
- Click Settings to configure your GitHub username and token
Requirements
- Windows 10/11
- WebView2 Runtime (pre-installed on Windows 11)