mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-01-20 21:01:17 +01:00
Moved cursor related code out of model (#5126)
This commit is contained in:
parent
76e42a78bb
commit
0081d232d0
@ -1,9 +1,5 @@
|
||||
package de.danoeh.antennapod.core.feed;
|
||||
|
||||
import android.database.Cursor;
|
||||
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
public abstract class Chapter extends FeedComponent {
|
||||
|
||||
/** Defines starting point in milliseconds. */
|
||||
@ -28,39 +24,6 @@ public abstract class Chapter extends FeedComponent {
|
||||
this.imageUrl = imageUrl;
|
||||
}
|
||||
|
||||
public static Chapter fromCursor(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 indexChapterType = cursor.getColumnIndex(PodDBAdapter.KEY_CHAPTER_TYPE);
|
||||
|
||||
long id = cursor.getLong(indexId);
|
||||
String title = cursor.getString(indexTitle);
|
||||
long start = cursor.getLong(indexStart);
|
||||
String link = cursor.getString(indexLink);
|
||||
String imageUrl = cursor.getString(indexImage);
|
||||
int chapterType = cursor.getInt(indexChapterType);
|
||||
|
||||
Chapter chapter;
|
||||
switch (chapterType) {
|
||||
case SimpleChapter.CHAPTERTYPE_SIMPLECHAPTER:
|
||||
chapter = new SimpleChapter(start, title, link, imageUrl);
|
||||
break;
|
||||
case ID3Chapter.CHAPTERTYPE_ID3CHAPTER:
|
||||
chapter = new ID3Chapter(start, title, link, imageUrl);
|
||||
break;
|
||||
case VorbisCommentChapter.CHAPTERTYPE_VORBISCOMMENT_CHAPTER:
|
||||
chapter = new VorbisCommentChapter(start, title, link, imageUrl);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown chapter type");
|
||||
}
|
||||
chapter.setId(id);
|
||||
return chapter;
|
||||
}
|
||||
|
||||
public abstract int getChapterType();
|
||||
|
||||
public long getStart() {
|
||||
|
@ -1,7 +1,5 @@
|
||||
package de.danoeh.antennapod.core.feed;
|
||||
|
||||
import android.database.Cursor;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
@ -15,8 +13,6 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
/**
|
||||
* Item (episode) within a feed.
|
||||
*
|
||||
@ -133,35 +129,6 @@ public class FeedItem extends FeedComponent implements Serializable {
|
||||
this.hasChapters = hasChapters;
|
||||
}
|
||||
|
||||
public static FeedItem fromCursor(Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndexOrThrow(PodDBAdapter.SELECT_KEY_ITEM_ID);
|
||||
int indexTitle = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_TITLE);
|
||||
int indexLink = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LINK);
|
||||
int indexPubDate = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PUBDATE);
|
||||
int indexPaymentLink = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PAYMENT_LINK);
|
||||
int indexFeedId = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED);
|
||||
int indexHasChapters = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_HAS_CHAPTERS);
|
||||
int indexRead = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_READ);
|
||||
int indexItemIdentifier = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_ITEM_IDENTIFIER);
|
||||
int indexAutoDownload = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_AUTO_DOWNLOAD);
|
||||
int indexImageUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_IMAGE_URL);
|
||||
|
||||
long id = cursor.getInt(indexId);
|
||||
String title = cursor.getString(indexTitle);
|
||||
String link = cursor.getString(indexLink);
|
||||
Date pubDate = new Date(cursor.getLong(indexPubDate));
|
||||
String paymentLink = cursor.getString(indexPaymentLink);
|
||||
long feedId = cursor.getLong(indexFeedId);
|
||||
boolean hasChapters = cursor.getInt(indexHasChapters) > 0;
|
||||
int state = cursor.getInt(indexRead);
|
||||
String itemIdentifier = cursor.getString(indexItemIdentifier);
|
||||
long autoDownload = cursor.getLong(indexAutoDownload);
|
||||
String imageUrl = cursor.getString(indexImageUrl);
|
||||
|
||||
return new FeedItem(id, title, link, pubDate, paymentLink, feedId,
|
||||
hasChapters, imageUrl, state, itemIdentifier, autoDownload);
|
||||
}
|
||||
|
||||
public void updateFromOther(FeedItem other) {
|
||||
super.updateFromOther(other);
|
||||
if (other.imageUrl != null) {
|
||||
|
@ -3,7 +3,6 @@ package de.danoeh.antennapod.core.feed;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.database.Cursor;
|
||||
import android.media.MediaMetadataRetriever;
|
||||
import android.net.Uri;
|
||||
import android.os.Parcel;
|
||||
@ -19,7 +18,6 @@ import de.danoeh.antennapod.core.preferences.GpodnetPreferences;
|
||||
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
import de.danoeh.antennapod.core.sync.SyncService;
|
||||
import de.danoeh.antennapod.core.sync.model.EpisodeAction;
|
||||
@ -86,7 +84,7 @@ public class FeedMedia extends FeedFile implements Playable {
|
||||
this.lastPlayedTime = lastPlayedTime;
|
||||
}
|
||||
|
||||
private FeedMedia(long id, FeedItem item, int duration, int position,
|
||||
public FeedMedia(long id, FeedItem item, int duration, int position,
|
||||
long size, String mime_type, String file_url, String download_url,
|
||||
boolean downloaded, Date playbackCompletionDate, int played_duration,
|
||||
Boolean hasEmbeddedPicture, long lastPlayedTime) {
|
||||
@ -95,57 +93,6 @@ public class FeedMedia extends FeedFile implements Playable {
|
||||
this.hasEmbeddedPicture = hasEmbeddedPicture;
|
||||
}
|
||||
|
||||
public static FeedMedia fromCursor(Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndexOrThrow(PodDBAdapter.SELECT_KEY_MEDIA_ID);
|
||||
int indexPlaybackCompletionDate = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PLAYBACK_COMPLETION_DATE);
|
||||
int indexDuration = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DURATION);
|
||||
int indexPosition = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_POSITION);
|
||||
int indexSize = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_SIZE);
|
||||
int indexMimeType = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_MIME_TYPE);
|
||||
int indexFileUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FILE_URL);
|
||||
int indexDownloadUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOAD_URL);
|
||||
int indexDownloaded = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOADED);
|
||||
int indexPlayedDuration = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PLAYED_DURATION);
|
||||
int indexLastPlayedTime = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LAST_PLAYED_TIME);
|
||||
|
||||
long mediaId = cursor.getLong(indexId);
|
||||
Date playbackCompletionDate = null;
|
||||
long playbackCompletionTime = cursor.getLong(indexPlaybackCompletionDate);
|
||||
if (playbackCompletionTime > 0) {
|
||||
playbackCompletionDate = new Date(playbackCompletionTime);
|
||||
}
|
||||
|
||||
Boolean hasEmbeddedPicture;
|
||||
switch(cursor.getInt(cursor.getColumnIndex(PodDBAdapter.KEY_HAS_EMBEDDED_PICTURE))) {
|
||||
case 1:
|
||||
hasEmbeddedPicture = Boolean.TRUE;
|
||||
break;
|
||||
case 0:
|
||||
hasEmbeddedPicture = Boolean.FALSE;
|
||||
break;
|
||||
default:
|
||||
hasEmbeddedPicture = null;
|
||||
break;
|
||||
}
|
||||
|
||||
return new FeedMedia(
|
||||
mediaId,
|
||||
null,
|
||||
cursor.getInt(indexDuration),
|
||||
cursor.getInt(indexPosition),
|
||||
cursor.getLong(indexSize),
|
||||
cursor.getString(indexMimeType),
|
||||
cursor.getString(indexFileUrl),
|
||||
cursor.getString(indexDownloadUrl),
|
||||
cursor.getInt(indexDownloaded) > 0,
|
||||
playbackCompletionDate,
|
||||
cursor.getInt(indexPlayedDuration),
|
||||
hasEmbeddedPicture,
|
||||
cursor.getLong(indexLastPlayedTime)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getHumanReadableIdentifier() {
|
||||
if (item != null && item.getTitle() != null) {
|
||||
|
@ -1,13 +1,9 @@
|
||||
package de.danoeh.antennapod.core.feed;
|
||||
|
||||
import android.database.Cursor;
|
||||
import androidx.annotation.NonNull;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@ -47,7 +43,7 @@ public class FeedPreferences implements Serializable {
|
||||
username, password, new FeedFilter(), SPEED_USE_GLOBAL, 0, 0, false, new HashSet<>());
|
||||
}
|
||||
|
||||
private FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated,
|
||||
public FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated,
|
||||
AutoDeleteAction autoDeleteAction, VolumeAdaptionSetting volumeAdaptionSetting,
|
||||
String username, String password, @NonNull FeedFilter filter, float feedPlaybackSpeed,
|
||||
int feedSkipIntro, int feedSkipEnding, boolean showEpisodeNotification,
|
||||
@ -67,56 +63,6 @@ public class FeedPreferences implements Serializable {
|
||||
this.tags.addAll(tags);
|
||||
}
|
||||
|
||||
public static FeedPreferences fromCursor(Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndex(PodDBAdapter.KEY_ID);
|
||||
int indexAutoDownload = cursor.getColumnIndex(PodDBAdapter.KEY_AUTO_DOWNLOAD);
|
||||
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 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);
|
||||
|
||||
long feedId = cursor.getLong(indexId);
|
||||
boolean autoDownload = cursor.getInt(indexAutoDownload) > 0;
|
||||
boolean autoRefresh = cursor.getInt(indexAutoRefresh) > 0;
|
||||
int autoDeleteActionIndex = cursor.getInt(indexAutoDeleteAction);
|
||||
AutoDeleteAction autoDeleteAction = AutoDeleteAction.values()[autoDeleteActionIndex];
|
||||
int volumeAdaptionValue = cursor.getInt(indexVolumeAdaption);
|
||||
VolumeAdaptionSetting volumeAdaptionSetting = VolumeAdaptionSetting.fromInteger(volumeAdaptionValue);
|
||||
String username = cursor.getString(indexUsername);
|
||||
String password = cursor.getString(indexPassword);
|
||||
String includeFilter = cursor.getString(indexIncludeFilter);
|
||||
String excludeFilter = cursor.getString(indexExcludeFilter);
|
||||
float feedPlaybackSpeed = cursor.getFloat(indexFeedPlaybackSpeed);
|
||||
int feedAutoSkipIntro = cursor.getInt(indexAutoSkipIntro);
|
||||
int feedAutoSkipEnding = cursor.getInt(indexAutoSkipEnding);
|
||||
boolean showNotification = cursor.getInt(indexEpisodeNotification) > 0;
|
||||
String tagsString = cursor.getString(indexTags);
|
||||
if (TextUtils.isEmpty(tagsString)) {
|
||||
tagsString = TAG_ROOT;
|
||||
}
|
||||
return new FeedPreferences(feedId,
|
||||
autoDownload,
|
||||
autoRefresh,
|
||||
autoDeleteAction,
|
||||
volumeAdaptionSetting,
|
||||
username,
|
||||
password,
|
||||
new FeedFilter(includeFilter, excludeFilter),
|
||||
feedPlaybackSpeed,
|
||||
feedAutoSkipIntro,
|
||||
feedAutoSkipEnding,
|
||||
showNotification,
|
||||
new HashSet<>(Arrays.asList(tagsString.split(TAG_SEPARATOR))));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the filter for this feed
|
||||
*/
|
||||
|
@ -24,7 +24,11 @@ import de.danoeh.antennapod.core.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.core.feed.SubscriptionsFilter;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.core.storage.mapper.ChapterCursorMapper;
|
||||
import de.danoeh.antennapod.core.storage.mapper.FeedCursorMapper;
|
||||
import de.danoeh.antennapod.core.storage.mapper.FeedItemCursorMapper;
|
||||
import de.danoeh.antennapod.core.storage.mapper.FeedMediaCursorMapper;
|
||||
import de.danoeh.antennapod.core.storage.mapper.FeedPreferencesCursorMapper;
|
||||
import de.danoeh.antennapod.core.util.LongIntMap;
|
||||
import de.danoeh.antennapod.core.util.LongList;
|
||||
import de.danoeh.antennapod.core.util.comparator.DownloadStatusComparator;
|
||||
@ -199,10 +203,10 @@ public final class DBReader {
|
||||
if (cursor.moveToFirst()) {
|
||||
int indexMediaId = cursor.getColumnIndexOrThrow(PodDBAdapter.SELECT_KEY_MEDIA_ID);
|
||||
do {
|
||||
FeedItem item = FeedItem.fromCursor(cursor);
|
||||
FeedItem item = FeedItemCursorMapper.convert(cursor);
|
||||
result.add(item);
|
||||
if (!cursor.isNull(indexMediaId)) {
|
||||
item.setMedia(FeedMedia.fromCursor(cursor));
|
||||
item.setMedia(FeedMediaCursorMapper.convert(cursor));
|
||||
}
|
||||
} while (cursor.moveToNext());
|
||||
}
|
||||
@ -211,7 +215,7 @@ public final class DBReader {
|
||||
|
||||
private static Feed extractFeedFromCursorRow(Cursor cursor) {
|
||||
Feed feed = FeedCursorMapper.convert(cursor);
|
||||
FeedPreferences preferences = FeedPreferences.fromCursor(cursor);
|
||||
FeedPreferences preferences = FeedPreferencesCursorMapper.convert(cursor);
|
||||
feed.setPreferences(preferences);
|
||||
return feed;
|
||||
}
|
||||
@ -687,7 +691,7 @@ public final class DBReader {
|
||||
}
|
||||
ArrayList<Chapter> chapters = new ArrayList<>();
|
||||
while (cursor.moveToNext()) {
|
||||
chapters.add(Chapter.fromCursor(cursor));
|
||||
chapters.add(ChapterCursorMapper.convert(cursor));
|
||||
}
|
||||
return chapters;
|
||||
}
|
||||
@ -729,7 +733,7 @@ public final class DBReader {
|
||||
|
||||
int indexFeedItem = mediaCursor.getColumnIndex(PodDBAdapter.KEY_FEEDITEM);
|
||||
long itemId = mediaCursor.getLong(indexFeedItem);
|
||||
FeedMedia media = FeedMedia.fromCursor(mediaCursor);
|
||||
FeedMedia media = FeedMediaCursorMapper.convert(mediaCursor);
|
||||
FeedItem item = getFeedItem(itemId);
|
||||
if (item != null) {
|
||||
media.setItem(item);
|
||||
|
@ -0,0 +1,51 @@
|
||||
package de.danoeh.antennapod.core.storage.mapper;
|
||||
|
||||
import android.database.Cursor;
|
||||
import androidx.annotation.NonNull;
|
||||
import de.danoeh.antennapod.core.feed.Chapter;
|
||||
import de.danoeh.antennapod.core.feed.ID3Chapter;
|
||||
import de.danoeh.antennapod.core.feed.SimpleChapter;
|
||||
import de.danoeh.antennapod.core.feed.VorbisCommentChapter;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
/**
|
||||
* Converts a {@link Cursor} to a {@link Chapter} object.
|
||||
*/
|
||||
public abstract class ChapterCursorMapper {
|
||||
/**
|
||||
* Create a {@link Chapter} instance from a database row (cursor).
|
||||
*/
|
||||
@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 indexChapterType = cursor.getColumnIndex(PodDBAdapter.KEY_CHAPTER_TYPE);
|
||||
|
||||
long id = cursor.getLong(indexId);
|
||||
String title = cursor.getString(indexTitle);
|
||||
long start = cursor.getLong(indexStart);
|
||||
String link = cursor.getString(indexLink);
|
||||
String imageUrl = cursor.getString(indexImage);
|
||||
int chapterType = cursor.getInt(indexChapterType);
|
||||
|
||||
Chapter chapter;
|
||||
switch (chapterType) {
|
||||
case SimpleChapter.CHAPTERTYPE_SIMPLECHAPTER:
|
||||
chapter = new SimpleChapter(start, title, link, imageUrl);
|
||||
break;
|
||||
case ID3Chapter.CHAPTERTYPE_ID3CHAPTER:
|
||||
chapter = new ID3Chapter(start, title, link, imageUrl);
|
||||
break;
|
||||
case VorbisCommentChapter.CHAPTERTYPE_VORBISCOMMENT_CHAPTER:
|
||||
chapter = new VorbisCommentChapter(start, title, link, imageUrl);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown chapter type");
|
||||
}
|
||||
chapter.setId(id);
|
||||
return chapter;
|
||||
}
|
||||
}
|
@ -63,7 +63,7 @@ public abstract class FeedCursorMapper {
|
||||
cursor.getInt(indexLastUpdateFailed) > 0
|
||||
);
|
||||
|
||||
FeedPreferences preferences = FeedPreferences.fromCursor(cursor);
|
||||
FeedPreferences preferences = FeedPreferencesCursorMapper.convert(cursor);
|
||||
feed.setPreferences(preferences);
|
||||
return feed;
|
||||
}
|
||||
|
@ -0,0 +1,46 @@
|
||||
package de.danoeh.antennapod.core.storage.mapper;
|
||||
|
||||
import android.database.Cursor;
|
||||
import androidx.annotation.NonNull;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Converts a {@link Cursor} to a {@link FeedItem} object.
|
||||
*/
|
||||
public abstract class FeedItemCursorMapper {
|
||||
/**
|
||||
* Create a {@link FeedItem} instance from a database row (cursor).
|
||||
*/
|
||||
@NonNull
|
||||
public static FeedItem convert(@NonNull Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndexOrThrow(PodDBAdapter.SELECT_KEY_ITEM_ID);
|
||||
int indexTitle = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_TITLE);
|
||||
int indexLink = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LINK);
|
||||
int indexPubDate = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PUBDATE);
|
||||
int indexPaymentLink = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PAYMENT_LINK);
|
||||
int indexFeedId = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED);
|
||||
int indexHasChapters = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_HAS_CHAPTERS);
|
||||
int indexRead = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_READ);
|
||||
int indexItemIdentifier = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_ITEM_IDENTIFIER);
|
||||
int indexAutoDownload = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_AUTO_DOWNLOAD);
|
||||
int indexImageUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_IMAGE_URL);
|
||||
|
||||
long id = cursor.getInt(indexId);
|
||||
String title = cursor.getString(indexTitle);
|
||||
String link = cursor.getString(indexLink);
|
||||
Date pubDate = new Date(cursor.getLong(indexPubDate));
|
||||
String paymentLink = cursor.getString(indexPaymentLink);
|
||||
long feedId = cursor.getLong(indexFeedId);
|
||||
boolean hasChapters = cursor.getInt(indexHasChapters) > 0;
|
||||
int state = cursor.getInt(indexRead);
|
||||
String itemIdentifier = cursor.getString(indexItemIdentifier);
|
||||
long autoDownload = cursor.getLong(indexAutoDownload);
|
||||
String imageUrl = cursor.getString(indexImageUrl);
|
||||
|
||||
return new FeedItem(id, title, link, pubDate, paymentLink, feedId,
|
||||
hasChapters, imageUrl, state, itemIdentifier, autoDownload);
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package de.danoeh.antennapod.core.storage.mapper;
|
||||
|
||||
import android.database.Cursor;
|
||||
import androidx.annotation.NonNull;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Converts a {@link Cursor} to a {@link FeedMedia} object.
|
||||
*/
|
||||
public abstract class FeedMediaCursorMapper {
|
||||
/**
|
||||
* Create a {@link FeedMedia} instance from a database row (cursor).
|
||||
*/
|
||||
@NonNull
|
||||
public static FeedMedia convert(@NonNull Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndexOrThrow(PodDBAdapter.SELECT_KEY_MEDIA_ID);
|
||||
int indexPlaybackCompletionDate = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PLAYBACK_COMPLETION_DATE);
|
||||
int indexDuration = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DURATION);
|
||||
int indexPosition = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_POSITION);
|
||||
int indexSize = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_SIZE);
|
||||
int indexMimeType = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_MIME_TYPE);
|
||||
int indexFileUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FILE_URL);
|
||||
int indexDownloadUrl = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOAD_URL);
|
||||
int indexDownloaded = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_DOWNLOADED);
|
||||
int indexPlayedDuration = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_PLAYED_DURATION);
|
||||
int indexLastPlayedTime = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_LAST_PLAYED_TIME);
|
||||
|
||||
long mediaId = cursor.getLong(indexId);
|
||||
Date playbackCompletionDate = null;
|
||||
long playbackCompletionTime = cursor.getLong(indexPlaybackCompletionDate);
|
||||
if (playbackCompletionTime > 0) {
|
||||
playbackCompletionDate = new Date(playbackCompletionTime);
|
||||
}
|
||||
|
||||
Boolean hasEmbeddedPicture;
|
||||
switch (cursor.getInt(cursor.getColumnIndex(PodDBAdapter.KEY_HAS_EMBEDDED_PICTURE))) {
|
||||
case 1:
|
||||
hasEmbeddedPicture = Boolean.TRUE;
|
||||
break;
|
||||
case 0:
|
||||
hasEmbeddedPicture = Boolean.FALSE;
|
||||
break;
|
||||
default:
|
||||
hasEmbeddedPicture = null;
|
||||
break;
|
||||
}
|
||||
|
||||
return new FeedMedia(
|
||||
mediaId,
|
||||
null,
|
||||
cursor.getInt(indexDuration),
|
||||
cursor.getInt(indexPosition),
|
||||
cursor.getLong(indexSize),
|
||||
cursor.getString(indexMimeType),
|
||||
cursor.getString(indexFileUrl),
|
||||
cursor.getString(indexDownloadUrl),
|
||||
cursor.getInt(indexDownloaded) > 0,
|
||||
playbackCompletionDate,
|
||||
cursor.getInt(indexPlayedDuration),
|
||||
hasEmbeddedPicture,
|
||||
cursor.getLong(indexLastPlayedTime)
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package de.danoeh.antennapod.core.storage.mapper;
|
||||
|
||||
import android.database.Cursor;
|
||||
import android.text.TextUtils;
|
||||
import androidx.annotation.NonNull;
|
||||
import de.danoeh.antennapod.core.feed.FeedFilter;
|
||||
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.core.feed.VolumeAdaptionSetting;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
||||
/**
|
||||
* Converts a {@link Cursor} to a {@link FeedPreferences} object.
|
||||
*/
|
||||
public abstract class FeedPreferencesCursorMapper {
|
||||
/**
|
||||
* Create a {@link FeedPreferences} instance from a database row (cursor).
|
||||
*/
|
||||
@NonNull
|
||||
public static FeedPreferences convert(@NonNull Cursor cursor) {
|
||||
int indexId = cursor.getColumnIndex(PodDBAdapter.KEY_ID);
|
||||
int indexAutoDownload = cursor.getColumnIndex(PodDBAdapter.KEY_AUTO_DOWNLOAD);
|
||||
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 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);
|
||||
|
||||
long feedId = cursor.getLong(indexId);
|
||||
boolean autoDownload = cursor.getInt(indexAutoDownload) > 0;
|
||||
boolean autoRefresh = cursor.getInt(indexAutoRefresh) > 0;
|
||||
int autoDeleteActionIndex = cursor.getInt(indexAutoDeleteAction);
|
||||
FeedPreferences.AutoDeleteAction autoDeleteAction =
|
||||
FeedPreferences.AutoDeleteAction.values()[autoDeleteActionIndex];
|
||||
int volumeAdaptionValue = cursor.getInt(indexVolumeAdaption);
|
||||
VolumeAdaptionSetting volumeAdaptionSetting = VolumeAdaptionSetting.fromInteger(volumeAdaptionValue);
|
||||
String username = cursor.getString(indexUsername);
|
||||
String password = cursor.getString(indexPassword);
|
||||
String includeFilter = cursor.getString(indexIncludeFilter);
|
||||
String excludeFilter = cursor.getString(indexExcludeFilter);
|
||||
float feedPlaybackSpeed = cursor.getFloat(indexFeedPlaybackSpeed);
|
||||
int feedAutoSkipIntro = cursor.getInt(indexAutoSkipIntro);
|
||||
int feedAutoSkipEnding = cursor.getInt(indexAutoSkipEnding);
|
||||
boolean showNotification = cursor.getInt(indexEpisodeNotification) > 0;
|
||||
String tagsString = cursor.getString(indexTags);
|
||||
if (TextUtils.isEmpty(tagsString)) {
|
||||
tagsString = FeedPreferences.TAG_ROOT;
|
||||
}
|
||||
return new FeedPreferences(feedId,
|
||||
autoDownload,
|
||||
autoRefresh,
|
||||
autoDeleteAction,
|
||||
volumeAdaptionSetting,
|
||||
username,
|
||||
password,
|
||||
new FeedFilter(includeFilter, excludeFilter),
|
||||
feedPlaybackSpeed,
|
||||
feedAutoSkipIntro,
|
||||
feedAutoSkipEnding,
|
||||
showNotification,
|
||||
new HashSet<>(Arrays.asList(tagsString.split(FeedPreferences.TAG_SEPARATOR))));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user