Search in sources :

Example 1 with StreamInfoItem

use of org.schabi.newpipe.extractor.stream.StreamInfoItem in project NewPipe by TeamNewPipe.

the class PlayerHelper method autoQueueOf.

/**
 * Given a {@link StreamInfo} and the existing queue items, provide the
 * {@link SinglePlayQueue} consisting of the next video for auto queuing.
 * <br><br>
 * This method detects and prevents cycle by naively checking if a
 * candidate next video's url already exists in the existing items.
 * <br><br>
 * To select the next video, {@link StreamInfo#getNextVideo()} is first
 * checked. If it is nonnull and is not part of the existing items, then
 * it will be used as the next video. Otherwise, an random item with
 * non-repeating url will be selected from the {@link StreamInfo#getRelatedStreams()}.
 */
@Nullable
public static PlayQueue autoQueueOf(@NonNull final StreamInfo info, @NonNull final List<PlayQueueItem> existingItems) {
    Set<String> urls = new HashSet<>(existingItems.size());
    for (final PlayQueueItem item : existingItems) {
        urls.add(item.getUrl());
    }
    final StreamInfoItem nextVideo = info.getNextVideo();
    if (nextVideo != null && !urls.contains(nextVideo.getUrl())) {
        return new SinglePlayQueue(nextVideo);
    }
    final List<InfoItem> relatedItems = info.getRelatedStreams();
    if (relatedItems == null)
        return null;
    List<StreamInfoItem> autoQueueItems = new ArrayList<>();
    for (final InfoItem item : info.getRelatedStreams()) {
        if (item instanceof StreamInfoItem && !urls.contains(item.getUrl())) {
            autoQueueItems.add((StreamInfoItem) item);
        }
    }
    Collections.shuffle(autoQueueItems);
    return autoQueueItems.isEmpty() ? null : new SinglePlayQueue(autoQueueItems.get(0));
}
Also used : PlayQueueItem(org.schabi.newpipe.playlist.PlayQueueItem) InfoItem(org.schabi.newpipe.extractor.InfoItem) StreamInfoItem(org.schabi.newpipe.extractor.stream.StreamInfoItem) StreamInfoItem(org.schabi.newpipe.extractor.stream.StreamInfoItem) ArrayList(java.util.ArrayList) SinglePlayQueue(org.schabi.newpipe.playlist.SinglePlayQueue) HashSet(java.util.HashSet) Nullable(android.support.annotation.Nullable)

Example 2 with StreamInfoItem

use of org.schabi.newpipe.extractor.stream.StreamInfoItem in project NewPipe by TeamNewPipe.

the class PlaylistStreamEntry method toStreamInfoItem.

public StreamInfoItem toStreamInfoItem() throws IllegalArgumentException {
    StreamInfoItem item = new StreamInfoItem(serviceId, url, title, streamType);
    item.setThumbnailUrl(thumbnailUrl);
    item.setUploaderName(uploader);
    item.setDuration(duration);
    return item;
}
Also used : StreamInfoItem(org.schabi.newpipe.extractor.stream.StreamInfoItem)

Example 3 with StreamInfoItem

use of org.schabi.newpipe.extractor.stream.StreamInfoItem in project NewPipe by TeamNewPipe.

the class BaseListFragment method initListeners.

@Override
protected void initListeners() {
    super.initListeners();
    infoListAdapter.setOnStreamSelectedListener(new OnClickGesture<StreamInfoItem>() {

        @Override
        public void selected(StreamInfoItem selectedItem) {
            onItemSelected(selectedItem);
            NavigationHelper.openVideoDetailFragment(useAsFrontPage ? getParentFragment().getFragmentManager() : getFragmentManager(), selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName());
        }

        @Override
        public void held(StreamInfoItem selectedItem) {
            showStreamDialog(selectedItem);
        }
    });
    infoListAdapter.setOnChannelSelectedListener(new OnClickGesture<ChannelInfoItem>() {

        @Override
        public void selected(ChannelInfoItem selectedItem) {
            onItemSelected(selectedItem);
            NavigationHelper.openChannelFragment(useAsFrontPage ? getParentFragment().getFragmentManager() : getFragmentManager(), selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName());
        }
    });
    infoListAdapter.setOnPlaylistSelectedListener(new OnClickGesture<PlaylistInfoItem>() {

        @Override
        public void selected(PlaylistInfoItem selectedItem) {
            onItemSelected(selectedItem);
            NavigationHelper.openPlaylistFragment(useAsFrontPage ? getParentFragment().getFragmentManager() : getFragmentManager(), selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName());
        }
    });
    itemsList.clearOnScrollListeners();
    itemsList.addOnScrollListener(new OnScrollBelowItemsListener() {

        @Override
        public void onScrolledDown(RecyclerView recyclerView) {
            onScrollToBottom();
        }
    });
}
Also used : OnScrollBelowItemsListener(org.schabi.newpipe.fragments.OnScrollBelowItemsListener) StreamInfoItem(org.schabi.newpipe.extractor.stream.StreamInfoItem) RecyclerView(android.support.v7.widget.RecyclerView) ChannelInfoItem(org.schabi.newpipe.extractor.channel.ChannelInfoItem) PlaylistInfoItem(org.schabi.newpipe.extractor.playlist.PlaylistInfoItem)

Example 4 with StreamInfoItem

use of org.schabi.newpipe.extractor.stream.StreamInfoItem in project NewPipe by TeamNewPipe.

the class PlaylistFragment method showStreamDialog.

@Override
protected void showStreamDialog(final StreamInfoItem item) {
    final Context context = getContext();
    final Activity activity = getActivity();
    if (context == null || context.getResources() == null || getActivity() == null)
        return;
    final String[] commands = new String[] { context.getResources().getString(R.string.enqueue_on_background), context.getResources().getString(R.string.enqueue_on_popup), context.getResources().getString(R.string.start_here_on_main), context.getResources().getString(R.string.start_here_on_background), context.getResources().getString(R.string.start_here_on_popup) };
    final DialogInterface.OnClickListener actions = (dialogInterface, i) -> {
        final int index = Math.max(infoListAdapter.getItemsList().indexOf(item), 0);
        switch(i) {
            case 0:
                NavigationHelper.enqueueOnBackgroundPlayer(context, new SinglePlayQueue(item));
                break;
            case 1:
                NavigationHelper.enqueueOnPopupPlayer(activity, new SinglePlayQueue(item));
                break;
            case 2:
                NavigationHelper.playOnMainPlayer(context, getPlayQueue(index));
                break;
            case 3:
                NavigationHelper.playOnBackgroundPlayer(context, getPlayQueue(index));
                break;
            case 4:
                NavigationHelper.playOnPopupPlayer(activity, getPlayQueue(index));
                break;
            default:
                break;
        }
    };
    new InfoItemDialog(getActivity(), item, commands, actions).show();
}
Also used : Context(android.content.Context) Context(android.content.Context) ImageDisplayConstants(org.schabi.newpipe.util.ImageDisplayConstants) Bundle(android.os.Bundle) ThemeHelper(org.schabi.newpipe.util.ThemeHelper) ImageView(android.widget.ImageView) PlaylistRemoteEntity(org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity) ListExtractor(org.schabi.newpipe.extractor.ListExtractor) NewPipe(org.schabi.newpipe.extractor.NewPipe) NavigationHelper(org.schabi.newpipe.util.NavigationHelper) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) NonNull(android.support.annotation.NonNull) Single(io.reactivex.Single) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) MenuItem(android.view.MenuItem) SinglePlayQueue(org.schabi.newpipe.playlist.SinglePlayQueue) ArrayList(java.util.ArrayList) StreamInfo(org.schabi.newpipe.extractor.stream.StreamInfo) InfoItem(org.schabi.newpipe.extractor.InfoItem) Disposables(io.reactivex.disposables.Disposables) MenuInflater(android.view.MenuInflater) ExtractorHelper(org.schabi.newpipe.util.ExtractorHelper) Menu(android.view.Menu) View(android.view.View) BaseListInfoFragment(org.schabi.newpipe.fragments.list.BaseListInfoFragment) AnimationUtils.animateView(org.schabi.newpipe.util.AnimationUtils.animateView) Subscriber(org.reactivestreams.Subscriber) R(org.schabi.newpipe.R) PlaylistInfo(org.schabi.newpipe.extractor.playlist.PlaylistInfo) Log(android.util.Log) ExtractionException(org.schabi.newpipe.extractor.exceptions.ExtractionException) DialogInterface(android.content.DialogInterface) RemotePlaylistManager(org.schabi.newpipe.fragments.local.RemotePlaylistManager) LayoutInflater(android.view.LayoutInflater) TextUtils(android.text.TextUtils) UserAction(org.schabi.newpipe.report.UserAction) NewPipeDatabase(org.schabi.newpipe.NewPipeDatabase) ViewGroup(android.view.ViewGroup) StreamInfoItem(org.schabi.newpipe.extractor.stream.StreamInfoItem) List(java.util.List) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) Disposable(io.reactivex.disposables.Disposable) TextView(android.widget.TextView) InfoItemDialog(org.schabi.newpipe.info_list.InfoItemDialog) Subscription(org.reactivestreams.Subscription) PlaylistPlayQueue(org.schabi.newpipe.playlist.PlaylistPlayQueue) PlayQueue(org.schabi.newpipe.playlist.PlayQueue) Nullable(android.support.annotation.Nullable) Activity(android.app.Activity) InfoItemDialog(org.schabi.newpipe.info_list.InfoItemDialog) DialogInterface(android.content.DialogInterface) Activity(android.app.Activity) SinglePlayQueue(org.schabi.newpipe.playlist.SinglePlayQueue)

Example 5 with StreamInfoItem

use of org.schabi.newpipe.extractor.stream.StreamInfoItem in project NewPipe by TeamNewPipe.

the class LocalPlaylistFragment method showStreamDialog.

/*//////////////////////////////////////////////////////////////////////////
    // Utils
    //////////////////////////////////////////////////////////////////////////*/
protected void showStreamDialog(final PlaylistStreamEntry item) {
    final Context context = getContext();
    final Activity activity = getActivity();
    if (context == null || context.getResources() == null || getActivity() == null)
        return;
    final StreamInfoItem infoItem = item.toStreamInfoItem();
    final String[] commands = new String[] { context.getResources().getString(R.string.enqueue_on_background), context.getResources().getString(R.string.enqueue_on_popup), context.getResources().getString(R.string.start_here_on_main), context.getResources().getString(R.string.start_here_on_background), context.getResources().getString(R.string.start_here_on_popup), context.getResources().getString(R.string.set_as_playlist_thumbnail), context.getResources().getString(R.string.delete) };
    final DialogInterface.OnClickListener actions = (dialogInterface, i) -> {
        final int index = Math.max(itemListAdapter.getItemsList().indexOf(item), 0);
        switch(i) {
            case 0:
                NavigationHelper.enqueueOnBackgroundPlayer(context, new SinglePlayQueue(infoItem));
                break;
            case 1:
                NavigationHelper.enqueueOnPopupPlayer(activity, new SinglePlayQueue(infoItem));
                break;
            case 2:
                NavigationHelper.playOnMainPlayer(context, getPlayQueue(index));
                break;
            case 3:
                NavigationHelper.playOnBackgroundPlayer(context, getPlayQueue(index));
                break;
            case 4:
                NavigationHelper.playOnPopupPlayer(activity, getPlayQueue(index));
                break;
            case 5:
                changeThumbnailUrl(item.thumbnailUrl);
                break;
            case 6:
                deleteItem(item);
                break;
            default:
                break;
        }
    };
    new InfoItemDialog(getActivity(), infoItem, commands, actions).show();
}
Also used : Context(android.content.Context) Context(android.content.Context) Bundle(android.os.Bundle) PlaylistStreamEntry(org.schabi.newpipe.database.playlist.PlaylistStreamEntry) NavigationHelper(org.schabi.newpipe.util.NavigationHelper) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) NonNull(android.support.annotation.NonNull) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) SinglePlayQueue(org.schabi.newpipe.playlist.SinglePlayQueue) ArrayList(java.util.ArrayList) Disposables(io.reactivex.disposables.Disposables) ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) Toast(android.widget.Toast) View(android.view.View) OnClickGesture(org.schabi.newpipe.util.OnClickGesture) State(icepick.State) AnimationUtils.animateView(org.schabi.newpipe.util.AnimationUtils.animateView) Subscriber(org.reactivestreams.Subscriber) R(org.schabi.newpipe.R) Log(android.util.Log) DialogInterface(android.content.DialogInterface) Parcelable(android.os.Parcelable) LayoutInflater(android.view.LayoutInflater) TextUtils(android.text.TextUtils) LocalItem(org.schabi.newpipe.database.LocalItem) UserAction(org.schabi.newpipe.report.UserAction) NewPipeDatabase(org.schabi.newpipe.NewPipeDatabase) ViewGroup(android.view.ViewGroup) LocalPlaylistManager(org.schabi.newpipe.fragments.local.LocalPlaylistManager) StreamInfoItem(org.schabi.newpipe.extractor.stream.StreamInfoItem) TimeUnit(java.util.concurrent.TimeUnit) RecyclerView(android.support.v7.widget.RecyclerView) List(java.util.List) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) Disposable(io.reactivex.disposables.Disposable) AlertDialog(android.support.v7.app.AlertDialog) TextView(android.widget.TextView) PublishSubject(io.reactivex.subjects.PublishSubject) InfoItemDialog(org.schabi.newpipe.info_list.InfoItemDialog) Subscription(org.reactivestreams.Subscription) PlayQueue(org.schabi.newpipe.playlist.PlayQueue) Nullable(android.support.annotation.Nullable) Activity(android.app.Activity) Localization(org.schabi.newpipe.util.Localization) Collections(java.util.Collections) EditText(android.widget.EditText) StreamInfoItem(org.schabi.newpipe.extractor.stream.StreamInfoItem) InfoItemDialog(org.schabi.newpipe.info_list.InfoItemDialog) DialogInterface(android.content.DialogInterface) Activity(android.app.Activity) SinglePlayQueue(org.schabi.newpipe.playlist.SinglePlayQueue)

Aggregations

StreamInfoItem (org.schabi.newpipe.extractor.stream.StreamInfoItem)13 ArrayList (java.util.ArrayList)7 SinglePlayQueue (org.schabi.newpipe.playlist.SinglePlayQueue)7 Activity (android.app.Activity)4 Context (android.content.Context)4 DialogInterface (android.content.DialogInterface)4 Bundle (android.os.Bundle)4 NonNull (android.support.annotation.NonNull)4 Nullable (android.support.annotation.Nullable)4 View (android.view.View)4 List (java.util.List)4 R (org.schabi.newpipe.R)4 LocalItem (org.schabi.newpipe.database.LocalItem)4 InfoItemDialog (org.schabi.newpipe.info_list.InfoItemDialog)4 NavigationHelper (org.schabi.newpipe.util.NavigationHelper)4 RecyclerView (android.support.v7.widget.RecyclerView)3 Log (android.util.Log)3 LayoutInflater (android.view.LayoutInflater)3 ViewGroup (android.view.ViewGroup)3 AndroidSchedulers (io.reactivex.android.schedulers.AndroidSchedulers)3