- Java 97.9%
- Kotlin 1.2%
- Python 0.5%
- Shell 0.3%
### Description The automatic download check loaded all new episodes into memory before filtering them by feed and episode settings, blocking all database access (e.g. queue loading) for seconds on large libraries, even when automatic download was globally disabled. This moves the eligibility filtering (feed auto-download setting, read state, download state, media presence, feed state, local feeds) into a dedicated database query that only returns actual candidates, and replaces the quadratic list deduplication with an ID-based set lookup. The remaining Java-side filters (per-feed episode filter and the existing safety checks) are kept unchanged, so the set of downloaded episodes is identical to before. Measured on a `~33,000` episode library: queue load during the check drops from `~2.28 s` to `~31 ms` when automatic download is disabled (zero-row result). Closes #8655 ### Checklist <!-- To help us keep the issue tracker clean and work as efficient as possible, please make sure that you have done all of the following. You can tick the boxes below by placing an x inside the brackets like this: [x] --> - [x] I have read the contribution guidelines: https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request - [x] I have performed a self-review of my code, going through my changes line by line and carefully considering why this line change is necessary - [x] I have run the automated code checks using `./gradlew checkstyle lint` - [x] My code follows the style guidelines of the AntennaPod project: https://antennapod.org/contribute/develop/app/code-style - [x] I have mentioned the corresponding issue and the relevant keyword (e.g., "Closes: #xy") in the description (see https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) - [ ] ~If it is a core feature, I have added automated tests~ |
||
|---|---|---|
| .github | ||
| .idea | ||
| app | ||
| app-wearos | ||
| config | ||
| event | ||
| gradle | ||
| model | ||
| net | ||
| parser | ||
| playback | ||
| scripts | ||
| storage | ||
| store-metadata@337d64c872 | ||
| system | ||
| ui | ||
| .editorconfig | ||
| .gitignore | ||
| .gitmodules | ||
| AGENTS.md | ||
| build.gradle | ||
| CLAUDE.md | ||
| common.gradle | ||
| CONTRIBUTING.md | ||
| CONTRIBUTORS.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| mockitoAgent.gradle | ||
| playFlavor.gradle | ||
| README.md | ||
| settings.gradle | ||
AntennaPod
This is the official repository of AntennaPod, the easy-to-use, flexible and open-source podcast manager for Android.

Feedback
You can use the AntennaPod Forum for discussions about the app or just podcasting in general.
Bug reports and feature requests can be submitted here (please read the instructions on how to report a bug and how to submit a feature request first!).
We also hold regular community calls to discuss anything AntennaPod-related. Come join the next call!
Help to test AntennaPod
AntennaPod has many users and we don't want them to run into trouble when we add a new feature. It's important that we have a significant group test our app, so that we know all possible combinations of phones, Android versions and use cases work as expected. Check out our wiki on how to join our Beta testing program! If a bug is reported during the beta period, chances are high that it will be fixed before the upcoming stable version. If it is reported later, fixing might take another full beta cycle. So definitely let us know if something is not right.
License
AntennaPod is licensed under the GNU General Public License (GPL-3.0). You can find the license text in the LICENSE file.
Translating AntennaPod
If you want to translate AntennaPod into another language, you can visit our Weblate page.
Building AntennaPod
You can build AntennaPod just like any other Android project. Refer to the instructions for more details.

