Deferred Targets - Completion Checklist
Complete all items before Phase 5. Ordered by effort (low → high).
Low Effort
Phase 4: PID File Management
- Write PID to
$XDG_RUNTIME_DIR/garbg.pidon daemon start - Check for stale PID file and clean up
- Remove PID file on graceful shutdown
Phase 4: Signal Handling
- Handle SIGHUP → reload configuration
- Handle SIGTERM → graceful shutdown
- Handle SIGINT → graceful shutdown
Phase 3: Wire Disk Cache to Daemon
- Use DiskCache when fetching remote images in daemon
- Check cache before HTTP fetch
- Store fetched images in cache
Phase 4: Test gar Integration
- Verify gar IPC connection works
- Test workspace change events trigger wallpaper switch
- Fix any parsing issues with gar events
Medium Effort
Phase 3: Wire Provider Trait Architecture
- Refactor HTTP fetching to use HttpProvider
- Refactor GitHub fetching to use GitHubProvider
- Refactor local files to use FileProvider
- Use ProviderRegistry for URI dispatch
- Remove ad-hoc implementations from main.rs
Phase 2: Animated WebP Support
- Detect animated WebP files
- Use image crate's WebP animation support (if available)
- Integrate with existing AnimatedGif infrastructure
- Test with sample animated WebP files
Phase 2: Frame Pre-rendering Ring Buffer
- Create ring buffer struct (~30 frames)
- Background thread for frame decoding
- Producer-consumer with crossbeam channels
- Memory-efficient frame recycling
Phase 3: S3 Provider
- Add
s3feature flag - Parse
s3://bucket/prefixURIs - List objects with prefix (aws-sdk-s3 or rusoto)
- Support S3-compatible endpoints (MinIO)
- Handle authentication (env vars, credentials file)
High Effort
Phase 2: Animated PNG (APNG) Support
- Add APNG decoder (png crate or apng crate)
- Extract frames and delays
- Integrate with animation infrastructure
- Test with sample APNG files
Phase 2: Video Decoding (ffmpeg-next)
- Add
videofeature flag - Integrate ffmpeg-next crate
- Decode video frames to RGBA
- Handle common codecs (H.264, VP9, AV1)
- Support MP4 and WebM containers
- Audio always muted (no PulseAudio complexity)
- Integrate with animation loop for playback
Progress Tracker
| Phase | Section | Status |
|---|---|---|
| 4 | PID File | ✅ |
| 4 | Signal Handling | ✅ |
| 3 | Disk Cache in Daemon | ✅ |
| 4 | Test gar Integration | ✅ |
| 3 | Provider Trait Wiring | ✅ |
| 2 | Animated WebP | ✅ |
| 2 | Ring Buffer | ✅ |
| 3 | S3 Provider | ✅ |
| 2 | APNG Support | ✅ |
| 2 | Video Decoding | ✅ |
Completion Criteria
All boxes checked = Ready for Phase 5 (Lua, multi-monitor, docs)
STATUS: COMPLETE - All deferred targets implemented!
View source
| 1 | # Deferred Targets - Completion Checklist |
| 2 | |
| 3 | Complete all items before Phase 5. Ordered by effort (low → high). |
| 4 | |
| 5 | --- |
| 6 | |
| 7 | ## Low Effort |
| 8 | |
| 9 | ### Phase 4: PID File Management |
| 10 | - [x] Write PID to `$XDG_RUNTIME_DIR/garbg.pid` on daemon start |
| 11 | - [x] Check for stale PID file and clean up |
| 12 | - [x] Remove PID file on graceful shutdown |
| 13 | |
| 14 | ### Phase 4: Signal Handling |
| 15 | - [x] Handle SIGHUP → reload configuration |
| 16 | - [x] Handle SIGTERM → graceful shutdown |
| 17 | - [x] Handle SIGINT → graceful shutdown |
| 18 | |
| 19 | ### Phase 3: Wire Disk Cache to Daemon |
| 20 | - [x] Use DiskCache when fetching remote images in daemon |
| 21 | - [x] Check cache before HTTP fetch |
| 22 | - [x] Store fetched images in cache |
| 23 | |
| 24 | ### Phase 4: Test gar Integration |
| 25 | - [x] Verify gar IPC connection works |
| 26 | - [x] Test workspace change events trigger wallpaper switch |
| 27 | - [x] Fix any parsing issues with gar events |
| 28 | |
| 29 | --- |
| 30 | |
| 31 | ## Medium Effort |
| 32 | |
| 33 | ### Phase 3: Wire Provider Trait Architecture |
| 34 | - [x] Refactor HTTP fetching to use HttpProvider |
| 35 | - [x] Refactor GitHub fetching to use GitHubProvider |
| 36 | - [x] Refactor local files to use FileProvider |
| 37 | - [x] Use ProviderRegistry for URI dispatch |
| 38 | - [x] Remove ad-hoc implementations from main.rs |
| 39 | |
| 40 | ### Phase 2: Animated WebP Support |
| 41 | - [x] Detect animated WebP files |
| 42 | - [x] Use image crate's WebP animation support (if available) |
| 43 | - [x] Integrate with existing AnimatedGif infrastructure |
| 44 | - [x] Test with sample animated WebP files |
| 45 | |
| 46 | ### Phase 2: Frame Pre-rendering Ring Buffer |
| 47 | - [x] Create ring buffer struct (~30 frames) |
| 48 | - [x] Background thread for frame decoding |
| 49 | - [x] Producer-consumer with crossbeam channels |
| 50 | - [x] Memory-efficient frame recycling |
| 51 | |
| 52 | ### Phase 3: S3 Provider |
| 53 | - [x] Add `s3` feature flag |
| 54 | - [x] Parse `s3://bucket/prefix` URIs |
| 55 | - [x] List objects with prefix (aws-sdk-s3 or rusoto) |
| 56 | - [x] Support S3-compatible endpoints (MinIO) |
| 57 | - [x] Handle authentication (env vars, credentials file) |
| 58 | |
| 59 | --- |
| 60 | |
| 61 | ## High Effort |
| 62 | |
| 63 | ### Phase 2: Animated PNG (APNG) Support |
| 64 | - [x] Add APNG decoder (png crate or apng crate) |
| 65 | - [x] Extract frames and delays |
| 66 | - [x] Integrate with animation infrastructure |
| 67 | - [x] Test with sample APNG files |
| 68 | |
| 69 | ### Phase 2: Video Decoding (ffmpeg-next) |
| 70 | - [x] Add `video` feature flag |
| 71 | - [x] Integrate ffmpeg-next crate |
| 72 | - [x] Decode video frames to RGBA |
| 73 | - [x] Handle common codecs (H.264, VP9, AV1) |
| 74 | - [x] Support MP4 and WebM containers |
| 75 | - [x] Audio always muted (no PulseAudio complexity) |
| 76 | - [x] Integrate with animation loop for playback |
| 77 | |
| 78 | --- |
| 79 | |
| 80 | ## Progress Tracker |
| 81 | |
| 82 | | Phase | Section | Status | |
| 83 | |-------|---------|--------| |
| 84 | | 4 | PID File | ✅ | |
| 85 | | 4 | Signal Handling | ✅ | |
| 86 | | 3 | Disk Cache in Daemon | ✅ | |
| 87 | | 4 | Test gar Integration | ✅ | |
| 88 | | 3 | Provider Trait Wiring | ✅ | |
| 89 | | 2 | Animated WebP | ✅ | |
| 90 | | 2 | Ring Buffer | ✅ | |
| 91 | | 3 | S3 Provider | ✅ | |
| 92 | | 2 | APNG Support | ✅ | |
| 93 | | 2 | Video Decoding | ✅ | |
| 94 | |
| 95 | --- |
| 96 | |
| 97 | ## Completion Criteria |
| 98 | |
| 99 | All boxes checked = Ready for Phase 5 (Lua, multi-monitor, docs) |
| 100 | |
| 101 | **STATUS: COMPLETE** - All deferred targets implemented! |