Merge pull request #5241 from ByteHamster/speed-up-media-info

Speed up loading media info
This commit is contained in:
ByteHamster 2021-06-25 19:14:08 +02:00 committed by GitHub
commit 00e2ad49d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 25 deletions

View File

@ -268,7 +268,7 @@ public class AudioPlayerFragment extends Fragment implements
} }
controller.setPlaybackSpeed(newSpeed); controller.setPlaybackSpeed(newSpeed);
loadMediaInfo(); loadMediaInfo(false);
}); });
butPlaybackSpeed.setOnLongClickListener(v -> { butPlaybackSpeed.setOnLongClickListener(v -> {
new VariableSpeedDialog().show(getChildFragmentManager(), null); new VariableSpeedDialog().show(getChildFragmentManager(), null);
@ -290,14 +290,16 @@ public class AudioPlayerFragment extends Fragment implements
txtvPlaybackSpeed.setVisibility(View.VISIBLE); txtvPlaybackSpeed.setVisibility(View.VISIBLE);
} }
private void loadMediaInfo() { private void loadMediaInfo(boolean includingChapters) {
if (disposable != null) { if (disposable != null) {
disposable.dispose(); disposable.dispose();
} }
disposable = Maybe.create(emitter -> { disposable = Maybe.<Playable>create(emitter -> {
Playable media = controller.getMedia(); Playable media = controller.getMedia();
if (media != null) { if (media != null) {
if (includingChapters) {
ChapterUtils.loadChapters(media, getContext()); ChapterUtils.loadChapters(media, getContext());
}
emitter.onSuccess(media); emitter.onSuccess(media);
} else { } else {
emitter.onComplete(); emitter.onComplete();
@ -305,8 +307,12 @@ public class AudioPlayerFragment extends Fragment implements
}) })
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(media -> updateUi((Playable) media), .subscribe(media -> {
error -> Log.e(TAG, Log.getStackTraceString(error)), updateUi(media);
if (media.getChapters() == null && !includingChapters) {
loadMediaInfo(true);
}
}, error -> Log.e(TAG, Log.getStackTraceString(error)),
() -> updateUi(null)); () -> updateUi(null));
} }
@ -350,7 +356,7 @@ public class AudioPlayerFragment extends Fragment implements
@Override @Override
public void onSleepTimerUpdate() { public void onSleepTimerUpdate() {
AudioPlayerFragment.this.loadMediaInfo(); AudioPlayerFragment.this.loadMediaInfo(false);
} }
@Override @Override
@ -360,7 +366,7 @@ public class AudioPlayerFragment extends Fragment implements
@Override @Override
public void loadMediaInfo() { public void loadMediaInfo() {
AudioPlayerFragment.this.loadMediaInfo(); AudioPlayerFragment.this.loadMediaInfo(false);
} }
@Override @Override
@ -397,7 +403,7 @@ public class AudioPlayerFragment extends Fragment implements
super.onStart(); super.onStart();
controller = newPlaybackController(); controller = newPlaybackController();
controller.init(); controller.init();
loadMediaInfo(); loadMediaInfo(false);
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
txtvRev.setText(NumberFormat.getInstance().format(UserPreferences.getRewindSecs())); txtvRev.setText(NumberFormat.getInstance().format(UserPreferences.getRewindSecs()));
txtvFF.setText(NumberFormat.getInstance().format(UserPreferences.getFastForwardSecs())); txtvFF.setText(NumberFormat.getInstance().format(UserPreferences.getFastForwardSecs()));
@ -447,7 +453,7 @@ public class AudioPlayerFragment extends Fragment implements
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
public void favoritesChanged(FavoritesEvent event) { public void favoritesChanged(FavoritesEvent event) {
AudioPlayerFragment.this.loadMediaInfo(); AudioPlayerFragment.this.loadMediaInfo(false);
} }
@Override @Override

View File

@ -124,14 +124,16 @@ public class CoverFragment extends Fragment {
configureForOrientation(getResources().getConfiguration()); configureForOrientation(getResources().getConfiguration());
} }
private void loadMediaInfo() { private void loadMediaInfo(boolean includingChapters) {
if (disposable != null) { if (disposable != null) {
disposable.dispose(); disposable.dispose();
} }
disposable = Maybe.<Playable>create(emitter -> { disposable = Maybe.<Playable>create(emitter -> {
Playable media = controller.getMedia(); Playable media = controller.getMedia();
if (media != null) { if (media != null) {
if (includingChapters) {
ChapterUtils.loadChapters(media, getContext()); ChapterUtils.loadChapters(media, getContext());
}
emitter.onSuccess(media); emitter.onSuccess(media);
} else { } else {
emitter.onComplete(); emitter.onComplete();
@ -141,6 +143,9 @@ public class CoverFragment extends Fragment {
.subscribe(media -> { .subscribe(media -> {
this.media = media; this.media = media;
displayMediaInfo(media); displayMediaInfo(media);
if (media.getChapters() == null && !includingChapters) {
loadMediaInfo(true);
}
}, error -> Log.e(TAG, Log.getStackTraceString(error))); }, error -> Log.e(TAG, Log.getStackTraceString(error)));
} }
@ -186,8 +191,14 @@ public class CoverFragment extends Fragment {
} }
private void updateChapterControlVisibility() { private void updateChapterControlVisibility() {
boolean chapterControlVisible = false;
if (media.getChapters() != null) { if (media.getChapters() != null) {
boolean chapterControlVisible = media.getChapters().size() > 0; chapterControlVisible = media.getChapters().size() > 0;
} else if (media instanceof FeedMedia) {
FeedMedia fm = ((FeedMedia) media);
// If an item has chapters but they are not loaded yet, still display the button.
chapterControlVisible = fm.getItem() != null && fm.getItem().hasChapters();
}
int newVisibility = chapterControlVisible ? View.VISIBLE : View.GONE; int newVisibility = chapterControlVisible ? View.VISIBLE : View.GONE;
if (chapterControl.getVisibility() != newVisibility) { if (chapterControl.getVisibility() != newVisibility) {
chapterControl.setVisibility(newVisibility); chapterControl.setVisibility(newVisibility);
@ -198,7 +209,6 @@ public class CoverFragment extends Fragment {
.start(); .start();
} }
} }
}
private void refreshChapterData(int chapterIndex) { private void refreshChapterData(int chapterIndex) {
if (chapterIndex > -1) { if (chapterIndex > -1) {
@ -262,11 +272,11 @@ public class CoverFragment extends Fragment {
controller = new PlaybackController(getActivity()) { controller = new PlaybackController(getActivity()) {
@Override @Override
public void loadMediaInfo() { public void loadMediaInfo() {
CoverFragment.this.loadMediaInfo(); CoverFragment.this.loadMediaInfo(false);
} }
}; };
controller.init(); controller.init();
loadMediaInfo(); loadMediaInfo(false);
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
} }

View File

@ -62,6 +62,7 @@ public class ChapterSeekBar extends androidx.appcompat.widget.AppCompatSeekBar {
} else { } else {
this.dividerPos = null; this.dividerPos = null;
} }
invalidate();
} }
public void highlightCurrentChapter() { public void highlightCurrentChapter() {