From 122bed841bead219be66bc977ebfe68f392f53d1 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 25 May 2020 22:28:42 +0200 Subject: [PATCH] Load chapters of local feed items --- .../antennapod/fragment/ChaptersFragment.java | 2 +- .../antennapod/core/feed/FeedMedia.java | 6 ++--- .../playback/PlaybackServiceTaskManager.java | 2 +- .../antennapod/core/util/ChapterUtils.java | 23 +++++++++---------- .../core/util/playback/ExternalMedia.java | 2 +- .../core/util/playback/Playable.java | 9 ++++---- .../core/util/playback/RemoteMedia.java | 4 ++-- 7 files changed, 23 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java index 6d693f6cb..e57869e6e 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java @@ -128,7 +128,7 @@ public class ChaptersFragment extends Fragment { disposable = Maybe.create(emitter -> { Playable media = controller.getMedia(); if (media != null) { - media.loadChapterMarks(); + media.loadChapterMarks(getContext()); emitter.onSuccess(media); } else { emitter.onComplete(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 7e1a5fd9b..df1de201b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -375,7 +375,7 @@ public class FeedMedia extends FeedFile implements Playable { } @Override - public void loadChapterMarks() { + public void loadChapterMarks(Context context) { if (item == null && itemID != 0) { item = DBReader.getFeedItem(itemID); } @@ -386,10 +386,10 @@ public class FeedMedia extends FeedFile implements Playable { if (item.hasChapters()) { DBReader.loadChaptersOfFeedItem(item); } else { - if(localFileAvailable()) { + if (localFileAvailable()) { ChapterUtils.loadChaptersFromFileUrl(this); } else { - ChapterUtils.loadChaptersFromStreamUrl(this); + ChapterUtils.loadChaptersFromStreamUrl(this, context); } if (item.getChapters() != null) { DBWriter.setFeedItem(item); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index 17cd1b24a..5e7ee6532 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -311,7 +311,7 @@ public class PlaybackServiceTaskManager { if (media.getChapters() == null) { Completable.create(emitter -> { - media.loadChapterMarks(); + media.loadChapterMarks(context); emitter.onComplete(); }) .subscribeOn(Schedulers.io()) diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java index b75887154..e0f5e9c03 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java @@ -1,10 +1,10 @@ package de.danoeh.antennapod.core.util; +import android.content.Context; +import android.net.Uri; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import android.util.Log; -import java.util.zip.CheckedOutputStream; import org.apache.commons.io.IOUtils; import java.io.BufferedInputStream; @@ -13,7 +13,6 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.net.URL; import java.util.Collections; import java.util.List; @@ -49,10 +48,10 @@ public class ChapterUtils { return chapters.size() - 1; } - public static void loadChaptersFromStreamUrl(Playable media) { - ChapterUtils.readID3ChaptersFromPlayableStreamUrl(media); + public static void loadChaptersFromStreamUrl(Playable media, Context context) { + ChapterUtils.readID3ChaptersFromPlayableStreamUrl(media, context); if (media.getChapters() == null) { - ChapterUtils.readOggChaptersFromPlayableStreamUrl(media); + ChapterUtils.readOggChaptersFromPlayableStreamUrl(media, context); } } @@ -71,7 +70,7 @@ public class ChapterUtils { * Uses the download URL of a media object of a feeditem to read its ID3 * chapters. */ - private static void readID3ChaptersFromPlayableStreamUrl(Playable p) { + private static void readID3ChaptersFromPlayableStreamUrl(Playable p, Context context) { if (p == null || p.getStreamUrl() == null) { Log.e(TAG, "Unable to read ID3 chapters: media or download URL was null"); return; @@ -79,8 +78,8 @@ public class ChapterUtils { Log.d(TAG, "Reading id3 chapters from item " + p.getEpisodeTitle()); CountingInputStream in = null; try { - URL url = new URL(p.getStreamUrl()); - in = new CountingInputStream(url.openStream()); + Uri uri = Uri.parse(p.getStreamUrl()); + in = new CountingInputStream(context.getContentResolver().openInputStream(uri)); List chapters = readChaptersFrom(in); if (!chapters.isEmpty()) { p.setChapters(chapters); @@ -142,14 +141,14 @@ public class ChapterUtils { return chapters; } - private static void readOggChaptersFromPlayableStreamUrl(Playable media) { + private static void readOggChaptersFromPlayableStreamUrl(Playable media, Context context) { if (media == null || !media.streamAvailable()) { return; } InputStream input = null; try { - URL url = new URL(media.getStreamUrl()); - input = url.openStream(); + Uri uri = Uri.parse(media.getStreamUrl()); + input = context.getContentResolver().openInputStream(uri); if (input != null) { readOggChaptersFromInputStream(media, input); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java index b55091009..81937b62e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java @@ -103,7 +103,7 @@ public class ExternalMedia implements Playable { } @Override - public void loadChapterMarks() { + public void loadChapterMarks(Context context) { } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java index 24aabf212..bab8459a4 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java @@ -4,11 +4,8 @@ import android.content.Context; import android.content.SharedPreferences; import android.os.Parcelable; import android.preference.PreferenceManager; -import androidx.annotation.Nullable; import android.util.Log; - -import java.util.List; - +import androidx.annotation.Nullable; import de.danoeh.antennapod.core.asynctask.ImageResource; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.FeedMedia; @@ -17,6 +14,8 @@ import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.ShownotesProvider; +import java.util.List; + /** * Interface for objects that can be played by the PlaybackService. */ @@ -44,7 +43,7 @@ public interface Playable extends Parcelable, * Playable objects should load their chapter marks in this method if no * local file was available when loadMetadata() was called. */ - void loadChapterMarks(); + void loadChapterMarks(Context context); /** * Returns the title of the episode that this playable represents diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java index ca09cda4b..669279294 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java @@ -129,8 +129,8 @@ public class RemoteMedia implements Playable { } @Override - public void loadChapterMarks() { - ChapterUtils.loadChaptersFromStreamUrl(this); + public void loadChapterMarks(Context context) { + ChapterUtils.loadChaptersFromStreamUrl(this, context); } @Override