Removed chapter loader from model

This commit is contained in:
ByteHamster 2021-03-01 16:50:08 +01:00
parent ddd6a12354
commit b7d34e0514
7 changed files with 38 additions and 51 deletions

View File

@ -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();

View File

@ -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<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) {
@ -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);
}
}

View File

@ -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())

View File

@ -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);

View File

@ -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;

View File

@ -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
*/

View File

@ -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;