From b7d34e05148b42ff10ac5532fdb0d77ffa66ac9c Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 1 Mar 2021 16:50:08 +0100 Subject: Removed chapter loader from model --- .../de/danoeh/antennapod/core/feed/FeedMedia.java | 35 ++++------------------ .../playback/PlaybackServiceTaskManager.java | 3 +- .../danoeh/antennapod/core/util/ChapterUtils.java | 30 +++++++++++++++++++ .../core/util/playback/ExternalMedia.java | 6 ---- .../antennapod/core/util/playback/Playable.java | 7 ----- .../antennapod/core/util/playback/RemoteMedia.java | 6 ---- 6 files changed, 37 insertions(+), 50 deletions(-) (limited to 'core/src/main/java/de/danoeh') 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 9049a3ba9..34c9b8ca7 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 @@ -12,7 +12,6 @@ import androidx.annotation.Nullable; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaDescriptionCompat; -import java.util.Collections; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; @@ -24,7 +23,6 @@ import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.PodDBAdapter; -import de.danoeh.antennapod.core.util.ChapterUtils; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.sync.SyncService; import de.danoeh.antennapod.core.sync.model.EpisodeAction; @@ -385,33 +383,6 @@ public class FeedMedia extends FeedFile implements Playable { } } - @Override - public void loadChapterMarks(Context context) { - if (item == null && itemID != 0) { - item = DBReader.getFeedItem(itemID); - } - if (item == null || item.getChapters() != null) { - return; - } - - List chapters = loadChapters(context); - if (chapters == null) { - // Do not try loading again. There are no chapters. - item.setChapters(Collections.emptyList()); - } else { - item.setChapters(chapters); - } - } - - private List loadChapters(Context context) { - List chaptersFromDatabase = null; - if (item.hasChapters()) { - chaptersFromDatabase = DBReader.loadChaptersOfFeedItem(item); - } - List chaptersFromMediaFile = ChapterUtils.loadChaptersFromMediaFile(this, context); - return ChapterMerger.merge(chaptersFromDatabase, chaptersFromMediaFile); - } - @Override public String getEpisodeTitle() { if (item == null) { @@ -493,6 +464,10 @@ public class FeedMedia extends FeedFile implements Playable { return download_url != null; } + public long getItemId() { + return itemID; + } + @Override public void saveCurrentPosition(SharedPreferences pref, int newPosition, long timeStamp) { if(item != null && item.isNew()) { @@ -549,7 +524,7 @@ public class FeedMedia extends FeedFile implements Playable { @Override public void setChapters(List chapters) { - if(item != null) { + if (item != null) { item.setChapters(chapters); } } 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 b9bc0c712..556d9b3c0 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 @@ -8,6 +8,7 @@ import androidx.annotation.NonNull; import android.util.Log; import de.danoeh.antennapod.core.preferences.SleepTimerPreferences; +import de.danoeh.antennapod.core.util.ChapterUtils; import de.danoeh.antennapod.core.widget.WidgetUpdater; import io.reactivex.disposables.Disposable; import org.greenrobot.eventbus.EventBus; @@ -315,7 +316,7 @@ public class PlaybackServiceTaskManager { if (media.getChapters() == null) { chapterLoaderFuture = Completable.create(emitter -> { - media.loadChapterMarks(context); + ChapterUtils.loadChapters(media, 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 4ad35d0c2..ca9689048 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 @@ -6,7 +6,10 @@ import android.net.Uri; import android.util.Log; import androidx.annotation.NonNull; import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.ChapterMerger; +import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; +import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.comparator.ChapterStartTimeComparator; import de.danoeh.antennapod.core.util.id3reader.ChapterReader; import de.danoeh.antennapod.core.util.id3reader.ID3ReaderException; @@ -47,6 +50,33 @@ public class ChapterUtils { return chapters.size() - 1; } + public static void loadChapters(Playable playable, Context context) { + if (playable.getChapters() != null) { + // Already loaded + return; + } + + List chaptersFromDatabase = null; + if (playable instanceof FeedMedia) { + FeedMedia feedMedia = (FeedMedia) playable; + if (feedMedia.getItem() == null) { + feedMedia.setItem(DBReader.getFeedItem(feedMedia.getItemId())); + } + if (feedMedia.getItem().hasChapters()) { + chaptersFromDatabase = DBReader.loadChaptersOfFeedItem(feedMedia.getItem()); + } + } + + List chaptersFromMediaFile = ChapterUtils.loadChaptersFromMediaFile(playable, context); + List chapters = ChapterMerger.merge(chaptersFromDatabase, chaptersFromMediaFile); + if (chapters == null) { + // Do not try loading again. There are no chapters. + playable.setChapters(Collections.emptyList()); + } else { + playable.setChapters(chapters); + } + } + public static List loadChaptersFromMediaFile(Playable playable, Context context) { try (CountingInputStream in = openStream(playable, context)) { List chapters = readId3ChaptersFrom(in); 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 007658626..8c96ab11f 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 @@ -9,7 +9,6 @@ import android.os.Parcelable; import android.text.TextUtils; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.MediaType; -import de.danoeh.antennapod.core.util.ChapterUtils; import de.danoeh.antennapod.core.util.DateUtils; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -120,11 +119,6 @@ public class ExternalMedia implements Playable { } } - @Override - public void loadChapterMarks(Context context) { - setChapters(ChapterUtils.loadChaptersFromMediaFile(this, context)); - } - @Override public String getEpisodeTitle() { return episodeTitle; 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 8a4c561f4..f103b32bf 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 @@ -33,13 +33,6 @@ public interface Playable extends Parcelable, ShownotesProvider { */ void loadMetadata() throws PlayableException; - /** - * This method is called from a separate thread by the PlaybackService. - * Playable objects should load their chapter marks in this method if no - * local file was available when loadMetadata() was called. - */ - 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 7de1a7812..219edd2e7 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 @@ -11,7 +11,6 @@ import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; -import de.danoeh.antennapod.core.util.ChapterUtils; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; @@ -128,11 +127,6 @@ public class RemoteMedia implements Playable { //Already loaded } - @Override - public void loadChapterMarks(Context context) { - setChapters(ChapterUtils.loadChaptersFromMediaFile(this, context)); - } - @Override public String getEpisodeTitle() { return episodeTitle; -- cgit v1.2.3