diff options
author | ByteHamster <info@bytehamster.com> | 2021-03-01 16:50:08 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2021-03-01 16:54:39 +0100 |
commit | b7d34e05148b42ff10ac5532fdb0d77ffa66ac9c (patch) | |
tree | c095cce853456c44d1b556507e9719cb1dcc5a0d | |
parent | ddd6a12354b776bf0ae28b2d0ea2f1f067daf341 (diff) | |
download | AntennaPod-b7d34e05148b42ff10ac5532fdb0d77ffa66ac9c.zip |
Removed chapter loader from model
7 files changed, 38 insertions, 51 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 b578a603f..5b9e4c5e9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java @@ -118,7 +118,7 @@ public class ChaptersFragment extends Fragment { disposable = Maybe.create(emitter -> { Playable media = controller.getMedia(); if (media != null) { - media.loadChapterMarks(getContext()); + ChapterUtils.loadChapters(media, 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 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; @@ -386,33 +384,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<Chapter> 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<Chapter> loadChapters(Context context) { - List<Chapter> chaptersFromDatabase = null; - if (item.hasChapters()) { - chaptersFromDatabase = DBReader.loadChaptersOfFeedItem(item); - } - List<Chapter> chaptersFromMediaFile = ChapterUtils.loadChaptersFromMediaFile(this, context); - return ChapterMerger.merge(chaptersFromDatabase, chaptersFromMediaFile); - } - - @Override public String getEpisodeTitle() { if (item == null) { return 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<Chapter> 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<Chapter> 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<Chapter> chaptersFromMediaFile = ChapterUtils.loadChaptersFromMediaFile(playable, context); + List<Chapter> 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<Chapter> loadChaptersFromMediaFile(Playable playable, Context context) { try (CountingInputStream in = openStream(playable, context)) { List<Chapter> 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; @@ -121,11 +120,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 @@ -34,13 +34,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 */ String getEpisodeTitle(); 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; @@ -129,11 +128,6 @@ public class RemoteMedia implements Playable { } @Override - public void loadChapterMarks(Context context) { - setChapters(ChapterUtils.loadChaptersFromMediaFile(this, context)); - } - - @Override public String getEpisodeTitle() { return episodeTitle; } |