Search in sources :

Example 81 with Feed

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();
    }
}
Also used : Cursor(android.database.Cursor) Feed(de.danoeh.antennapod.model.feed.Feed) Nullable(androidx.annotation.Nullable)

Example 82 with Feed

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();
    });
}
Also used : BackupManager(android.app.backup.BackupManager) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 83 with Feed

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));
    });
}
Also used : FeedListUpdateEvent(de.danoeh.antennapod.event.FeedListUpdateEvent) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 84 with 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;
}
Also used : FeedPreferences(de.danoeh.antennapod.model.feed.FeedPreferences) Feed(de.danoeh.antennapod.model.feed.Feed) NonNull(androidx.annotation.NonNull)

Example 85 with 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();
    }
}
Also used : FeedItem(de.danoeh.antennapod.model.feed.FeedItem) SQLException(android.database.SQLException) Feed(de.danoeh.antennapod.model.feed.Feed)

Aggregations

Feed (de.danoeh.antennapod.model.feed.Feed)125 FeedItem (de.danoeh.antennapod.model.feed.FeedItem)75 Test (org.junit.Test)61 ArrayList (java.util.ArrayList)43 Date (java.util.Date)37 File (java.io.File)31 FeedMedia (de.danoeh.antennapod.model.feed.FeedMedia)27 Cursor (android.database.Cursor)15 FeedPreferences (de.danoeh.antennapod.model.feed.FeedPreferences)12 NonNull (androidx.annotation.NonNull)10 Nullable (androidx.annotation.Nullable)8 View (android.view.View)7 DownloadStatus (de.danoeh.antennapod.core.service.download.DownloadStatus)7 Log (android.util.Log)6 R (de.danoeh.antennapod.R)6 DownloadRequest (de.danoeh.antennapod.core.service.download.DownloadRequest)6 List (java.util.List)6 ViewGroup (android.view.ViewGroup)5 AlertDialog (androidx.appcompat.app.AlertDialog)5 RequestOptions (com.bumptech.glide.request.RequestOptions)5