diff options
author | ByteHamster <info@bytehamster.com> | 2022-08-26 00:10:51 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2022-08-26 20:26:28 +0200 |
commit | 28a397c8979f143fba74ea5d385e74bae62c6673 (patch) | |
tree | 6aae4c25eded2930161fe8bf125927ae79bb9420 /core | |
parent | 6e199de7ab6ba6d31f6cc0db97ccf9ab3a73c532 (diff) | |
download | AntennaPod-28a397c8979f143fba74ea5d385e74bae62c6673.zip |
Make statistics loading more efficient
Diffstat (limited to 'core')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java | 61 |
1 files changed, 21 insertions, 40 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 e7e8e9587..36c1c6694 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 @@ -7,7 +7,6 @@ import androidx.collection.ArrayMap; import android.text.TextUtils; import android.util.Log; -import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -852,52 +851,34 @@ public final class DBReader { adapter.open(); StatisticsResult result = new StatisticsResult(); - List<Feed> feeds = getFeedList(); - for (Feed feed : feeds) { - long feedPlayedTime = 0; - long feedTotalTime = 0; - long episodes = 0; - long episodesStarted = 0; - long totalDownloadSize = 0; - long episodesDownloadCount = 0; - List<FeedItem> items = getFeed(feed.getId()).getItems(); - for (FeedItem item : items) { - FeedMedia media = item.getMedia(); - if (media == null) { - continue; - } - - if (media.getLastPlayedTime() > 0 && media.getPlayedDuration() != 0) { - result.oldestDate = Math.min(result.oldestDate, media.getLastPlayedTime()); - } - if (media.getLastPlayedTime() >= timeFilterFrom - && media.getLastPlayedTime() <= timeFilterTo) { - if (media.getPlayedDuration() != 0) { - feedPlayedTime += media.getPlayedDuration() / 1000; - } else if (includeMarkedAsPlayed && item.isPlayed()) { - feedPlayedTime += media.getDuration() / 1000; - } - } + try (Cursor cursor = adapter.getFeedStatisticsCursor(includeMarkedAsPlayed, timeFilterFrom, timeFilterTo)) { + int indexOldestDate = cursor.getColumnIndexOrThrow("oldest_date"); + int indexNumEpisodes = cursor.getColumnIndexOrThrow("num_episodes"); + int indexEpisodesStarted = cursor.getColumnIndexOrThrow("episodes_started"); + int indexTotalTime = cursor.getColumnIndexOrThrow("total_time"); + int indexPlayedTime = cursor.getColumnIndexOrThrow("played_time"); + int indexNumDownloaded = cursor.getColumnIndexOrThrow("num_downloaded"); + int indexDownloadSize = cursor.getColumnIndexOrThrow("download_size"); - boolean markedAsStarted = item.isPlayed() || media.getPosition() != 0; - boolean hasStatistics = media.getPlaybackCompletionDate() != null || media.getPlayedDuration() > 0; - if (hasStatistics || (includeMarkedAsPlayed && markedAsStarted)) { - episodesStarted++; - } + while (cursor.moveToNext()) { + Feed feed = extractFeedFromCursorRow(cursor); - feedTotalTime += media.getDuration() / 1000; + long feedPlayedTime = Long.parseLong(cursor.getString(indexPlayedTime)) / 1000; + long feedTotalTime = Long.parseLong(cursor.getString(indexTotalTime)) / 1000; + long episodes = Long.parseLong(cursor.getString(indexNumEpisodes)); + long episodesStarted = Long.parseLong(cursor.getString(indexEpisodesStarted)); + long totalDownloadSize = Long.parseLong(cursor.getString(indexDownloadSize)); + long episodesDownloadCount = Long.parseLong(cursor.getString(indexNumDownloaded)); + long oldestDate = Long.parseLong(cursor.getString(indexOldestDate)); - if (media.isDownloaded()) { - totalDownloadSize += new File(media.getFile_url()).length(); - episodesDownloadCount++; + if (episodes > 0 && oldestDate < Long.MAX_VALUE) { + result.oldestDate = Math.min(result.oldestDate, oldestDate); } - episodes++; + result.feedTime.add(new StatisticsItem(feed, feedTotalTime, feedPlayedTime, episodes, + episodesStarted, totalDownloadSize, episodesDownloadCount)); } - result.feedTime.add(new StatisticsItem(feed, feedTotalTime, feedPlayedTime, episodes, - episodesStarted, totalDownloadSize, episodesDownloadCount)); } - adapter.close(); return result; } |