Skip to content

Commit 607d995

Browse files
committed
Load uploaderUrl when showing Channel Details from Play Queue
This checks if the uploaderUrl is in the database, if not it gets the uploaderUrl and puts it in the database. This is similar to the fetching of uploaderUrl when it doesn't exist done in #6919. Also use createNotification when error occurs in getStreamInfo.
1 parent 1475ff8 commit 607d995

File tree

3 files changed

+88
-31
lines changed

3 files changed

+88
-31
lines changed

app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.schabi.newpipe.player.playqueue.PlayQueue;
1515
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
1616
import org.schabi.newpipe.util.NavigationHelper;
17+
import org.schabi.newpipe.util.SaveUploaderUrlHelper;
1718

1819
import java.util.Collections;
1920

@@ -61,11 +62,13 @@ public static void openPopupMenu(final PlayQueue playQueue,
6162

6263
return true;
6364
case R.id.menu_item_channel_details:
64-
// An intent must be used here.
65-
// Opening with FragmentManager transactions is not working,
66-
// as PlayQueueActivity doesn't use fragments.
67-
NavigationHelper.openChannelFragmentUsingIntent(context, item.getServiceId(),
68-
item.getUploaderUrl(), item.getUploader());
65+
SaveUploaderUrlHelper.saveUploaderUrlIfNeeded(context, item,
66+
// An intent must be used here.
67+
// Opening with FragmentManager transactions is not working,
68+
// as PlayQueueActivity doesn't use fragments.
69+
uploaderUrl -> NavigationHelper.openChannelFragmentUsingIntent(
70+
context, item.getServiceId(), uploaderUrl, item.getUploader()
71+
));
6972
return true;
7073
case R.id.menu_item_share:
7174
shareText(context, item.getTitle(), item.getUrl(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package org.schabi.newpipe.util;
2+
3+
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
4+
5+
import android.content.Context;
6+
import android.widget.Toast;
7+
8+
import androidx.fragment.app.Fragment;
9+
10+
import org.schabi.newpipe.NewPipeDatabase;
11+
import org.schabi.newpipe.R;
12+
import org.schabi.newpipe.error.ErrorInfo;
13+
import org.schabi.newpipe.error.ErrorUtil;
14+
import org.schabi.newpipe.error.UserAction;
15+
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
16+
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
17+
18+
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
19+
import io.reactivex.rxjava3.schedulers.Schedulers;
20+
21+
/**
22+
* Utility class for putting the uploader url into the database - when required.
23+
*/
24+
public final class SaveUploaderUrlHelper {
25+
private SaveUploaderUrlHelper() {
26+
}
27+
28+
// Public functions which call the function that does
29+
// the actual work with the correct parameters
30+
public static void saveUploaderUrlIfNeeded(final Fragment fragment,
31+
final StreamInfoItem infoItem,
32+
final SaveUploaderUrlCallback callback) {
33+
saveUploaderUrlIfNeeded(fragment.requireContext(),
34+
infoItem.getServiceId(),
35+
infoItem.getUrl(),
36+
infoItem.getUploaderUrl(),
37+
callback);
38+
}
39+
public static void saveUploaderUrlIfNeeded(final Context context,
40+
final PlayQueueItem queueItem,
41+
final SaveUploaderUrlCallback callback) {
42+
saveUploaderUrlIfNeeded(context,
43+
queueItem.getServiceId(),
44+
queueItem.getUrl(),
45+
queueItem.getUploaderUrl(),
46+
callback);
47+
}
48+
49+
private static void saveUploaderUrlIfNeeded(final Context context,
50+
final int serviceId,
51+
final String url,
52+
// Only used if not null or empty
53+
final String uploaderUrl,
54+
final SaveUploaderUrlCallback callback) {
55+
if (isNullOrEmpty(uploaderUrl)) {
56+
Toast.makeText(context, R.string.loading_channel_details,
57+
Toast.LENGTH_SHORT).show();
58+
ExtractorHelper.getStreamInfo(serviceId, url, false)
59+
.subscribeOn(Schedulers.io())
60+
.observeOn(AndroidSchedulers.mainThread())
61+
.subscribe(result -> {
62+
NewPipeDatabase.getInstance(context).streamDAO()
63+
.setUploaderUrl(serviceId, url, result.getUploaderUrl())
64+
.subscribeOn(Schedulers.io()).subscribe();
65+
callback.onCallback(result.getUploaderUrl());
66+
}, throwable -> ErrorUtil.createNotification(context,
67+
new ErrorInfo(throwable, UserAction.REQUESTED_CHANNEL,
68+
"Could not load channel details")
69+
));
70+
} else {
71+
callback.onCallback(uploaderUrl);
72+
}
73+
}
74+
75+
public interface SaveUploaderUrlCallback {
76+
void onCallback(String uploaderUrl);
77+
}
78+
}

app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java

+2-26
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
import android.content.Context;
44
import android.net.Uri;
55
import android.util.Log;
6-
import android.widget.Toast;
76

87
import androidx.fragment.app.Fragment;
98
import androidx.preference.PreferenceManager;
109

11-
import org.schabi.newpipe.NewPipeDatabase;
1210
import org.schabi.newpipe.R;
1311
import org.schabi.newpipe.database.stream.model.StreamEntity;
1412
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
@@ -27,36 +25,14 @@
2725
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
2826
import io.reactivex.rxjava3.schedulers.Schedulers;
2927

30-
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
31-
3228
public enum StreamDialogEntry {
3329
//////////////////////////////////////
3430
// enum values with DEFAULT actions //
3531
//////////////////////////////////////
3632

3733
show_channel_details(R.string.show_channel_details, (fragment, item) -> {
38-
if (isNullOrEmpty(item.getUploaderUrl())) {
39-
final int serviceId = item.getServiceId();
40-
final String url = item.getUrl();
41-
Toast.makeText(fragment.getContext(), R.string.loading_channel_details,
42-
Toast.LENGTH_SHORT).show();
43-
ExtractorHelper.getStreamInfo(serviceId, url, false)
44-
.subscribeOn(Schedulers.io())
45-
.observeOn(AndroidSchedulers.mainThread())
46-
.subscribe(result -> {
47-
NewPipeDatabase.getInstance(fragment.requireContext()).streamDAO()
48-
.setUploaderUrl(serviceId, url, result.getUploaderUrl())
49-
.subscribeOn(Schedulers.io()).subscribe();
50-
openChannelFragment(fragment, item, result.getUploaderUrl());
51-
}, throwable -> Toast.makeText(
52-
// TODO: Open the Error Activity
53-
fragment.getContext(),
54-
R.string.error_show_channel_details,
55-
Toast.LENGTH_SHORT
56-
).show());
57-
} else {
58-
openChannelFragment(fragment, item, item.getUploaderUrl());
59-
}
34+
SaveUploaderUrlHelper.saveUploaderUrlIfNeeded(fragment, item,
35+
uploaderUrl -> openChannelFragment(fragment, item, uploaderUrl));
6036
}),
6137

6238
/**

0 commit comments

Comments
 (0)