A podcast manager for Android https://antennapod.org
  • Java 97.9%
  • Kotlin 1.2%
  • Python 0.5%
  • Shell 0.3%
Find a file
meldron 3ea424da3d
Query auto-download candidates in database instead of loading all epi… (#8656)
### 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~
2026-08-26 18:34:54 +02:00
.github Apply milestone to closed issues as well (#8675) 2026-08-20 22:15:34 +02:00
.idea Add xml indention to code style config (#7993) 2025-09-15 20:46:08 +02:00
app Merge branch 'master' into develop 2026-08-02 14:38:57 +02:00
app-wearos Upgrade to gradle plugin 9.0 (#8302) 2026-08-01 10:02:41 +02:00
config Make sure to close all streams and cursors, enable spotbugs (#8357) 2026-03-22 19:39:14 +01:00
event Migrate Gradle dependencies to version catalogs (#8443) 2026-05-17 07:49:45 +02:00
gradle Upgrade to gradle plugin 9.0 (#8302) 2026-08-01 10:02:41 +02:00
model Merge branch 'master' into develop 2026-08-02 14:38:57 +02:00
net Query auto-download candidates in database instead of loading all epi… (#8656) 2026-08-26 18:34:54 +02:00
parser More efficient chapter parser dispatch (#8416) 2026-05-28 14:24:55 +02:00
playback Merge branch 'master' into develop 2026-08-02 14:38:57 +02:00
scripts Add workflows to ping about play reviews (#7177) 2026-04-04 22:18:27 +02:00
storage Query auto-download candidates in database instead of loading all epi… (#8656) 2026-08-26 18:34:54 +02:00
store-metadata@337d64c872 Move store metadata out of source tree (#8601) 2026-07-15 07:58:01 +02:00
system Migrate Gradle dependencies to version catalogs (#8443) 2026-05-17 07:49:45 +02:00
ui Improve synchronization setup UX (#8669) 2026-08-22 12:56:24 +02:00
.editorconfig Basic WearOS app (#8396) 2026-05-14 14:17:54 +02:00
.gitignore Basic WearOS app (#8396) 2026-05-14 14:17:54 +02:00
.gitmodules Move store metadata out of source tree (#8601) 2026-07-15 07:58:01 +02:00
AGENTS.md Use fixed IDs for home sections (#8611) 2026-07-20 21:59:12 +02:00
build.gradle Migrate Gradle dependencies to version catalogs (#8443) 2026-05-17 07:49:45 +02:00
CLAUDE.md Tweak agent instructions (#8400) 2026-04-19 15:11:38 +02:00
common.gradle Upgrade to gradle plugin 9.0 (#8302) 2026-08-01 10:02:41 +02:00
CONTRIBUTING.md Improvements to CONTRIBUTING.md (#8480) 2026-06-10 19:34:11 +02:00
CONTRIBUTORS.md Update contributors (#8188) 2025-12-27 22:04:16 +01:00
gradle.properties Upgrade to gradle plugin 9.0 (#8302) 2026-08-01 10:02:41 +02:00
gradlew Upgrade to gradle plugin 9.0 (#8302) 2026-08-01 10:02:41 +02:00
gradlew.bat Upgrade to gradle plugin 9.0 (#8302) 2026-08-01 10:02:41 +02:00
LICENSE Relicense under the GPL 2020-11-26 19:50:20 +01:00
mockitoAgent.gradle Merge branch 'master' into develop 2026-08-02 14:38:57 +02:00
playFlavor.gradle Update AGP to 7.4.0 (#5655) 2023-04-01 23:16:53 +02:00
README.md Update readme (#8335) 2026-03-12 21:09:18 +01:00
settings.gradle Basic WearOS app (#8396) 2026-05-14 14:17:54 +02:00

AntennaPod

GitHub check runs License: GPL v3 GitHub Release https://img.shields.io/github/commits-since/AntennaPod/AntennaPod/latest/develop Translations on Weblate Good first issue

This is the official repository of AntennaPod, the easy-to-use, flexible and open-source podcast manager for Android.

Get it on Google Play Get it on F-Droid

Screenshot 0 Screenshot 1 Screenshot 2 Screenshot 3 Screenshot 4 Screenshot 5

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.