markdown · 2921 bytes Raw Blame History

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.pid on 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 s3 feature flag
  • Parse s3://bucket/prefix URIs
  • 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 video feature 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!