use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.
the class DBReader method getFeed.
/**
* Loads a specific Feed from the database.
*
* @param feedId The ID of the Feed
* @param filtered <code>true</code> if only the visible items should be loaded according to the feed filter.
* @return The Feed or null if the Feed could not be found. The Feeds FeedItems will also be loaded from the
* database and the items-attribute will be set correctly.
*/
@Nullable
public static Feed getFeed(final long feedId, boolean filtered) {
Log.d(TAG, "getFeed() called with: " + "feedId = [" + feedId + "]");
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
Feed feed = null;
try (Cursor cursor = adapter.getFeedCursor(feedId)) {
if (cursor.moveToNext()) {
feed = extractFeedFromCursorRow(cursor);
if (filtered) {
feed.setItems(getFeedItemList(feed, feed.getItemFilter()));
} else {
feed.setItems(getFeedItemList(feed));
}
} else {
Log.e(TAG, "getFeed could not find feed with id " + feedId);
}
return feed;
} finally {
adapter.close();
}
}
use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.
the class DBWriter method addNewFeed.
static Future<?> addNewFeed(final Context context, final Feed... feeds) {
return dbExec.submit(() -> {
final PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
adapter.setCompleteFeed(feeds);
adapter.close();
for (Feed feed : feeds) {
if (!feed.isLocalFeed()) {
SynchronizationQueueSink.enqueueFeedAddedIfSynchronizationIsActive(context, feed.getDownload_url());
}
}
BackupManager backupManager = new BackupManager(context);
backupManager.dataChanged();
});
}
use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.
the class DBWriter method deleteFeed.
/**
* Deletes a Feed and all downloaded files of its components like images and downloaded episodes.
*
* @param context A context that is used for opening a database connection.
* @param feedId ID of the Feed that should be deleted.
*/
public static Future<?> deleteFeed(final Context context, final long feedId) {
return dbExec.submit(() -> {
final Feed feed = DBReader.getFeed(feedId);
if (feed == null) {
return;
}
// delete stored media files and mark them as read
if (feed.getItems() == null) {
DBReader.getFeedItemList(feed);
}
deleteFeedItemsSynchronous(context, feed.getItems());
// delete feed
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
adapter.removeFeed(feed);
adapter.close();
if (!feed.isLocalFeed()) {
SynchronizationQueueSink.enqueueFeedRemovedIfSynchronizationIsActive(context, feed.getDownload_url());
}
EventBus.getDefault().post(new FeedListUpdateEvent(feed));
});
}
use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.
the class FeedCursorMapper method convert.
/**
* Create a {@link Feed} instance from a database row (cursor).
*/
@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);
Feed feed = new Feed(cursor.getLong(indexId), cursor.getString(indexLastUpdate), cursor.getString(indexTitle), cursor.getString(indexCustomTitle), cursor.getString(indexLink), cursor.getString(indexDescription), cursor.getString(indexPaymentLink), cursor.getString(indexAuthor), cursor.getString(indexLanguage), cursor.getString(indexType), cursor.getString(indexFeedIdentifier), cursor.getString(indexImageUrl), cursor.getString(indexFileUrl), cursor.getString(indexDownloadUrl), cursor.getInt(indexDownloaded) > 0, cursor.getInt(indexIsPaged) > 0, cursor.getString(indexNextPageLink), cursor.getString(indexHide), SortOrder.fromCodeString(cursor.getString(indexSortOrder)), cursor.getInt(indexLastUpdateFailed) > 0);
FeedPreferences preferences = FeedPreferencesCursorMapper.convert(cursor);
feed.setPreferences(preferences);
return feed;
}
use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.
the class PodDBAdapter method setCompleteFeed.
/**
* Insert all FeedItems of a feed and the feed object itself in a single
* transaction
*/
public void setCompleteFeed(Feed... feeds) {
try {
db.beginTransactionNonExclusive();
for (Feed feed : feeds) {
setFeed(feed);
if (feed.getItems() != null) {
for (FeedItem item : feed.getItems()) {
updateOrInsertFeedItem(item, false);
}
}
if (feed.getPreferences() != null) {
setFeedPreferences(feed.getPreferences());
}
}
db.setTransactionSuccessful();
} catch (SQLException e) {
Log.e(TAG, Log.getStackTraceString(e));
} finally {
db.endTransaction();
}
}
Aggregations