Merge pull request #309 from bravenewpipe/move-fetching-VideoSegments-to-DownloadDialog

sponsorblock: move fetching VideoSegment's to DownloadDialog
This commit is contained in:
poly 2023-04-08 14:27:04 -06:00 committed by GitHub
commit fa86c2632b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 62 additions and 37 deletions

View file

@ -1,6 +1,7 @@
package org.schabi.newpipe.download; package org.schabi.newpipe.download;
import static org.schabi.newpipe.extractor.stream.DeliveryMethod.PROGRESSIVE_HTTP; 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.ListHelper.getStreamsOfSpecifiedDelivery;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; 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.PermissionHelper;
import org.schabi.newpipe.util.SecondaryStreamHelper; import org.schabi.newpipe.util.SecondaryStreamHelper;
import org.schabi.newpipe.util.SimpleOnSeekBarChangeListener; import org.schabi.newpipe.util.SimpleOnSeekBarChangeListener;
import org.schabi.newpipe.util.SponsorBlockUtils;
import org.schabi.newpipe.util.StreamItemAdapter; import org.schabi.newpipe.util.StreamItemAdapter;
import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper; import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
@ -80,7 +82,10 @@ import java.util.Optional;
import icepick.Icepick; import icepick.Icepick;
import icepick.State; 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.CompositeDisposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import us.shandian.giga.get.MissionRecoveryInfo; import us.shandian.giga.get.MissionRecoveryInfo;
import us.shandian.giga.postprocessing.Postprocessing; import us.shandian.giga.postprocessing.Postprocessing;
import us.shandian.giga.service.DownloadManager; import us.shandian.giga.service.DownloadManager;
@ -260,7 +265,7 @@ public class DownloadDialog extends DialogFragment
downloadManager = mgr.getDownloadManager(); downloadManager = mgr.getDownloadManager();
askForSavePath = mgr.askForSavePath(); askForSavePath = mgr.askForSavePath();
okButton.setEnabled(true); checkForYoutubeVideoSegments();
context.unbindService(this); context.unbindService(this);
} }
@ -301,6 +306,8 @@ public class DownloadDialog extends DialogFragment
dialogBinding.videoAudioGroup.setOnCheckedChangeListener(this); dialogBinding.videoAudioGroup.setOnCheckedChangeListener(this);
showLoading();
initToolbar(dialogBinding.toolbarLayout.toolbar); initToolbar(dialogBinding.toolbarLayout.toolbar);
setupDownloadOptions(); setupDownloadOptions();
@ -1077,4 +1084,37 @@ public class DownloadDialog extends DialogFragment
dismiss(); 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);
}
} }

View file

@ -105,7 +105,6 @@ import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ExtractorHelper; import org.schabi.newpipe.util.ExtractorHelper;
import org.schabi.newpipe.util.ReturnYouTubeDislikeUtils; 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.external_communication.KoreUtils;
import org.schabi.newpipe.util.ListHelper; import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.Localization;
@ -113,7 +112,6 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper; import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.PicassoHelper; import org.schabi.newpipe.util.PicassoHelper;
import org.schabi.newpipe.util.StreamTypeUtil; 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.external_communication.ShareUtils;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
@ -128,7 +126,6 @@ import java.util.function.Consumer;
import icepick.State; import icepick.State;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.schedulers.Schedulers;
@ -209,8 +206,6 @@ public final class VideoDetailFragment
private final CompositeDisposable disposables = new CompositeDisposable(); private final CompositeDisposable disposables = new CompositeDisposable();
@Nullable @Nullable
private Disposable positionSubscriber = null; private Disposable positionSubscriber = null;
@Nullable
private Disposable videoSegmentsSubscriber = null;
private BottomSheetBehavior<FrameLayout> bottomSheetBehavior; private BottomSheetBehavior<FrameLayout> bottomSheetBehavior;
private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback; private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback;
@ -404,9 +399,6 @@ public final class VideoDetailFragment
if (positionSubscriber != null) { if (positionSubscriber != null) {
positionSubscriber.dispose(); positionSubscriber.dispose();
} }
if (videoSegmentsSubscriber != null) {
videoSegmentsSubscriber.dispose();
}
if (currentWorker != null) { if (currentWorker != null) {
currentWorker.dispose(); currentWorker.dispose();
} }
@ -1672,32 +1664,13 @@ public final class VideoDetailFragment
return; return;
} }
videoSegmentsSubscriber = Single.fromCallable(() -> { try {
VideoSegment[] videoSegments = null; final DownloadDialog downloadDialog = new DownloadDialog(activity, currentInfo);
downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog");
try { } catch (final Exception e) {
videoSegments = ErrorUtil.showSnackbar(activity, new ErrorInfo(e, UserAction.DOWNLOAD_OPEN_DIALOG,
SponsorBlockUtils.getYouTubeVideoSegments(getContext(), currentInfo); "Showing download dialog", 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));
}
});
} }
/*////////////////////////////////////////////////////////////////////////// /*//////////////////////////////////////////////////////////////////////////

View file

@ -18,16 +18,28 @@
android:layout_marginBottom="6dp" android:layout_marginBottom="6dp"
android:text="@string/msg_name" /> android:text="@string/msg_name" />
<ProgressBar
android:id="@+id/loading_progress_bar"
style="@style/Widget.AppCompat.ProgressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/file_name_text_view"
android:indeterminate="true"
android:visibility="gone"
tools:visibility="visible" />
<org.schabi.newpipe.views.NewPipeEditText <org.schabi.newpipe.views.NewPipeEditText
android:id="@+id/file_name" android:id="@+id/file_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/file_name_text_view" android:layout_below="@id/loading_progress_bar"
android:layout_marginLeft="20dp" android:layout_marginLeft="20dp"
android:layout_marginRight="20dp" android:layout_marginRight="20dp"
android:layout_marginBottom="6dp" android:layout_marginBottom="6dp"
android:inputType="text" android:inputType="text"
android:maxLines="1" /> android:maxLines="1"
android:visibility="gone"
tools:visibility="visible" />
<RadioGroup <RadioGroup
android:id="@+id/video_audio_group" android:id="@+id/video_audio_group"