From d525b044683409a7f5857643376c0251bb129a5d Mon Sep 17 00:00:00 2001 From: evermind Date: Fri, 17 Feb 2023 22:44:20 +0100 Subject: [PATCH] sponsorblock: move fetching VideoSegment's to DownloadDialog - move fetching VideoSegment's to DownloadDialog - integrate ProgressBar to show that we are fetching VideoSegment's --- .../newpipe/download/DownloadDialog.java | 42 ++++++++++++++++++- .../fragments/detail/VideoDetailFragment.java | 41 ++++-------------- app/src/main/res/layout/download_dialog.xml | 16 ++++++- 3 files changed, 62 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java index 01c5aea7f..e38ac7d39 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.download; import static org.schabi.newpipe.extractor.stream.DeliveryMethod.PROGRESSIVE_HTTP; +import static org.schabi.newpipe.ktx.ViewUtils.animate; import static org.schabi.newpipe.util.ListHelper.getStreamsOfSpecifiedDelivery; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; @@ -66,6 +67,7 @@ import org.schabi.newpipe.util.ListHelper; import org.schabi.newpipe.util.PermissionHelper; import org.schabi.newpipe.util.SecondaryStreamHelper; import org.schabi.newpipe.util.SimpleOnSeekBarChangeListener; +import org.schabi.newpipe.util.SponsorBlockUtils; import org.schabi.newpipe.util.StreamItemAdapter; import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper; import org.schabi.newpipe.util.ThemeHelper; @@ -80,7 +82,10 @@ import java.util.Optional; import icepick.Icepick; import icepick.State; +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.disposables.CompositeDisposable; +import io.reactivex.rxjava3.schedulers.Schedulers; import us.shandian.giga.get.MissionRecoveryInfo; import us.shandian.giga.postprocessing.Postprocessing; import us.shandian.giga.service.DownloadManager; @@ -260,7 +265,7 @@ public class DownloadDialog extends DialogFragment downloadManager = mgr.getDownloadManager(); askForSavePath = mgr.askForSavePath(); - okButton.setEnabled(true); + checkForYoutubeVideoSegments(); context.unbindService(this); } @@ -301,6 +306,8 @@ public class DownloadDialog extends DialogFragment dialogBinding.videoAudioGroup.setOnCheckedChangeListener(this); + showLoading(); + initToolbar(dialogBinding.toolbarLayout.toolbar); setupDownloadOptions(); @@ -1077,4 +1084,37 @@ public class DownloadDialog extends DialogFragment dismiss(); } + + private void checkForYoutubeVideoSegments() { + disposables.add(Single.fromCallable(() -> { + VideoSegment[] videoSegments = null; + try { + videoSegments = SponsorBlockUtils + .getYouTubeVideoSegments(getContext(), currentInfo); + } catch (final Exception e) { + // TODO: handle? + } + + return videoSegments == null + ? new VideoSegment[0] + : videoSegments; + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(videoSegments -> { + setVideoSegments(videoSegments); + okButton.setEnabled(true); + hideLoading(); + })); + } + + public void showLoading() { + dialogBinding.fileName.setVisibility(View.GONE); + animate(dialogBinding.loadingProgressBar, true, 400); + } + + public void hideLoading() { + animate(dialogBinding.loadingProgressBar, false, 0); + dialogBinding.fileName.setVisibility(View.VISIBLE); + } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 1c365a649..b9aa7fdbb 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -108,7 +108,6 @@ import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.ExtractorHelper; import org.schabi.newpipe.util.ReturnYouTubeDislikeUtils; -import org.schabi.newpipe.util.VideoSegment; import org.schabi.newpipe.util.external_communication.KoreUtils; import org.schabi.newpipe.util.ListHelper; import org.schabi.newpipe.util.Localization; @@ -116,7 +115,6 @@ import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.PermissionHelper; import org.schabi.newpipe.util.PicassoHelper; import org.schabi.newpipe.util.StreamTypeUtil; -import org.schabi.newpipe.util.SponsorBlockUtils; import org.schabi.newpipe.util.external_communication.ShareUtils; import org.schabi.newpipe.util.ThemeHelper; @@ -131,7 +129,6 @@ import java.util.function.Consumer; import icepick.State; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; @@ -212,8 +209,6 @@ public final class VideoDetailFragment private final CompositeDisposable disposables = new CompositeDisposable(); @Nullable private Disposable positionSubscriber = null; - @Nullable - private Disposable videoSegmentsSubscriber = null; private BottomSheetBehavior bottomSheetBehavior; private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback; @@ -407,9 +402,6 @@ public final class VideoDetailFragment if (positionSubscriber != null) { positionSubscriber.dispose(); } - if (videoSegmentsSubscriber != null) { - videoSegmentsSubscriber.dispose(); - } if (currentWorker != null) { currentWorker.dispose(); } @@ -1683,32 +1675,13 @@ public final class VideoDetailFragment return; } - videoSegmentsSubscriber = Single.fromCallable(() -> { - VideoSegment[] videoSegments = null; - - try { - videoSegments = - SponsorBlockUtils.getYouTubeVideoSegments(getContext(), currentInfo); - } catch (final Exception e) { - // TODO: handle? - } - - return videoSegments == null - ? new VideoSegment[0] - : videoSegments; - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(videoSegments -> { - try { - final DownloadDialog downloadDialog = new DownloadDialog(activity, currentInfo); - downloadDialog.setVideoSegments(videoSegments); - downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog"); - } catch (final Exception e) { - ErrorUtil.showSnackbar(activity, new ErrorInfo(e, UserAction.DOWNLOAD_OPEN_DIALOG, - "Showing download dialog", currentInfo)); - } - }); + try { + final DownloadDialog downloadDialog = new DownloadDialog(activity, currentInfo); + downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog"); + } catch (final Exception e) { + ErrorUtil.showSnackbar(activity, new ErrorInfo(e, UserAction.DOWNLOAD_OPEN_DIALOG, + "Showing download dialog", currentInfo)); + } } /*////////////////////////////////////////////////////////////////////////// diff --git a/app/src/main/res/layout/download_dialog.xml b/app/src/main/res/layout/download_dialog.xml index 37bbf2b03..705b11f5f 100644 --- a/app/src/main/res/layout/download_dialog.xml +++ b/app/src/main/res/layout/download_dialog.xml @@ -18,16 +18,28 @@ android:layout_marginBottom="6dp" android:text="@string/msg_name" /> + + + android:maxLines="1" + android:visibility="gone" + tools:visibility="visible" />