107 Commits

Author SHA1 Message Date
5de8d4b73f Merge branch 'master' into develop 2026-03-22 19:43:30 +01:00
292320ffee Make sure to close all streams and cursors, enable spotbugs (#8357)
### Description

Make sure to close all streams and cursors, enable spotbugs

### 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
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [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)
- [x] If it is a core feature, I have added automated tests
2026-03-22 19:39:14 +01:00
a6899a43b2 Reduce number of database queries (#8358)
### Description

Reduce number of database queries. Instead of loading queue and
favorites lists in separate queries, let sqlite do the join

### 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
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [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)
- [x] If it is a core feature, I have added automated tests
2026-03-22 10:57:38 +01:00
b07b9d249b Fix "Too many inflation attempts" crash from SQLite lock contention (#8346)
### Description

Remove the explicit disableWriteAheadLogging() call in
PodDBAdapter.openDb(). Without WAL, SQLite allows only one connection at
a time, forcing all threads to serialize on a single lock. When multiple
UI fragments (ExternalPlayerFragment, CoverFragment,
ItemDescriptionFragment, PlaybackHistoryFragment) simultaneously query
the database on separate RxJava IO threads, the resulting lock
contention on the same monitor exhausts the ART monitor inflation limit,
causing a fatal crash (monitor.cc:1125).

Fixes #8338

### 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
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [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)
- [x] If it is a core feature, I have added automated tests
2026-03-17 00:13:40 +01:00
17a9bc1b47 Flush WAL and verify temp copy before database export (#8347)
### Description

We don't have WAL enabled right now, but before we can, we have to make
sure that imports/exports handle WAL properly by flushing the file
before exporting. Also, copy the file to a temporary location and fail
if it is invalid to ensure that what we are exporting is actually a
proper backup.

Contributes to #8338
Closes: #5099

### Checklist
- [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
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [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)
- [x] If it is a core feature, I have added automated tests

<!-- START COPILOT CODING AGENT TIPS -->
---

📍 Connect Copilot coding agent with [Jira](https://gh.io/cca-jira-docs),
[Azure Boards](https://gh.io/cca-azure-boards-docs) or
[Linear](https://gh.io/cca-linear-docs) to delegate work to Copilot in
one click without leaving your project management tool.

---------

Co-authored-by: ByteHamster <5811634+ByteHamster@users.noreply.github.com>
Co-authored-by: pc-bert <88080348+pc-bert@users.noreply.github.com>
2026-03-16 23:29:28 +01:00
95d3f37d25 Build media item stub on main thread and full item on background thread (#8321)
### Description

Build media item stub in main thread and full item in background thread.
We later plan to add more things to load to the main item creation code,
which should not run on the main thread.
Contributes to #8261

### 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
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [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)
- [x] If it is a core feature, I have added automated tests
2026-03-08 08:38:59 +01:00
5ee4012160 Re-implement delete after playback (#8299)
### Description

Re-implement delete after playback in the new playback service. To avoid
a race condition (that we already had in the old playback service), we
have to replace `setMedia` in `deleteFeedMediaSynchronous` with a new
`setMediaDownloadInformation`. Otherwise, we might reset the position
but then it gets overwritten again by deletion setting all attributes.

Closes #8285

### 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
spotbugsPlayDebug spotbugsDebug :app:lintPlayDebug`
- [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)
- [x] If it is a core feature, I have added automated tests
2026-02-21 17:46:08 +01:00
e709128b57 Fix multi select actions to match single select action (#8233) 2026-01-19 22:19:51 +01:00
4f4fd516d9 Move 'Untagged' chip to end and center selected tag in subscription view (#8141) 2025-12-11 22:45:45 +01:00
eb4cc10c45 Add default sort for episode list (#7972) 2025-12-05 22:19:27 +01:00
41edd00b39 Crash debug version when doing I/O on main thread (#8064) 2025-11-02 08:33:00 +01:00
27d9d0ca9b Merge branch 'master' into develop 2025-10-31 21:18:08 +01:00
0debbc3973 Add episode count sleep timers (#7841) 2025-10-30 22:51:03 +01:00
77c813f62c Faster unit tests (#8043) 2025-10-14 07:43:10 +02:00
23d862185d Add more explicit feature to archive feeds (#8022) 2025-10-11 13:48:08 +02:00
07e72f8b9d Ignore 'show in main list' for subscriptions screen (#8001)
This no longer makes sense with tags always at the top,
users can always create their own main list.

After we remove the side navigation, we can remove the tag setting.
2025-09-21 15:41:33 +02:00
af187ca551 Show all tags on subscriptions screen, even if filtered (#7994) 2025-09-16 20:19:17 +02:00
0772b4998d Fix and tune feed item duplicate guesser (#7979) 2025-09-12 21:00:56 +02:00
9db9dc7732 Run download log cleaner regularly (#7975) 2025-09-07 22:34:40 +02:00
e8a18d4887 Only load the download log entries we actually need (#7974) 2025-09-07 21:39:26 +02:00
ad94f2f647 Tags above subscriptions screen (#7954) 2025-08-31 11:35:04 +02:00
c8cd0de157 Handle release stats for multi-per-day podcasts (#7755) 2025-08-20 20:23:55 +02:00
c2f7dabc8b Add incompletely played episodes to playback history (#7815) 2025-05-27 22:52:43 +02:00
b196f348bf Fix Echo "check out again" recommendation logic (#7803) 2025-05-08 22:54:21 +02:00
5459368e51 Add move to top/bottom multi select action in queue (#7696) 2025-04-09 20:19:35 +02:00
84907b114f Merge branch 'master' into develop 2025-04-08 22:54:15 +02:00
7a79fdef9c Add more real-world release date tests (#7747) 2025-04-08 22:36:05 +02:00
4a9b37f6f8 Fix new episodes action for local feeds (#7745) 2025-04-07 23:25:52 +02:00
5b2648393a Ignore new episodes action if autodownload is enabled (#7728) 2025-03-31 21:13:33 +02:00
f89e54a99d Fix removing items from favorites (#7720)
We check the feed id and the item id when removing from favorites.
However, the item ids are unique, so there is no need to check the feed id.
Actually, I have no idea why it was even added there in the first place.

Now that we have users who somehow ended up with a database where
they cannot un-favorite some of the items, removed the check.

Also make sure to clear the favorites table when deleting a feed.
2025-03-29 15:46:54 +01:00
ba56f5c76e Show social comment icon on playing screen (#7127) 2025-02-21 22:34:31 +01:00
dd82ec143f Reduce log spam during feed update (#7667) 2025-02-21 21:51:50 +01:00
3ed5b0bfa4 Add option to automatically download queue (#7627)
We already added the queue to the auto-download candidates.
Now that auto-download was rewritten to not be a "master switch",
the code is called even if auto-download is turned off for all subscriptions.
This lead to queued episodes being downloaded for users who had auto-download disabled.

Convert the feature to an explicit setting to avoid behavior changes for users.
Also, this implements a setting to auto-download the queue,
which users have requested because they did not know that AntennaPod already does this.
Finally, it should solve user confusion where they automatically add episodes to the queue
but set the auto-download filter to ignore specific episodes.
2025-02-02 19:28:23 +01:00
e4ac872b74 Convert autodownloads from master switch to per-podcast setting (#7458) 2025-01-18 12:31:44 +01:00
35241b64fd Fix non-subscribed feed cleaner removing feed even when episode is queued (#7572) 2024-12-27 10:55:57 +01:00
4a92a5e019 Make sync service interface more standard (#7479) 2024-10-30 21:30:29 +01:00
a0b751e64d Remove imports only used in JavaDoc (#7468) 2024-10-27 21:11:24 +01:00
7f45f2f9b9 Fix sorting episodes by file name (#7456) 2024-10-19 22:46:35 +02:00
d3ec4139da Fix random episodes section not being random (#7416)
We used "GROUP BY" without specifying which item in the group to take.
Apparently, SQLite then takes a deterministic item
instead of the first (randomly sorted) item.
2024-09-21 13:32:27 +02:00
6b189a0d47 Delete non-subscribed, non-interacted feeds earlier (#7399) 2024-09-14 11:46:39 +02:00
2ad713772d Show subscribe nag only after interacting with episode (#7378) 2024-09-03 19:41:48 +02:00
6b63c6b9bb Fix feed counters including non-subscribed podcasts (#7334) 2024-08-24 10:54:08 +02:00
251b17c7df Ignore new episodes action for non-subscribed feeds (#7335) 2024-08-24 09:37:47 +02:00
c51656f8e7 Spotbugs cleanup part 2 (#7204) 2024-06-09 20:47:49 +02:00
0a768e6286 Merge branch 'master' into develop 2024-05-29 18:27:53 +02:00
155d769fca Fix marking as played when there is no media (#7192) 2024-05-24 10:00:28 +02:00
e856a9f118 Display transcript text and follow along the audio (#7103) 2024-05-18 18:58:36 +02:00
27e9bf36b1 Download and store transcript text (#6797) 2024-05-18 18:58:01 +02:00
8adbad9b66 Parse podcast:transcript url and store in SQLite (#6739) 2024-05-18 18:57:57 +02:00
084723ad76 Add episodes without subscribing (#7098) 2024-05-09 11:44:26 +02:00