diff options
author | ByteHamster <info@bytehamster.com> | 2020-10-24 11:38:31 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-10-24 11:49:55 +0200 |
commit | cd100aae15538415dbc896d59732e4b9710c89d1 (patch) | |
tree | d6a4cbead80e6eaf089aa36f1d86f15ec86c47be /core/src/main/java/de/danoeh/antennapod | |
parent | 971df75a25f439d81566a0220f95acb4c667a2bb (diff) | |
download | AntennaPod-cd100aae15538415dbc896d59732e4b9710c89d1.zip |
Improve performance and memory usage of 'recent pubdate' feed sort option
Diffstat (limited to 'core/src/main/java/de/danoeh/antennapod')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java | 21 | ||||
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java | 21 |
2 files changed, 25 insertions, 17 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index c8368506b..5b226ef92 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -850,24 +850,11 @@ public final class DBReader { } }; } else { + final Map<Long, Long> recentPubDates = adapter.getMostRecentItemDates(); comparator = (lhs, rhs) -> { - if (lhs.getItems() == null || lhs.getItems().size() == 0) { - List<FeedItem> items = DBReader.getFeedItemList(lhs); - lhs.setItems(items); - } - if (rhs.getItems() == null || rhs.getItems().size() == 0) { - List<FeedItem> items = DBReader.getFeedItemList(rhs); - rhs.setItems(items); - } - if (lhs.getMostRecentItem() == null) { - return 1; - } else if (rhs.getMostRecentItem() == null) { - return -1; - } else { - Date d1 = lhs.getMostRecentItem().getPubDate(); - Date d2 = rhs.getMostRecentItem().getPubDate(); - return d2.compareTo(d1); - } + long dateLhs = recentPubDates.containsKey(lhs.getId()) ? recentPubDates.get(lhs.getId()) : 0; + long dateRhs = recentPubDates.containsKey(rhs.getId()) ? recentPubDates.get(rhs.getId()) : 0; + return Long.compare(dateRhs, dateLhs); }; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index e552cc180..775485880 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -21,8 +21,10 @@ import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; import de.danoeh.antennapod.core.feed.Chapter; @@ -1189,6 +1191,25 @@ public class PodDBAdapter { return conditionalFeedCounterRead(whereRead, feedIds); } + public final Map<Long, Long> getMostRecentItemDates() { + final String query = "SELECT " + KEY_FEED + "," + + " MAX(" + TABLE_NAME_FEED_ITEMS + "." + KEY_PUBDATE + ") AS most_recent_pubdate" + + " FROM " + TABLE_NAME_FEED_ITEMS + + " GROUP BY " + KEY_FEED; + + Cursor c = db.rawQuery(query, null); + Map<Long, Long> result = new HashMap<>(); + if (c.moveToFirst()) { + do { + long feedId = c.getLong(0); + long date = c.getLong(1); + result.put(feedId, date); + } while (c.moveToNext()); + } + c.close(); + return result; + } + public final int getNumberOfDownloadedEpisodes() { final String query = "SELECT COUNT(DISTINCT " + KEY_ID + ") AS count FROM " + TABLE_NAME_FEED_MEDIA + " WHERE " + KEY_DOWNLOADED + " > 0"; |