Skip to content

Commit

Permalink
Add 'Share playlist' option to Playlist fragment
Browse files Browse the repository at this point in the history
  • Loading branch information
carmebar committed Jun 24, 2022
1 parent 3901ffc commit cb89bc4
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 1 deletion.
3 changes: 2 additions & 1 deletion app/src/main/java/org/schabi/newpipe/error/UserAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ public enum UserAction {
PREFERENCES_MIGRATION("migration of preferences"),
SHARE_TO_NEWPIPE("share to newpipe"),
CHECK_FOR_NEW_APP_VERSION("check for new app version"),
OPEN_INFO_ITEM_DIALOG("open info item dialog");
OPEN_INFO_ITEM_DIALOG("open info item dialog"),
SHARE_PLAYLIST("share playlist");

private final String message;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,15 @@
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.OnClickGesture;
import org.schabi.newpipe.info_list.dialog.StreamDialogDefaultEntry;
import org.schabi.newpipe.util.external_communication.ShareUtils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;

import icepick.State;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
Expand Down Expand Up @@ -94,6 +96,8 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
private AtomicBoolean isModified;
/* Is the playlist currently being processed to remove watched videos */
private boolean isRemovingWatched = false;
/* Is the playlist currently being processed to share playlist items */
private boolean isSharingPlaylist = false;

public static LocalPlaylistFragment getInstance(final long playlistId, final String name) {
final LocalPlaylistFragment instance = new LocalPlaylistFragment();
Expand Down Expand Up @@ -362,12 +366,38 @@ public boolean onOptionsItemSelected(final MenuItem item) {
}
} else if (item.getItemId() == R.id.menu_item_rename_playlist) {
createRenameDialog();
} else if (item.getItemId() == R.id.menu_item_share_playlist) {
if (!isSharingPlaylist) {
sharePlaylist();
}
} else {
return super.onOptionsItemSelected(item);
}
return true;
}

public void sharePlaylist() {
if (isSharingPlaylist) {
return;
}
isSharingPlaylist = true;
showLoading();

disposables.add(playlistManager.getPlaylistStreams(playlistId)
.map(playlist ->
Flowable.just(playlist.stream().map(e -> e.getStreamEntity().getUrl())))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(flow -> {
final String urlsText =
flow.blockingFirst().collect(Collectors.joining("\n"));

ShareUtils.shareText(requireContext(), name, urlsText);
hideLoading();
isSharingPlaylist = false;
}, throwable -> showError(new ErrorInfo(throwable, UserAction.SHARE_PLAYLIST,
"Sharing playlist"))));
}

public void removeWatchedStreams(final boolean removePartiallyWatched) {
if (isRemovingWatched) {
return;
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/res/menu/menu_local_playlist.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@
android:id="@+id/menu_item_remove_watched"
android:title="@string/remove_watched"
app:showAsAction="never" />
<item
android:id="@+id/menu_item_share_playlist"
android:title="@string/share_playlist"
app:showAsAction="never" />
</menu>
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -747,4 +747,5 @@
<string name="select_quality_external_players">Select quality for external players</string>
<string name="unknown_format">Unknown format</string>
<string name="unknown_quality">Unknown quality</string>
<string name="share_playlist">Share playlist</string>
</resources>

0 comments on commit cb89bc4

Please sign in to comment.