Skip to content

Dev -> Main (Release)#461

Open
dialmaster wants to merge 7 commits intomainfrom
dev
Open

Dev -> Main (Release)#461
dialmaster wants to merge 7 commits intomainfrom
dev

Conversation

@dialmaster
Copy link
Collaborator

@dialmaster dialmaster commented Mar 15, 2026

  • Bulk Import Video Downloads: Add ability to paste or upload multiple YouTube URLs at once for batch downloading, with deduplication and playlist URL detection (Import list URLs #327)
  • Auto-Clean Empty Channel Directories: Automatically remove empty channel folders after video deletions, including leftover metadata files like poster.jpg (fix: stale NFS mounts (#434) #440)
  • Fix yt-dlp Updates for Non-Root Users: Resolve yt-dlp self-update failures when running the container with custom UID/GID by relocating the binary to a writable path (Unable to update yt-dlp using update button from UI #451)

Post-release merge main back into dev
- Move yt-dlp binary from /usr/local/bin/ to /opt/yt-dlp/ with
  world-writable permissions so non-root containers (YOUTARR_UID/GID)
  can perform self-updates
- Detect yt-dlp's "Unable to write to" error message in addition to
  "Permission denied" so users see the helpful platform-specific
  message instead of a generic exit code error
- Add test coverage
…ermissions

fix: yt-dlp update failure when run as non-root user (#451)
- Add CHANNEL_CLEANUP_IGNORABLE_FILES constant for files (poster.jpg) that
  don't count as real content when deciding if a directory is empty
- Add isDirectoryEffectivelyEmpty() with case-insensitive matching for
  ignorable files
- Enhance cleanupEmptyChannelDirectory() with includeIgnorableFiles option
  that deletes ignorable files before rmdir; returns boolean; defaults to
  false for backward compatibility
- Add _tryCleanupChannelDirectory() to videoDeletionModule that runs
  best-effort after every successful deletion (nested and flat modes),
  with parent subfolder cleanup when channel dir is removed
- Replace duplicate 30-line cleanup implementation in downloadExecutor
  with delegation to shared directoryManager function
…elete-directory-with-auto-cleanup-if-directory-is-empty

feat: auto-clean empty channel directories (#443)
- Add BulkImportDialog with textarea and .txt file upload for pasting
  multiple YouTube URLs at once
- Add urlParser utility that extracts video IDs from youtube.com,
  youtu.be, m.youtube.com, music.youtube.com, /shorts/, /embed/, /live/
- Deduplicate URLs within the batch and against the existing queue
- Detect and surface playlist-only URLs with guidance to use individual
  video URLs instead
- Extend VideoChip with a distinct "URL-only import" rendering for
  bulk-imported videos
- Add and update tests
@github-actions
Copy link
Contributor

📊 Test Coverage Report

Backend Coverage

Type Coverage Status
Lines 79.72% 🟡
Statements 79.58% 🟡
Functions 80.72% 🟢
Branches 72.65% 🟡

Frontend Coverage

Type Coverage Status
Lines 87.66% 🟢
Statements 86.93% 🟢
Functions 80.57% 🟢
Branches 81.65% 🟢

Coverage Requirements

  • Minimum threshold: 70% line coverage
  • Backend: ✅ Passes
  • Frontend: ✅ Passes

Coverage report generated for commit 28b2d43

@dialmaster dialmaster changed the title Dev Dev -> Main (Release) Mar 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant