feat: recursive subfolder scanning for feed directories #76

Merged
joezombie merged 2 commits from feat/recursive-subfolder-sync into main 2026-02-14 22:51:13 +00:00
joezombie commented 2026-02-14 22:42:03 +00:00 (Migrated from github.com)

Summary

  • Adds a configurable DirectorySearchDepth setting (0-4) to feeds, allowing media file discovery in nested subdirectories
  • Files in subdirectories are stored as relative paths in Episode.Filename (backward-compatible — root-level files remain just filenames)
  • Media endpoint updated to a catch-all route ({**filePath}) to serve files from subdirectories
  • RSS enclosure URLs encode each path segment individually to preserve / separators
  • Includes EF Core migration, dashboard UI field, and 8 new tests (170 total, all passing)

Test plan

  • Verify existing feeds with depth 0 behave identically to before (no regression)
  • Create a feed with DirectorySearchDepth=2, place files in nested dirs, confirm they appear in RSS feed
  • Verify media endpoint serves files from subdirectories (e.g., /feed/name/media/season1/episode.mp3)
  • Verify .. path traversal is still rejected by the media endpoint
  • Run dotnet test — all 170 tests pass

🤖 Generated with Claude Code

## Summary - Adds a configurable `DirectorySearchDepth` setting (0-4) to feeds, allowing media file discovery in nested subdirectories - Files in subdirectories are stored as relative paths in `Episode.Filename` (backward-compatible — root-level files remain just filenames) - Media endpoint updated to a catch-all route (`{**filePath}`) to serve files from subdirectories - RSS enclosure URLs encode each path segment individually to preserve `/` separators - Includes EF Core migration, dashboard UI field, and 8 new tests (170 total, all passing) ## Test plan - [ ] Verify existing feeds with depth 0 behave identically to before (no regression) - [ ] Create a feed with `DirectorySearchDepth=2`, place files in nested dirs, confirm they appear in RSS feed - [ ] Verify media endpoint serves files from subdirectories (e.g., `/feed/name/media/season1/episode.mp3`) - [ ] Verify `..` path traversal is still rejected by the media endpoint - [ ] Run `dotnet test` — all 170 tests pass 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No description provided.