### Description
Work around incorrect redirects duplicating subscriptions on sync. We
already had handling for proper redirects. Note that we still subscribe
to the non-redirected url, so sync status might be inconsistent until
the podcast creator fixes their feed. However, that is better than
duplicated subscriptions.
Closes#8382
### 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)
- [x] If it is a core feature, I have added automated tests
### Description
Migrate Gradle dependencies to version catalogs. This is the modern
style of managing dependencies. Confirmed with diff on `./gradlew
:app:dependencies` that no versions changed.
### 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)
- [x] If it is a core feature, I have added automated tests
### Description
An initial minimal implementation for a Wear OS app. So far, the wear
app can only display episodes and start them on the phone. No standalone
features available yet.
Contributes to #4264
### 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 spotbugsPlayDebug spotbugsDebug`
- [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
### Description
Tweak agent instructions, with special focus on Claude.
### 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 spotbugsPlayDebug spotbugsDebug`
- [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
### Description
Fix some lint warnings and suppress the others. This makes builds easier
because IntelliJ no longer jumps to those warnings (and it prevents more
from showing up).
Initial prototype: Claude, $1.99
### 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 spotbugsPlayDebug spotbugsDebug`
- [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
### Description
Previewed feeds (with `STATE_NOT_SUBSCRIBED`) were being synced to
GPodder-compatible servers as though they were real subscriptions. This
caused previewed feeds to appear as subscribed on other devices after
sync.
The fix adds a `subscribedOnly` parameter to `getFeedListDownloadUrls`
and `getFeedCursorDownloadUrls`. The sync service passes `true` so only
actually subscribed feeds are uploaded.
Closes: #8361
### 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
lint spotbugsPlayDebug spotbugsDebug`
- [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
### Description
Move database calls from `Schedulers.io` to `Schedulers.computation`.
The io scheduler is unbounded, starting an arbitrary number of threads.
This might be a reason for the lock inflation failing. In contrast, the
`compute` scheduler is limited by the number of available threads.
Contributes to #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
lint spotbugsPlayDebug spotbugsDebug`
- [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
### 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
### Description
Remove Android 5 support. For supporting Chromecast playback via media3,
we need to upgrade the media3 library. This library no longer supports
Android 5, so we need to bump our minimum version as well. Only 0.13% of
our Google Play users are still on this ancient Android version released
in 2014. Dropping support seems okay now, especially considering that no
one should expose such an old device to the internet anymore. The app
will continue to work on Android 5 but will not receive updates anymore.
### 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
- [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
Connect to each newly added URL with a HEAD request.
If there is a redirect to an existing URL, ignore the added feed.
This does not handle `itunes:new-feed-url` or other redirects.
This will likely still cause problems with synchronization
because the server still knows the old url.
However, it makes the situation better than it was before by avoiding the duplicates.
For a proper fix, we need a new protocol that can deal with redirects more elegantly
Apparently requesting to run the manager cancels the already running one on some devices.
This leads to an endless loop trying to refresh over and over again.
- Enables users to manually trigger sync
- Makes sure that we actually refresh when a new feed arrives:
Previously, we might request the feed to be refreshed but then don't
actually wait for it to be completed because the refresh service
wouldn't start up quickly enough.
This makes sure that we do not try to sync again before the refresh
actually went through, even if the sync service is called multiple times.
- Run Checkstyle with gradle to make it easier for users
- No longer needs different configuration for new code
- Exclude current violations
- Fix some violations that somehow couldn't be specified in the exclusion file
- Print SpotBugs/Lint/Checkstly violations in GitHub format
- Then the CI run gets annotated on the web UI
Half of the toplist no longer returns a valid podcast feed.
Some of the suggested tags are just random characters and none of them
is actually helpful.
This does not remove search or synchronization.
Just gpodder discovery.