Merge pull request #6039 from ByteHamster/statistics-performance
Make statistics loading more efficient
This commit is contained in:
commit
ec92722c04
|
@ -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;
|
||||
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");
|
||||
|
||||
while (cursor.moveToNext()) {
|
||||
Feed feed = extractFeedFromCursorRow(cursor);
|
||||
|
||||
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 (episodes > 0 && oldestDate < Long.MAX_VALUE) {
|
||||
result.oldestDate = Math.min(result.oldestDate, oldestDate);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
boolean markedAsStarted = item.isPlayed() || media.getPosition() != 0;
|
||||
boolean hasStatistics = media.getPlaybackCompletionDate() != null || media.getPlayedDuration() > 0;
|
||||
if (hasStatistics || (includeMarkedAsPlayed && markedAsStarted)) {
|
||||
episodesStarted++;
|
||||
}
|
||||
|
||||
feedTotalTime += media.getDuration() / 1000;
|
||||
|
||||
if (media.isDownloaded()) {
|
||||
totalDownloadSize += new File(media.getFile_url()).length();
|
||||
episodesDownloadCount++;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -226,46 +226,6 @@ public class PodDBAdapter {
|
|||
+ TABLE_NAME_FAVORITES + "(" + KEY_ID + " INTEGER PRIMARY KEY,"
|
||||
+ KEY_FEEDITEM + " INTEGER," + KEY_FEED + " INTEGER)";
|
||||
|
||||
/**
|
||||
* Select all columns from the feed-table
|
||||
*/
|
||||
private static final String[] FEED_SEL_STD = {
|
||||
TABLE_NAME_FEEDS + "." + KEY_ID,
|
||||
TABLE_NAME_FEEDS + "." + KEY_TITLE,
|
||||
TABLE_NAME_FEEDS + "." + KEY_CUSTOM_TITLE,
|
||||
TABLE_NAME_FEEDS + "." + KEY_FILE_URL,
|
||||
TABLE_NAME_FEEDS + "." + KEY_DOWNLOAD_URL,
|
||||
TABLE_NAME_FEEDS + "." + KEY_DOWNLOADED,
|
||||
TABLE_NAME_FEEDS + "." + KEY_LINK,
|
||||
TABLE_NAME_FEEDS + "." + KEY_DESCRIPTION,
|
||||
TABLE_NAME_FEEDS + "." + KEY_PAYMENT_LINK,
|
||||
TABLE_NAME_FEEDS + "." + KEY_LASTUPDATE,
|
||||
TABLE_NAME_FEEDS + "." + KEY_LANGUAGE,
|
||||
TABLE_NAME_FEEDS + "." + KEY_AUTHOR,
|
||||
TABLE_NAME_FEEDS + "." + KEY_IMAGE_URL,
|
||||
TABLE_NAME_FEEDS + "." + KEY_TYPE,
|
||||
TABLE_NAME_FEEDS + "." + KEY_FEED_IDENTIFIER,
|
||||
TABLE_NAME_FEEDS + "." + KEY_AUTO_DOWNLOAD_ENABLED,
|
||||
TABLE_NAME_FEEDS + "." + KEY_KEEP_UPDATED,
|
||||
TABLE_NAME_FEEDS + "." + KEY_IS_PAGED,
|
||||
TABLE_NAME_FEEDS + "." + KEY_NEXT_PAGE_LINK,
|
||||
TABLE_NAME_FEEDS + "." + KEY_USERNAME,
|
||||
TABLE_NAME_FEEDS + "." + KEY_PASSWORD,
|
||||
TABLE_NAME_FEEDS + "." + KEY_HIDE,
|
||||
TABLE_NAME_FEEDS + "." + KEY_SORT_ORDER,
|
||||
TABLE_NAME_FEEDS + "." + KEY_LAST_UPDATE_FAILED,
|
||||
TABLE_NAME_FEEDS + "." + KEY_AUTO_DELETE_ACTION,
|
||||
TABLE_NAME_FEEDS + "." + KEY_FEED_VOLUME_ADAPTION,
|
||||
TABLE_NAME_FEEDS + "." + KEY_INCLUDE_FILTER,
|
||||
TABLE_NAME_FEEDS + "." + KEY_EXCLUDE_FILTER,
|
||||
TABLE_NAME_FEEDS + "." + KEY_MINIMAL_DURATION_FILTER,
|
||||
TABLE_NAME_FEEDS + "." + KEY_FEED_PLAYBACK_SPEED,
|
||||
TABLE_NAME_FEEDS + "." + KEY_FEED_TAGS,
|
||||
TABLE_NAME_FEEDS + "." + KEY_FEED_SKIP_INTRO,
|
||||
TABLE_NAME_FEEDS + "." + KEY_FEED_SKIP_ENDING,
|
||||
TABLE_NAME_FEEDS + "." + KEY_EPISODE_NOTIFICATION
|
||||
};
|
||||
|
||||
/**
|
||||
* All the tables in the database
|
||||
*/
|
||||
|
@ -281,6 +241,7 @@ public class PodDBAdapter {
|
|||
|
||||
public static final String SELECT_KEY_ITEM_ID = "item_id";
|
||||
public static final String SELECT_KEY_MEDIA_ID = "media_id";
|
||||
public static final String SELECT_KEY_FEED_ID = "feed_id";
|
||||
|
||||
private static final String KEYS_FEED_ITEM_WITHOUT_DESCRIPTION =
|
||||
TABLE_NAME_FEED_ITEMS + "." + KEY_ID + " AS " + SELECT_KEY_ITEM_ID + ", "
|
||||
|
@ -312,6 +273,42 @@ public class PodDBAdapter {
|
|||
+ TABLE_NAME_FEED_MEDIA + "." + KEY_HAS_EMBEDDED_PICTURE + ", "
|
||||
+ TABLE_NAME_FEED_MEDIA + "." + KEY_LAST_PLAYED_TIME;
|
||||
|
||||
private static final String KEYS_FEED =
|
||||
TABLE_NAME_FEEDS + "." + KEY_ID + " AS " + SELECT_KEY_FEED_ID + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_TITLE + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_CUSTOM_TITLE + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FILE_URL + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_DOWNLOAD_URL + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_DOWNLOADED + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_LINK + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_DESCRIPTION + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_PAYMENT_LINK + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_LASTUPDATE + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_LANGUAGE + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_AUTHOR + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_IMAGE_URL + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_TYPE + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_IDENTIFIER + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_IS_PAGED + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_NEXT_PAGE_LINK + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_LAST_UPDATE_FAILED + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_AUTO_DOWNLOAD_ENABLED + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_KEEP_UPDATED + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_USERNAME + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_PASSWORD + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_HIDE + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_SORT_ORDER + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_AUTO_DELETE_ACTION + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_VOLUME_ADAPTION + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_INCLUDE_FILTER + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_EXCLUDE_FILTER + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_MINIMAL_DURATION_FILTER + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_PLAYBACK_SPEED + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_TAGS + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_SKIP_INTRO + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_FEED_SKIP_ENDING + ", "
|
||||
+ TABLE_NAME_FEEDS + "." + KEY_EPISODE_NOTIFICATION;
|
||||
|
||||
private static final String JOIN_FEED_ITEM_AND_MEDIA = " LEFT JOIN " + TABLE_NAME_FEED_MEDIA
|
||||
+ " ON " + TABLE_NAME_FEED_ITEMS + "." + KEY_ID + "=" + TABLE_NAME_FEED_MEDIA + "." + KEY_FEEDITEM + " ";
|
||||
|
||||
|
@ -914,8 +911,10 @@ public class PodDBAdapter {
|
|||
* @return The cursor of the query
|
||||
*/
|
||||
public final Cursor getAllFeedsCursor() {
|
||||
return db.query(TABLE_NAME_FEEDS, FEED_SEL_STD, null, null, null, null,
|
||||
KEY_TITLE + " COLLATE NOCASE ASC");
|
||||
final String query = "SELECT " + KEYS_FEED
|
||||
+ " FROM " + TABLE_NAME_FEEDS
|
||||
+ " ORDER BY " + TABLE_NAME_FEEDS + "." + KEY_TITLE + " COLLATE NOCASE ASC";
|
||||
return db.rawQuery(query, null);
|
||||
}
|
||||
|
||||
public final Cursor getFeedCursorDownloadUrls() {
|
||||
|
@ -1102,8 +1101,10 @@ public class PodDBAdapter {
|
|||
}
|
||||
|
||||
public final Cursor getFeedCursor(final long id) {
|
||||
return db.query(TABLE_NAME_FEEDS, FEED_SEL_STD, KEY_ID + "=" + id, null,
|
||||
null, null, null);
|
||||
final String query = "SELECT " + KEYS_FEED
|
||||
+ " FROM " + TABLE_NAME_FEEDS
|
||||
+ " WHERE " + SELECT_KEY_FEED_ID + " = " + id;
|
||||
return db.rawQuery(query, null);
|
||||
}
|
||||
|
||||
public final Cursor getFeedItemCursor(final String id) {
|
||||
|
@ -1167,6 +1168,46 @@ public class PodDBAdapter {
|
|||
return db.rawQuery(query, null);
|
||||
}
|
||||
|
||||
public final Cursor getFeedStatisticsCursor(boolean includeMarkedAsPlayed, long timeFilterFrom, long timeFilterTo) {
|
||||
final String lastPlayedTime = TABLE_NAME_FEED_MEDIA + "." + KEY_LAST_PLAYED_TIME;
|
||||
String wasStarted = TABLE_NAME_FEED_MEDIA + "." + KEY_PLAYBACK_COMPLETION_DATE + " > 0"
|
||||
+ " AND " + TABLE_NAME_FEED_MEDIA + "." + KEY_PLAYED_DURATION + " > 0";
|
||||
if (includeMarkedAsPlayed) {
|
||||
wasStarted = "(" + wasStarted + ") OR "
|
||||
+ TABLE_NAME_FEED_ITEMS + "." + KEY_READ + "=" + FeedItem.PLAYED + " OR "
|
||||
+ TABLE_NAME_FEED_MEDIA + "." + KEY_POSITION + "> 0";
|
||||
}
|
||||
final String timeFilter = lastPlayedTime + ">=" + timeFilterFrom
|
||||
+ " AND " + lastPlayedTime + "<=" + timeFilterTo;
|
||||
String playedTime = TABLE_NAME_FEED_MEDIA + "." + KEY_PLAYED_DURATION;
|
||||
if (includeMarkedAsPlayed) {
|
||||
playedTime = "(CASE WHEN " + playedTime + " != 0"
|
||||
+ " THEN " + playedTime + " ELSE ("
|
||||
+ "CASE WHEN " + TABLE_NAME_FEED_ITEMS + "." + KEY_READ + "=" + FeedItem.PLAYED
|
||||
+ " THEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_DURATION + " ELSE 0 END"
|
||||
+ ") END)";
|
||||
}
|
||||
|
||||
final String query = "SELECT " + KEYS_FEED + ", "
|
||||
+ "COUNT(*) AS num_episodes, "
|
||||
+ "MIN(CASE WHEN " + lastPlayedTime + " > 0"
|
||||
+ " THEN " + lastPlayedTime + " ELSE " + Long.MAX_VALUE + " END) AS oldest_date, "
|
||||
+ "SUM(CASE WHEN (" + wasStarted + ") THEN 1 ELSE 0 END) AS episodes_started, "
|
||||
+ "IFNULL(SUM(CASE WHEN (" + timeFilter + ")"
|
||||
+ " 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_DOWNLOADED + " > 0"
|
||||
+ " THEN 1 ELSE 0 END) AS num_downloaded, "
|
||||
+ "SUM(CASE WHEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOADED + " > 0"
|
||||
+ " THEN " + TABLE_NAME_FEED_MEDIA + "." + KEY_SIZE + " ELSE 0 END) AS download_size"
|
||||
+ " FROM " + TABLE_NAME_FEED_ITEMS
|
||||
+ JOIN_FEED_ITEM_AND_MEDIA
|
||||
+ " INNER JOIN " + TABLE_NAME_FEEDS
|
||||
+ " ON " + TABLE_NAME_FEED_ITEMS + "." + KEY_FEED + "=" + TABLE_NAME_FEEDS + "." + KEY_ID
|
||||
+ " GROUP BY " + TABLE_NAME_FEEDS + "." + KEY_ID;
|
||||
return db.rawQuery(query, null);
|
||||
}
|
||||
|
||||
public int getQueueSize() {
|
||||
final String query = String.format("SELECT COUNT(%s) FROM %s", KEY_ID, TABLE_NAME_QUEUE);
|
||||
Cursor c = db.rawQuery(query, null);
|
||||
|
|
|
@ -14,11 +14,11 @@ public abstract class ChapterCursorMapper {
|
|||
*/
|
||||
@NonNull
|
||||
public static Chapter convert(@NonNull Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndex(PodDBAdapter.KEY_ID);
|
||||
int indexTitle = cursor.getColumnIndex(PodDBAdapter.KEY_TITLE);
|
||||
int indexStart = cursor.getColumnIndex(PodDBAdapter.KEY_START);
|
||||
int indexLink = cursor.getColumnIndex(PodDBAdapter.KEY_LINK);
|
||||
int indexImage = cursor.getColumnIndex(PodDBAdapter.KEY_IMAGE_URL);
|
||||
int indexId = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_ID);
|
||||
int indexTitle = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_TITLE);
|
||||
int indexStart = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_START);
|
||||
int indexLink = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LINK);
|
||||
int indexImage = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_IMAGE_URL);
|
||||
|
||||
long id = cursor.getLong(indexId);
|
||||
String title = cursor.getString(indexTitle);
|
||||
|
|
|
@ -17,14 +17,14 @@ public abstract class DownloadStatusCursorMapper {
|
|||
*/
|
||||
@NonNull
|
||||
public static DownloadStatus convert(@NonNull Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndex(PodDBAdapter.KEY_ID);
|
||||
int indexTitle = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOADSTATUS_TITLE);
|
||||
int indexFeedFile = cursor.getColumnIndex(PodDBAdapter.KEY_FEEDFILE);
|
||||
int indexFileFileType = cursor.getColumnIndex(PodDBAdapter.KEY_FEEDFILETYPE);
|
||||
int indexSuccessful = cursor.getColumnIndex(PodDBAdapter.KEY_SUCCESSFUL);
|
||||
int indexReason = cursor.getColumnIndex(PodDBAdapter.KEY_REASON);
|
||||
int indexCompletionDate = cursor.getColumnIndex(PodDBAdapter.KEY_COMPLETION_DATE);
|
||||
int indexReasonDetailed = cursor.getColumnIndex(PodDBAdapter.KEY_REASON_DETAILED);
|
||||
int indexId = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_ID);
|
||||
int indexTitle = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOADSTATUS_TITLE);
|
||||
int indexFeedFile = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEEDFILE);
|
||||
int indexFileFileType = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEEDFILETYPE);
|
||||
int indexSuccessful = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_SUCCESSFUL);
|
||||
int indexReason = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_REASON);
|
||||
int indexCompletionDate = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_COMPLETION_DATE);
|
||||
int indexReasonDetailed = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_REASON_DETAILED);
|
||||
|
||||
return new DownloadStatus(cursor.getLong(indexId), cursor.getString(indexTitle), cursor.getLong(indexFeedFile),
|
||||
cursor.getInt(indexFileFileType), cursor.getInt(indexSuccessful) > 0, false, true,
|
||||
|
|
|
@ -19,26 +19,26 @@ public abstract class FeedCursorMapper {
|
|||
*/
|
||||
@NonNull
|
||||
public static Feed convert(@NonNull Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndex(PodDBAdapter.KEY_ID);
|
||||
int indexLastUpdate = cursor.getColumnIndex(PodDBAdapter.KEY_LASTUPDATE);
|
||||
int indexTitle = cursor.getColumnIndex(PodDBAdapter.KEY_TITLE);
|
||||
int indexCustomTitle = cursor.getColumnIndex(PodDBAdapter.KEY_CUSTOM_TITLE);
|
||||
int indexLink = cursor.getColumnIndex(PodDBAdapter.KEY_LINK);
|
||||
int indexDescription = cursor.getColumnIndex(PodDBAdapter.KEY_DESCRIPTION);
|
||||
int indexPaymentLink = cursor.getColumnIndex(PodDBAdapter.KEY_PAYMENT_LINK);
|
||||
int indexAuthor = cursor.getColumnIndex(PodDBAdapter.KEY_AUTHOR);
|
||||
int indexLanguage = cursor.getColumnIndex(PodDBAdapter.KEY_LANGUAGE);
|
||||
int indexType = cursor.getColumnIndex(PodDBAdapter.KEY_TYPE);
|
||||
int indexFeedIdentifier = cursor.getColumnIndex(PodDBAdapter.KEY_FEED_IDENTIFIER);
|
||||
int indexFileUrl = cursor.getColumnIndex(PodDBAdapter.KEY_FILE_URL);
|
||||
int indexDownloadUrl = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOAD_URL);
|
||||
int indexDownloaded = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOADED);
|
||||
int indexIsPaged = cursor.getColumnIndex(PodDBAdapter.KEY_IS_PAGED);
|
||||
int indexNextPageLink = cursor.getColumnIndex(PodDBAdapter.KEY_NEXT_PAGE_LINK);
|
||||
int indexHide = cursor.getColumnIndex(PodDBAdapter.KEY_HIDE);
|
||||
int indexSortOrder = cursor.getColumnIndex(PodDBAdapter.KEY_SORT_ORDER);
|
||||
int indexLastUpdateFailed = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_UPDATE_FAILED);
|
||||
int indexImageUrl = cursor.getColumnIndex(PodDBAdapter.KEY_IMAGE_URL);
|
||||
int indexId = cursor.getColumnIndexOrThrow(PodDBAdapter.SELECT_KEY_FEED_ID);
|
||||
int indexLastUpdate = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LASTUPDATE);
|
||||
int indexTitle = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_TITLE);
|
||||
int indexCustomTitle = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_CUSTOM_TITLE);
|
||||
int indexLink = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LINK);
|
||||
int indexDescription = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DESCRIPTION);
|
||||
int indexPaymentLink = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PAYMENT_LINK);
|
||||
int indexAuthor = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_AUTHOR);
|
||||
int indexLanguage = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LANGUAGE);
|
||||
int indexType = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_TYPE);
|
||||
int indexFeedIdentifier = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_IDENTIFIER);
|
||||
int indexFileUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FILE_URL);
|
||||
int indexDownloadUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOAD_URL);
|
||||
int indexDownloaded = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOADED);
|
||||
int indexIsPaged = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_IS_PAGED);
|
||||
int indexNextPageLink = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_NEXT_PAGE_LINK);
|
||||
int indexHide = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_HIDE);
|
||||
int indexSortOrder = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_SORT_ORDER);
|
||||
int indexLastUpdateFailed = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LAST_UPDATE_FAILED);
|
||||
int indexImageUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_IMAGE_URL);
|
||||
|
||||
Feed feed = new Feed(
|
||||
cursor.getLong(indexId),
|
||||
|
|
|
@ -20,21 +20,21 @@ public abstract class FeedPreferencesCursorMapper {
|
|||
*/
|
||||
@NonNull
|
||||
public static FeedPreferences convert(@NonNull Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndex(PodDBAdapter.KEY_ID);
|
||||
int indexAutoDownload = cursor.getColumnIndex(PodDBAdapter.KEY_AUTO_DOWNLOAD_ENABLED);
|
||||
int indexAutoRefresh = cursor.getColumnIndex(PodDBAdapter.KEY_KEEP_UPDATED);
|
||||
int indexAutoDeleteAction = cursor.getColumnIndex(PodDBAdapter.KEY_AUTO_DELETE_ACTION);
|
||||
int indexVolumeAdaption = cursor.getColumnIndex(PodDBAdapter.KEY_FEED_VOLUME_ADAPTION);
|
||||
int indexUsername = cursor.getColumnIndex(PodDBAdapter.KEY_USERNAME);
|
||||
int indexPassword = cursor.getColumnIndex(PodDBAdapter.KEY_PASSWORD);
|
||||
int indexIncludeFilter = cursor.getColumnIndex(PodDBAdapter.KEY_INCLUDE_FILTER);
|
||||
int indexExcludeFilter = cursor.getColumnIndex(PodDBAdapter.KEY_EXCLUDE_FILTER);
|
||||
int indexMinimalDurationFilter = cursor.getColumnIndex(PodDBAdapter.KEY_MINIMAL_DURATION_FILTER);
|
||||
int indexFeedPlaybackSpeed = cursor.getColumnIndex(PodDBAdapter.KEY_FEED_PLAYBACK_SPEED);
|
||||
int indexAutoSkipIntro = cursor.getColumnIndex(PodDBAdapter.KEY_FEED_SKIP_INTRO);
|
||||
int indexAutoSkipEnding = cursor.getColumnIndex(PodDBAdapter.KEY_FEED_SKIP_ENDING);
|
||||
int indexEpisodeNotification = cursor.getColumnIndex(PodDBAdapter.KEY_EPISODE_NOTIFICATION);
|
||||
int indexTags = cursor.getColumnIndex(PodDBAdapter.KEY_FEED_TAGS);
|
||||
int indexId = cursor.getColumnIndexOrThrow(PodDBAdapter.SELECT_KEY_FEED_ID);
|
||||
int indexAutoDownload = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_AUTO_DOWNLOAD_ENABLED);
|
||||
int indexAutoRefresh = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_KEEP_UPDATED);
|
||||
int indexAutoDeleteAction = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_AUTO_DELETE_ACTION);
|
||||
int indexVolumeAdaption = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_VOLUME_ADAPTION);
|
||||
int indexUsername = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_USERNAME);
|
||||
int indexPassword = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PASSWORD);
|
||||
int indexIncludeFilter = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_INCLUDE_FILTER);
|
||||
int indexExcludeFilter = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_EXCLUDE_FILTER);
|
||||
int indexMinimalDurationFilter = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_MINIMAL_DURATION_FILTER);
|
||||
int indexFeedPlaybackSpeed = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_PLAYBACK_SPEED);
|
||||
int indexAutoSkipIntro = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_SKIP_INTRO);
|
||||
int indexAutoSkipEnding = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_SKIP_ENDING);
|
||||
int indexEpisodeNotification = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_EPISODE_NOTIFICATION);
|
||||
int indexTags = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_TAGS);
|
||||
|
||||
long feedId = cursor.getLong(indexId);
|
||||
boolean autoDownload = cursor.getInt(indexAutoDownload) > 0;
|
||||
|
|
|
@ -85,9 +85,7 @@ public class YearStatisticsListAdapter extends RecyclerView.Adapter<RecyclerView
|
|||
item.year = lastDataPoint / 12;
|
||||
item.month = lastDataPoint % 12 + 1;
|
||||
statisticsData.add(item); // Compensate for months without playback
|
||||
System.out.println("aaaaa extra:" + item.month + "/" + item.year);
|
||||
}
|
||||
System.out.println("aaaaa add:" + statistic.month + "/" + statistic.year);
|
||||
statisticsData.add(statistic);
|
||||
lastDataPoint = (statistic.month - 1) + statistic.year * 12;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue