feat: custom download directory, Unicode/Chinese path sanitization, audio transcoding with ID3 tags, and auto-downloading - #202
Open
checkcctvwo-star wants to merge 1 commit into
Conversation
…d, downloads queue controls, and batch multi-select - Custom download folder support with Android 11+ MANAGE_EXTERNAL_STORAGE handling - Unicode/Chinese path sanitization and structured episode filename formatting - Background audio transcoding to MP3 with FFmpeg and ID3v2.3 tag embedding - Cold-start crash recovery for unfinished transcode operations - Selective automatic downloading for new episodes of subscribed podcasts - Dual-tab downloads screen (Downloaded / Downloading) with live active task badge - Active downloads queue with real-time progress and controls (pause, resume, retry, cancel) - Multi-select batch mode in Downloaded view with batch delete, add to queue, and toggle played - Simplified Chinese localization with full ARB translation bindings per TRANSLATION.md - Full accessibility support (Semantics / TalkBack / VoiceOver) across new UI elements - Code formatted with dartfmt 120 chars per CONTRIBUTING.md - 96 unit tests passing (100% test coverage for all new features)
checkcctvwo-star
force-pushed
the
feature/enhanced-storage-transcode-autodownload
branch
from
August 27, 2026 13:25
f08f4ea to
0714ef1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hi Ben (@amugofjava),
Thank you for building and maintaining Anytime Podcast Player! It is an exceptional, clean, and distraction-free podcast client.
In accordance with
CONTRIBUTING.md, this PR has been prepared with:master.dart format --line-length 120(dartfmt -l 120).TRANSLATION.mdworkflow usingintl_translation:extract_to_arbandintl_translation:generate_from_arbwith full English and Chinese ARB resources and descriptive metadata.Semanticslabels, tooltips, and touch targets tested for screen readers (Android TalkBack & iOS VoiceOver).flutter analyzereports 0 errors, and all 96 of 96 unit tests pass.Summary of Enhancements
1. Custom Download Root Directory & Android 11+ Permission Handling
/storage/emulated/0/Podcasts). Handled theMANAGE_EXTERNAL_STORAGEpermission flow on Android 11+ (API 30+) gracefully.2. Unicode & Multi-Byte (Chinese/Japanese) Character Support in File Paths
safePath()andsafeFile()stripped non-ASCII characters, causing podcast titles containing Chinese or other Unicode characters to collapse into empty folder names or extension-less files.lib/core/utils.dartto preserve valid Unicode letters while stripping filesystem-reserved characters (\/:*?"<>|). Standardized downloaded episode file names to[YYYY-MM-DD]_[Title].mp3grouped under dedicated podcast folders.3. Audio Transcoding State (
DownloadState.converting) & Progress IndicatorDownloadState.convertingenum state (mapping to index 7 for 100% backward compatibility). Linked FFmpeg conversion progress callbacks to feed0% ~ 100%into the UI, updating circular progress and transport control icons.4. Embedded ID3v2.3 Metadata in Transcoded MP3s
080081082) instead of actual episode names.-metadata title=...,-metadata artist=...,-metadata album=...,-metadata date=...) during transcoding.5. Cold-Start Process Crash Recovery
recoverUnfinishedTranscodes()during download service startup to inspect and automatically resume unfinished conversion queues.6. Selective Auto-Download for Subscribed Podcasts
7. Dual-Tab Downloads Screen & Active Downloads Queue with Interactive Controls
Downloadsinto a dual-tab layout (DownloadedandDownloading (N)with a dynamic task count badge). The Active Downloads Queue presents real-time progress for downloading, FFmpeg transcoding, and failure states, accompanied by inline controls to Pause, Resume, Retry, and Cancel.8. Multi-Select Batch Operations in Downloaded Library
9. Language Switching & Simplified Chinese Localization
zh_Hans.Locale('zh', 'Hans')and generated complete Simplified Chinese string definitions perTRANSLATION.md.Verification & Automated Testing
flutter analyze: 0 errors.CONTRIBUTING.mdandTRANSLATION.md.Please let us know if you have any feedback or would like any part of this PR adjusted or split into separate PRs. Thank you!