summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java35
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java30
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java7
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java6
6 files changed, 37 insertions, 50 deletions
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;
}