summaryrefslogtreecommitdiff
path: root/core/src/main/java/de/danoeh/antennapod
diff options
context:
space:
mode:
authorMartin Fietz <Martin.Fietz@gmail.com>2017-04-16 19:59:28 +0200
committerGitHub <noreply@github.com>2017-04-16 19:59:28 +0200
commitf1b04d45e4231f47040883d5962557b97821785f (patch)
treee786c3499a15596f673fa46950167f59de1c918a /core/src/main/java/de/danoeh/antennapod
parentaad56bea56c320cc84bd7f9472f3caff996e411c (diff)
parent20365111671e4074d33dbe512c79a5204c4cf254 (diff)
downloadAntennaPod-f1b04d45e4231f47040883d5962557b97821785f.zip
Merge pull request #2301 from ByteHamster/most-played
Sort feeds by number of played episodes
Diffstat (limited to 'core/src/main/java/de/danoeh/antennapod')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java1
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java15
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java8
3 files changed, 24 insertions, 0 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
index 016b6c446..042298e28 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
@@ -126,6 +126,7 @@ public class UserPreferences {
public static final int FEED_ORDER_COUNTER = 0;
public static final int FEED_ORDER_ALPHABETICAL = 1;
public static final int FEED_ORDER_LAST_UPDATE = 2;
+ public static final int FEED_ORDER_MOST_PLAYED = 3;
public static final int FEED_COUNTER_SHOW_NEW_UNPLAYED_SUM = 0;
public static final int FEED_COUNTER_SHOW_NEW = 1;
public static final int FEED_COUNTER_SHOW_UNPLAYED = 2;
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 1d57d902c..7bda08b7a 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
@@ -1080,6 +1080,21 @@ public final class DBReader {
return t1.compareToIgnoreCase(t2);
}
};
+ } else if(feedOrder == UserPreferences.FEED_ORDER_MOST_PLAYED) {
+ final LongIntMap playedCounters = adapter.getPlayedEpisodesCounters(feedIds);
+
+ comparator = (lhs, rhs) -> {
+ long counterLhs = playedCounters.get(lhs.getId());
+ long counterRhs = playedCounters.get(rhs.getId());
+ if(counterLhs > counterRhs) {
+ // podcast with most played episodes first
+ return -1;
+ } else if(counterLhs == counterRhs) {
+ return lhs.getTitle().compareToIgnoreCase(rhs.getTitle());
+ } else {
+ return 1;
+ }
+ };
} else {
comparator = (lhs, rhs) -> {
if(lhs.getItems() == null || lhs.getItems().size() == 0) {
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 111770dab..2d0b5c56a 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
@@ -1463,7 +1463,10 @@ public class PodDBAdapter {
default: // NONE
return new LongIntMap(0);
}
+ return conditionalFeedCounterRead(whereRead, feedIds);
+ }
+ private LongIntMap conditionalFeedCounterRead(String whereRead, long... feedIds) {
// work around TextUtils.join wanting only boxed items
// and StringUtils.join() causing NoSuchMethodErrors on MIUI
StringBuilder builder = new StringBuilder();
@@ -1496,6 +1499,11 @@ public class PodDBAdapter {
return result;
}
+ public final LongIntMap getPlayedEpisodesCounters(long... feedIds) {
+ String whereRead = KEY_READ + "=" + FeedItem.PLAYED;
+ return conditionalFeedCounterRead(whereRead, feedIds);
+ }
+
public final int getNumberOfDownloadedEpisodes() {
final String query = "SELECT COUNT(DISTINCT " + KEY_ID + ") AS count FROM " + TABLE_NAME_FEED_MEDIA +
" WHERE " + KEY_DOWNLOADED + " > 0";