Search in sources :

Example 6 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class PlaybackSpeedUtils method getCurrentPlaybackSpeed.

/**
 * Returns the currently configured playback speed for the specified media.
 */
public static float getCurrentPlaybackSpeed(Playable media) {
    float playbackSpeed = SPEED_USE_GLOBAL;
    MediaType mediaType = null;
    if (media != null) {
        mediaType = media.getMediaType();
        playbackSpeed = PlaybackPreferences.getCurrentlyPlayingTemporaryPlaybackSpeed();
        if (playbackSpeed == SPEED_USE_GLOBAL && media instanceof FeedMedia) {
            FeedItem item = ((FeedMedia) media).getItem();
            if (item != null) {
                Feed feed = item.getFeed();
                if (feed != null && feed.getPreferences() != null) {
                    playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed();
                } else {
                    Log.d(TAG, "Can not get feed specific playback speed: " + feed);
                }
            }
        }
    }
    if (playbackSpeed == SPEED_USE_GLOBAL) {
        playbackSpeed = UserPreferences.getPlaybackSpeed(mediaType);
    }
    return playbackSpeed;
}
Also used : FeedItem(de.danoeh.antennapod.model.feed.FeedItem) FeedMedia(de.danoeh.antennapod.model.feed.FeedMedia) MediaType(de.danoeh.antennapod.model.playback.MediaType) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 7 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class OpmlWriter method writeDocument.

/**
 * Takes a list of feeds and a writer and writes those into an OPML
 * document.
 */
@Override
public void writeDocument(List<Feed> feeds, Writer writer, Context context) throws IllegalArgumentException, IllegalStateException, IOException {
    Log.d(TAG, "Starting to write document");
    XmlSerializer xs = Xml.newSerializer();
    xs.setFeature(OpmlSymbols.XML_FEATURE_INDENT_OUTPUT, true);
    xs.setOutput(writer);
    xs.startDocument(ENCODING, false);
    xs.startTag(null, OpmlSymbols.OPML);
    xs.attribute(null, OpmlSymbols.VERSION, OPML_VERSION);
    xs.startTag(null, OpmlSymbols.HEAD);
    xs.startTag(null, OpmlSymbols.TITLE);
    xs.text(OPML_TITLE);
    xs.endTag(null, OpmlSymbols.TITLE);
    xs.startTag(null, OpmlSymbols.DATE_CREATED);
    xs.text(DateFormatter.formatRfc822Date(new Date()));
    xs.endTag(null, OpmlSymbols.DATE_CREATED);
    xs.endTag(null, OpmlSymbols.HEAD);
    xs.startTag(null, OpmlSymbols.BODY);
    for (Feed feed : feeds) {
        xs.startTag(null, OpmlSymbols.OUTLINE);
        xs.attribute(null, OpmlSymbols.TEXT, feed.getTitle());
        xs.attribute(null, OpmlSymbols.TITLE, feed.getTitle());
        if (feed.getType() != null) {
            xs.attribute(null, OpmlSymbols.TYPE, feed.getType());
        }
        xs.attribute(null, OpmlSymbols.XMLURL, feed.getDownload_url());
        if (feed.getLink() != null) {
            xs.attribute(null, OpmlSymbols.HTMLURL, feed.getLink());
        }
        xs.endTag(null, OpmlSymbols.OUTLINE);
    }
    xs.endTag(null, OpmlSymbols.BODY);
    xs.endTag(null, OpmlSymbols.OPML);
    xs.endDocument();
    Log.d(TAG, "Finished writing document");
}
Also used : Date(java.util.Date) XmlSerializer(org.xmlpull.v1.XmlSerializer) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 8 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class HtmlWriter method writeDocument.

/**
 * Takes a list of feeds and a writer and writes those into an HTML
 * document.
 */
@Override
public void writeDocument(List<Feed> feeds, Writer writer, Context context) throws IllegalArgumentException, IllegalStateException, IOException {
    Log.d(TAG, "Starting to write document");
    InputStream templateStream = context.getAssets().open("html-export-template.html");
    String template = IOUtils.toString(templateStream, "UTF-8");
    template = template.replaceAll("\\{TITLE\\}", "Subscriptions");
    String[] templateParts = template.split("\\{FEEDS\\}");
    writer.append(templateParts[0]);
    for (Feed feed : feeds) {
        writer.append("<li><div><img src=\"");
        writer.append(feed.getImageUrl());
        writer.append("\" /><p>");
        writer.append(feed.getTitle());
        writer.append(" <span><a href=\"");
        writer.append(feed.getLink());
        writer.append("\">Website</a> • <a href=\"");
        writer.append(feed.getDownload_url());
        writer.append("\">Feed</a></span></p></div></li>\n");
    }
    writer.append(templateParts[1]);
    Log.d(TAG, "Finished writing document");
}
Also used : InputStream(java.io.InputStream) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 9 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class MediaInfoCreator method from.

/**
 * Converts {@link FeedMedia} objects into a format suitable for sending to a Cast Device.
 * Before using this method, one should make sure isCastable(Playable) returns
 * {@code true}. This method should not run on the main thread.
 *
 * @param media The {@link FeedMedia} object to be converted.
 * @return {@link MediaInfo} object in a format proper for casting.
 */
public static MediaInfo from(FeedMedia media) {
    if (media == null) {
        return null;
    }
    MediaMetadata metadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_GENERIC);
    if (media.getItem() == null) {
        throw new IllegalStateException("item is null");
    // media.setItem(DBReader.getFeedItem(media.getItemId()));
    }
    FeedItem feedItem = media.getItem();
    if (feedItem != null) {
        metadata.putString(MediaMetadata.KEY_TITLE, media.getEpisodeTitle());
        String subtitle = media.getFeedTitle();
        if (subtitle != null) {
            metadata.putString(MediaMetadata.KEY_SUBTITLE, subtitle);
        }
        // Manual because cast does not support embedded images
        String url = feedItem.getImageUrl() == null ? feedItem.getFeed().getImageUrl() : feedItem.getImageUrl();
        if (!TextUtils.isEmpty(url)) {
            metadata.addImage(new WebImage(Uri.parse(url)));
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(media.getItem().getPubDate());
        metadata.putDate(MediaMetadata.KEY_RELEASE_DATE, calendar);
        Feed feed = feedItem.getFeed();
        if (feed != null) {
            if (!TextUtils.isEmpty(feed.getAuthor())) {
                metadata.putString(MediaMetadata.KEY_ARTIST, feed.getAuthor());
            }
            if (!TextUtils.isEmpty(feed.getDownload_url())) {
                metadata.putString(CastUtils.KEY_FEED_URL, feed.getDownload_url());
            }
            if (!TextUtils.isEmpty(feed.getLink())) {
                metadata.putString(CastUtils.KEY_FEED_WEBSITE, feed.getLink());
            }
        }
        if (!TextUtils.isEmpty(feedItem.getItemIdentifier())) {
            metadata.putString(CastUtils.KEY_EPISODE_IDENTIFIER, feedItem.getItemIdentifier());
        } else {
            metadata.putString(CastUtils.KEY_EPISODE_IDENTIFIER, media.getStreamUrl());
        }
        if (!TextUtils.isEmpty(feedItem.getLink())) {
            metadata.putString(CastUtils.KEY_EPISODE_LINK, feedItem.getLink());
        }
    }
    // This field only identifies the id on the device that has the original version.
    // Idea is to perhaps, on a first approach, check if the version on the local DB with the
    // same id matches the remote object, and if not then search for episode and feed identifiers.
    // This at least should make media recognition for a single device much quicker.
    metadata.putInt(CastUtils.KEY_MEDIA_ID, ((Long) media.getIdentifier()).intValue());
    // A way to identify different casting media formats in case we change it in the future and
    // senders with different versions share a casting device.
    metadata.putInt(CastUtils.KEY_FORMAT_VERSION, CastUtils.FORMAT_VERSION_VALUE);
    metadata.putString(CastUtils.KEY_STREAM_URL, media.getStreamUrl());
    MediaInfo.Builder builder = new MediaInfo.Builder(media.getStreamUrl()).setContentType(media.getMime_type()).setStreamType(MediaInfo.STREAM_TYPE_BUFFERED).setMetadata(metadata);
    if (media.getDuration() > 0) {
        builder.setStreamDuration(media.getDuration());
    }
    return builder.build();
}
Also used : MediaInfo(com.google.android.gms.cast.MediaInfo) FeedItem(de.danoeh.antennapod.model.feed.FeedItem) Calendar(java.util.Calendar) MediaMetadata(com.google.android.gms.cast.MediaMetadata) WebImage(com.google.android.gms.common.images.WebImage) Feed(de.danoeh.antennapod.model.feed.Feed)

Example 10 with Feed

use of de.danoeh.antennapod.model.feed.Feed in project AntennaPod by AntennaPod.

the class FeedSyncTask method run.

public boolean run() {
    FeedParserTask task = new FeedParserTask(request);
    FeedHandlerResult result = task.call();
    downloadStatus = task.getDownloadStatus();
    if (!task.isSuccessful()) {
        return false;
    }
    savedFeed = DBTasks.updateFeed(context, result.feed, false);
    // If loadAllPages=true, check if another page is available and queue it for download
    final boolean loadAllPages = request.getArguments().getBoolean(DownloadRequest.REQUEST_ARG_LOAD_ALL_PAGES);
    final Feed feed = result.feed;
    if (loadAllPages && feed.getNextPageLink() != null) {
        feed.setId(savedFeed.getId());
        DBTasks.loadNextPageOfFeed(context, feed, true);
    }
    return true;
}
Also used : FeedHandlerResult(de.danoeh.antennapod.parser.feed.FeedHandlerResult) 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