What's Changed in v1.24.0
π Features & Enhancements
iCloudPy Library Update
- Updated to iCloudPy version 0.8.0 with adjusted submodule reference by @mandarons
Usage Tracking System Overhaul
-
Complete refactor of usage tracking module achieving 100% code coverage (2004 statements, 0 missed) by @mandarons in #356
- Integrated project-wide logging infrastructure with
get_logger() - Added full type annotations and comprehensive docstrings
- Implemented atomic file operations to prevent data corruption
- Added opt-out mechanism via
app.usage_tracking.enabled: falseconfiguration - Collected anonymized sync statistics with transparent privacy controls
- Extended test coverage from 15 to 31 comprehensive tests
- See
USAGE.mdfor complete privacy documentation
- Integrated project-wide logging infrastructure with
-
Network resilience improvements - Added retry logic with exponential backoff for usage tracking to handle transient network failures by @mandarons in #367
- Configurable via
USAGE_TRACKING_MAX_RETRIES(default: 3 attempts) - Smart retry strategy: retries on network errors, 5xx server errors, and 429 rate limits
- Does NOT retry on non-retriable client errors (4xx except 429)
- Configurable via
Sync Improvements
- Fixed immediate re-sync issue when drive and photos intervals are equal - Added regression tests by @mandarons
- Enhanced error logging for file download operations with
ObjectNotFoundExceptionhandling by @mandarons - Enhanced package type checking with improved error logging and comprehensive tests by @mandarons
π Bug Fixes
Critical File Sync Fixes
- Fixed Error 500 for files with special characters - Resolved authentication errors when syncing files/folders containing URL-encoded special characters (ΓΆ, ΓΌ, Γ€, spaces, %, +, commas) by @mandarons in #360
- Added URL decoding using
urllib.parse.unquote()for drive files, folders, and photos - Example:
Geh.-Erho%CC%88+3%2C0+%25.pdfnow correctly syncs asGeh.-ErhΓΆ+3,0+%.pdf - Fixes issue #198
- Added URL decoding using
Usage Tracking Fixes
-
Fixed heartbeat throttling to use UTC time and calendar day boundaries by @mandarons in #366
- Changed from local time (
datetime.now()) to UTC (datetime.utcnow()) - Changed from 24-hour rolling window to calendar day boundary checking
- Ensures consistent behavior across all timezones
- Prevents double-counting and missed heartbeats
- Changed from local time (
-
Simplified exception test patterns in usage tracking tests by @mandarons
π§ Dependencies
- Bump
rufffrom 0.14.0 to 0.14.1 by @dependabot in #368 - Bump
coveragefrom 7.10.7 to 7.11.0 by @dependabot in #369
π Documentation & Infrastructure
- Added icloudpy as git submodule for development reference by @mandarons
- Updated test coverage and documentation for usage tracking module
π― Highlights
This release focuses on reliability, correctness, and transparency:
- β 100% test coverage maintained across all modified modules
- β All 413 repository tests passing with comprehensive new test cases
- β Zero breaking changes - fully backward compatible
- β Enhanced privacy controls with transparent opt-out mechanisms
- β Production-ready quality with atomic operations and error resilience
Full Changelog: v1.23.0...v1.24.0