mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2026-08-18 11:05:49 +00:00
fix: count local feed episodes as downloaded in subscription counter (#8500)
### Description Local folder feeds have no download records since files are placed directly on-device. The subscription counter showed 0 downloaded episodes even when episodes existed in the folder. Fixes #7534 ### 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] --> - [ ] I have read the contribution guidelines: https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request - [ ] 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 - [ ] I have run the automated code checks using `./gradlew checkstyle lint` - [ ] My code follows the style guidelines of the AntennaPod project: https://antennapod.org/contribute/develop/app/code-style - [ ] 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
This commit is contained in:
@ -1267,9 +1267,14 @@ public class PodDBAdapter {
|
||||
+ " THEN (" + playedTime + ") ELSE 0 END), 0) AS played_time, "
|
||||
+ "IFNULL(SUM(" + TABLE_NAME_FEED_MEDIA + "." + KEY_DURATION + "), 0) AS total_time, "
|
||||
+ "SUM(CASE WHEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOAD_DATE + " > 0"
|
||||
+ " OR " + TABLE_NAME_FEEDS + "." + KEY_DOWNLOAD_URL
|
||||
+ " LIKE '" + Feed.PREFIX_LOCAL_FOLDER + "%'"
|
||||
+ " THEN 1 ELSE 0 END) AS num_downloaded, "
|
||||
+ "SUM(CASE WHEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOAD_DATE + " > 0"
|
||||
+ " THEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_SIZE + " ELSE 0 END) AS download_size, "
|
||||
+ " OR " + TABLE_NAME_FEEDS + "." + KEY_DOWNLOAD_URL
|
||||
+ " LIKE '" + Feed.PREFIX_LOCAL_FOLDER + "%'"
|
||||
+ " THEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_SIZE
|
||||
+ " ELSE 0 END) AS download_size, "
|
||||
+ "SUM(CASE WHEN " + TABLE_NAME_FEED_ITEMS + "." + KEY_READ + " != " + FeedItem.PLAYED
|
||||
+ " AND " + TABLE_NAME_FEED_ITEMS + "." + KEY_PUBDATE + " >= " + sixMonthsAgo
|
||||
+ " THEN 1 ELSE 0 END) AS num_recent_unplayed "
|
||||
@ -1309,6 +1314,8 @@ public class PodDBAdapter {
|
||||
|
||||
public final Map<Long, Integer> getFeedCounters(FeedCounter setting, long... feedIds) {
|
||||
String whereRead;
|
||||
String localFeedCondition = KEY_FEED + " IN (SELECT " + KEY_ID + " FROM " + TABLE_NAME_FEEDS
|
||||
+ " WHERE " + KEY_DOWNLOAD_URL + " LIKE '" + Feed.PREFIX_LOCAL_FOLDER + "%')";
|
||||
switch (setting) {
|
||||
case SHOW_NEW:
|
||||
whereRead = KEY_READ + "=" + FeedItem.NEW;
|
||||
@ -1318,12 +1325,12 @@ public class PodDBAdapter {
|
||||
+ " OR " + KEY_READ + "=" + FeedItem.UNPLAYED + ")";
|
||||
break;
|
||||
case SHOW_DOWNLOADED:
|
||||
whereRead = KEY_DOWNLOAD_DATE + ">0";
|
||||
whereRead = "(" + KEY_DOWNLOAD_DATE + ">0 OR " + localFeedCondition + ")";
|
||||
break;
|
||||
case SHOW_DOWNLOADED_UNPLAYED:
|
||||
whereRead = "(" + KEY_READ + "=" + FeedItem.NEW
|
||||
+ " OR " + KEY_READ + "=" + FeedItem.UNPLAYED + ")"
|
||||
+ " AND " + KEY_DOWNLOAD_DATE + ">0";
|
||||
+ " AND (" + KEY_DOWNLOAD_DATE + ">0 OR " + localFeedCondition + ")";
|
||||
break;
|
||||
case SHOW_NONE:
|
||||
// deliberate fall-through
|
||||
|
||||
@ -28,6 +28,7 @@ public class FeedItemFilterQuery {
|
||||
String keyDownloaded = PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_DOWNLOAD_DATE;
|
||||
String keyMediaId = PodDBAdapter.TABLE_NAME_FEED_MEDIA + "." + PodDBAdapter.KEY_ID;
|
||||
String keyItemId = PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_ID;
|
||||
final String keyFeedId = PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_FEED;
|
||||
String keyFeedItem = PodDBAdapter.KEY_FEEDITEM;
|
||||
String tableQueue = PodDBAdapter.TABLE_NAME_QUEUE;
|
||||
String tableFavorites = PodDBAdapter.TABLE_NAME_FAVORITES;
|
||||
@ -50,10 +51,13 @@ public class FeedItemFilterQuery {
|
||||
} else if (filter.showNotQueued) {
|
||||
statements.add(keyItemId + " NOT IN (SELECT " + keyFeedItem + " FROM " + tableQueue + ") ");
|
||||
}
|
||||
String localFeedCondition = keyFeedId + " IN (SELECT " + PodDBAdapter.KEY_ID
|
||||
+ " FROM " + PodDBAdapter.TABLE_NAME_FEEDS
|
||||
+ " WHERE " + PodDBAdapter.KEY_DOWNLOAD_URL + " LIKE '" + Feed.PREFIX_LOCAL_FOLDER + "%')";
|
||||
if (filter.showDownloaded) {
|
||||
statements.add(keyDownloaded + " > 0 ");
|
||||
statements.add("(" + keyDownloaded + " > 0 OR (" + localFeedCondition + ")) ");
|
||||
} else if (filter.showNotDownloaded) {
|
||||
statements.add(keyDownloaded + " = 0 ");
|
||||
statements.add("(" + keyDownloaded + " = 0 AND NOT (" + localFeedCondition + ")) ");
|
||||
}
|
||||
if (filter.showHasMedia) {
|
||||
statements.add(keyMediaId + " NOT NULL ");
|
||||
|
||||
Reference in New Issue
Block a user