added playlist support for invidious & removed recyclerview flashes
This commit is contained in:
parent
14033e38e2
commit
dc75436bdc
6 changed files with 89 additions and 53 deletions
|
|
@ -318,7 +318,6 @@ public class DownloaderService extends Service {
|
||||||
video.setAuthor(video.getAuthor().replaceAll(":|'|\"|[.]|,", ""));
|
video.setAuthor(video.getAuthor().replaceAll(":|'|\"|[.]|,", ""));
|
||||||
|
|
||||||
String sponsorBlockFilters = sharedPreferences.getString("sponsorblock_filter", "");
|
String sponsorBlockFilters = sharedPreferences.getString("sponsorblock_filter", "");
|
||||||
Toast.makeText(context, sponsorBlockFilters, Toast.LENGTH_LONG).show();
|
|
||||||
if (!sponsorBlockFilters.isEmpty()){
|
if (!sponsorBlockFilters.isEmpty()){
|
||||||
request.addOption("--sponsorblock-remove", sponsorBlockFilters);
|
request.addOption("--sponsorblock-remove", sponsorBlockFilters);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -197,17 +197,11 @@ public class DownloadsRecyclerViewAdapter extends RecyclerView.Adapter<Downloads
|
||||||
void onButtonClick(int position);
|
void onButtonClick(int position);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVideoList(ArrayList<Video> videoList){
|
|
||||||
this.videoList = videoList;
|
|
||||||
setWebsiteList();
|
|
||||||
notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<String> getWebsites(){
|
public ArrayList<String> getWebsites(){
|
||||||
return websites;
|
return websites;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWebsiteList(){
|
public void updateWebsiteList(){
|
||||||
websites = new ArrayList<>();
|
websites = new ArrayList<>();
|
||||||
for (Video video : videoList){
|
for (Video video : videoList){
|
||||||
if (!websites.contains(video.getWebsite())) websites.add(video.getWebsite());
|
if (!websites.contains(video.getWebsite())) websites.add(video.getWebsite());
|
||||||
|
|
@ -230,4 +224,17 @@ public class DownloadsRecyclerViewAdapter extends RecyclerView.Adapter<Downloads
|
||||||
checkedVideos.clear();
|
checkedVideos.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void add(ArrayList<Video> vids){
|
||||||
|
int position = videoList.size() + 1;
|
||||||
|
videoList.addAll(vids);
|
||||||
|
notifyItemRangeInserted(position, vids.size());
|
||||||
|
updateWebsiteList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove(int index){
|
||||||
|
videoList.remove(index);
|
||||||
|
notifyItemRemoved(index);
|
||||||
|
updateWebsiteList();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
@ -190,13 +192,6 @@ public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerVi
|
||||||
void onCardClick(int position, boolean add);
|
void onCardClick(int position, boolean add);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVideoList(ArrayList<Video> list, boolean reset){
|
|
||||||
int size = videoList.size();
|
|
||||||
if(reset || size == 0) clear();
|
|
||||||
videoList.addAll(list);
|
|
||||||
notifyItemRangeInserted(size, videoList.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateVideoListItem(Video v, int position){
|
public void updateVideoListItem(Video v, int position){
|
||||||
videoList.set(position, v);
|
videoList.set(position, v);
|
||||||
notifyItemChanged(position);
|
notifyItemChanged(position);
|
||||||
|
|
@ -217,4 +212,9 @@ public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerVi
|
||||||
notifyItemRangeRemoved(0, size);
|
notifyItemRangeRemoved(0, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void add(ArrayList<Video> vids){
|
||||||
|
int position = videoList.size() + 1;
|
||||||
|
videoList.addAll(vids);
|
||||||
|
notifyItemRangeInserted(position, vids.size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -196,7 +196,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
dbManager = new DBManager(context);
|
dbManager = new DBManager(context);
|
||||||
dbManager.clearHistoryItem(v,false);
|
dbManager.clearHistoryItem(v,false);
|
||||||
dbManager.close();
|
dbManager.close();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.notifyItemRemoved(downloadsObjects.indexOf(v));
|
||||||
|
|
||||||
if (downloadsObjects.isEmpty()) initCards();
|
if (downloadsObjects.isEmpty()) initCards();
|
||||||
downloading = false;
|
downloading = false;
|
||||||
|
|
@ -283,14 +283,13 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
no_results.setVisibility(View.GONE);
|
no_results.setVisibility(View.GONE);
|
||||||
selectionChips.setVisibility(View.VISIBLE);
|
selectionChips.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
dbManager = new DBManager(context);
|
dbManager = new DBManager(context);
|
||||||
try{
|
try{
|
||||||
Thread thread = new Thread(() -> {
|
Thread thread = new Thread(() -> {
|
||||||
if (!downloading) dbManager.clearDownloadingHistory();
|
if (!downloading) dbManager.clearDownloadingHistory();
|
||||||
downloadsObjects = dbManager.getHistory("", format,website,sort);
|
downloadsObjects = dbManager.getHistory("", format,website,sort);
|
||||||
uiHandler.post(() -> {
|
uiHandler.post(() -> {
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.add(downloadsObjects);
|
||||||
shimmerCards.stopShimmer();
|
shimmerCards.stopShimmer();
|
||||||
shimmerCards.setVisibility(View.GONE);
|
shimmerCards.setVisibility(View.GONE);
|
||||||
updateWebsiteChips();
|
updateWebsiteChips();
|
||||||
|
|
@ -346,7 +345,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
topAppBar.getMenu().findItem(R.id.search_downloads).collapseActionView();
|
topAppBar.getMenu().findItem(R.id.search_downloads).collapseActionView();
|
||||||
downloadsObjects = dbManager.getHistory(query, format,website,sort);
|
downloadsObjects = dbManager.getHistory(query, format,website,sort);
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.add(downloadsObjects);
|
||||||
|
|
||||||
if(downloadsObjects.size() == 0) {
|
if(downloadsObjects.size() == 0) {
|
||||||
no_results.setVisibility(View.VISIBLE);
|
no_results.setVisibility(View.VISIBLE);
|
||||||
|
|
@ -361,7 +360,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
searchQuery = newText;
|
searchQuery = newText;
|
||||||
downloadsObjects = dbManager.getHistory(newText, format,website,sort);
|
downloadsObjects = dbManager.getHistory(newText, format,website,sort);
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.add(downloadsObjects);
|
||||||
|
|
||||||
if (downloadsObjects.size() == 0) {
|
if (downloadsObjects.size() == 0) {
|
||||||
no_results.setVisibility(View.VISIBLE);
|
no_results.setVisibility(View.VISIBLE);
|
||||||
|
|
@ -395,7 +394,6 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
dbManager.clearHistory();
|
dbManager.clearHistory();
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
downloadsObjects.clear();
|
downloadsObjects.clear();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
|
||||||
no_results.setVisibility(View.VISIBLE);
|
no_results.setVisibility(View.VISIBLE);
|
||||||
selectionChips.setVisibility(View.GONE);
|
selectionChips.setVisibility(View.GONE);
|
||||||
websiteGroup.removeAllViews();
|
websiteGroup.removeAllViews();
|
||||||
|
|
@ -474,7 +472,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
sort = "DESC";
|
sort = "DESC";
|
||||||
downloadsObjects = dbManager.getHistory(searchQuery, format,website,sort);
|
downloadsObjects = dbManager.getHistory(searchQuery, format,website,sort);
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.add(downloadsObjects);
|
||||||
sortSheet.cancel();
|
sortSheet.cancel();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -482,7 +480,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
sort = "ASC";
|
sort = "ASC";
|
||||||
downloadsObjects = dbManager.getHistory(searchQuery, format,website,sort);
|
downloadsObjects = dbManager.getHistory(searchQuery, format,website,sort);
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.add(downloadsObjects);
|
||||||
sortSheet.cancel();
|
sortSheet.cancel();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -512,7 +510,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.add(downloadsObjects);
|
||||||
});
|
});
|
||||||
|
|
||||||
Chip video = fragmentView.findViewById(R.id.video_chip);
|
Chip video = fragmentView.findViewById(R.id.video_chip);
|
||||||
|
|
@ -528,7 +526,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.add(downloadsObjects);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -555,7 +553,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
websiteGroup.clearCheck();
|
websiteGroup.clearCheck();
|
||||||
}
|
}
|
||||||
downloadsRecyclerViewAdapter.clear();
|
downloadsRecyclerViewAdapter.clear();
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
downloadsRecyclerViewAdapter.add(downloadsObjects);
|
||||||
});
|
});
|
||||||
websiteGroup.addView(tmp);
|
websiteGroup.addView(tmp);
|
||||||
}
|
}
|
||||||
|
|
@ -601,8 +599,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
Video v = selectedObjects.get(j);
|
Video v = selectedObjects.get(j);
|
||||||
int position = downloadsObjects.indexOf(v);
|
int position = downloadsObjects.indexOf(v);
|
||||||
downloadsObjects.remove(v);
|
downloadsObjects.remove(v);
|
||||||
downloadsRecyclerViewAdapter.notifyItemRemoved(position);
|
downloadsRecyclerViewAdapter.remove(position);
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
|
||||||
dbManager.clearHistoryItem(v, delete_file[0]);
|
dbManager.clearHistoryItem(v, delete_file[0]);
|
||||||
}
|
}
|
||||||
updateWebsiteChips();
|
updateWebsiteChips();
|
||||||
|
|
@ -636,8 +633,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
|
||||||
});
|
});
|
||||||
delete_dialog.setPositiveButton(getString(R.string.ok), (dialogInterface, i) -> {
|
delete_dialog.setPositiveButton(getString(R.string.ok), (dialogInterface, i) -> {
|
||||||
downloadsObjects.remove(position);
|
downloadsObjects.remove(position);
|
||||||
downloadsRecyclerViewAdapter.notifyItemRemoved(position);
|
downloadsRecyclerViewAdapter.remove(position);
|
||||||
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
|
|
||||||
updateWebsiteChips();
|
updateWebsiteChips();
|
||||||
dbManager.clearHistoryItem(v, delete_file[0]);
|
dbManager.clearHistoryItem(v, delete_file[0]);
|
||||||
dbManager.close();
|
dbManager.close();
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
|
||||||
dbManager.clearResults();
|
dbManager.clearResults();
|
||||||
dbManager.close();
|
dbManager.close();
|
||||||
inputQueriesLength = inputQueries.size();
|
inputQueriesLength = inputQueries.size();
|
||||||
|
homeRecyclerViewAdapter.clear();
|
||||||
|
|
||||||
shimmerCards.startShimmer();
|
shimmerCards.startShimmer();
|
||||||
shimmerCards.setVisibility(View.VISIBLE);
|
shimmerCards.setVisibility(View.VISIBLE);
|
||||||
|
|
@ -318,7 +319,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
if (!downloading){
|
if (!downloading){
|
||||||
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
|
homeRecyclerViewAdapter.add(resultObjects);
|
||||||
for (int i = 0; i < resultObjects.size(); i++){
|
for (int i = 0; i < resultObjects.size(); i++){
|
||||||
Video tmp = resultObjects.get(i);
|
Video tmp = resultObjects.get(i);
|
||||||
if(tmp.isDownloading()){
|
if(tmp.isDownloading()){
|
||||||
|
|
@ -330,7 +331,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
|
||||||
}
|
}
|
||||||
|
|
||||||
uiHandler.post(() -> {
|
uiHandler.post(() -> {
|
||||||
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
|
homeRecyclerViewAdapter.add(resultObjects);
|
||||||
shimmerCards.stopShimmer();
|
shimmerCards.stopShimmer();
|
||||||
shimmerCards.setVisibility(View.GONE);
|
shimmerCards.setVisibility(View.GONE);
|
||||||
});
|
});
|
||||||
|
|
@ -499,17 +500,22 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
|
||||||
case "Search": {
|
case "Search": {
|
||||||
try {
|
try {
|
||||||
if (resetResults) resultObjects.clear();
|
if (resetResults) resultObjects.clear();
|
||||||
resultObjects.addAll(infoUtil.search(inputQuery));
|
ArrayList<Video> res = infoUtil.search(inputQuery);
|
||||||
|
resultObjects.addAll(res);
|
||||||
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
|
if (resetResults) dbManager.clearResults();
|
||||||
|
dbManager.addToResults(resultObjects);
|
||||||
|
homeRecyclerViewAdapter.add(res);
|
||||||
|
shimmerCards.stopShimmer();
|
||||||
|
shimmerCards.setVisibility(View.GONE);
|
||||||
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, e.toString());
|
Log.e(TAG, e.toString());
|
||||||
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
|
shimmerCards.stopShimmer();
|
||||||
|
shimmerCards.setVisibility(View.GONE);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
new Handler(Looper.getMainLooper()).post(() -> {
|
|
||||||
if (resetResults) dbManager.clearResults();
|
|
||||||
dbManager.addToResults(resultObjects);
|
|
||||||
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
|
|
||||||
shimmerCards.stopShimmer();
|
|
||||||
shimmerCards.setVisibility(View.GONE);
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "Video": {
|
case "Video": {
|
||||||
|
|
@ -527,18 +533,24 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (resetResults) resultObjects.clear();
|
if (resetResults) resultObjects.clear();
|
||||||
resultObjects.add(infoUtil.getVideo(inputQuery));
|
Video v = infoUtil.getVideo(inputQuery);
|
||||||
|
ArrayList<Video> res = new ArrayList<>();
|
||||||
|
res.add(v);
|
||||||
|
resultObjects.add(v);
|
||||||
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
|
if (resetResults) dbManager.clearResults();
|
||||||
|
dbManager.addToResults(resultObjects);
|
||||||
|
homeRecyclerViewAdapter.add(res);
|
||||||
|
shimmerCards.stopShimmer();
|
||||||
|
shimmerCards.setVisibility(View.GONE);
|
||||||
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, e.toString());
|
Log.e(TAG, e.toString());
|
||||||
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
|
shimmerCards.stopShimmer();
|
||||||
|
shimmerCards.setVisibility(View.GONE);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
new Handler(Looper.getMainLooper()).post(() -> {
|
|
||||||
if (resetResults) dbManager.clearResults();
|
|
||||||
dbManager.addToResults(resultObjects);
|
|
||||||
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
|
|
||||||
shimmerCards.stopShimmer();
|
|
||||||
shimmerCards.setVisibility(View.GONE);
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "Playlist": {
|
case "Playlist": {
|
||||||
|
|
@ -547,7 +559,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
|
||||||
if (resetResults) dbManager.clearResults();
|
if (resetResults) dbManager.clearResults();
|
||||||
if (resetResults){
|
if (resetResults){
|
||||||
resultObjects.clear();
|
resultObjects.clear();
|
||||||
homeRecyclerViewAdapter.setVideoList(new ArrayList<>(), true);
|
homeRecyclerViewAdapter.clear();
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
InfoUtil.PlaylistTuple tmp = infoUtil.getPlaylist(inputQuery, nextPageToken);
|
InfoUtil.PlaylistTuple tmp = infoUtil.getPlaylist(inputQuery, nextPageToken);
|
||||||
|
|
@ -556,7 +568,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
|
||||||
resultObjects.addAll(tmp_vids);
|
resultObjects.addAll(tmp_vids);
|
||||||
new Handler(Looper.getMainLooper()).post(() -> {
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
dbManager.addToResults(tmp_vids);
|
dbManager.addToResults(tmp_vids);
|
||||||
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
|
homeRecyclerViewAdapter.add(tmp_vids);
|
||||||
shimmerCards.stopShimmer();
|
shimmerCards.stopShimmer();
|
||||||
shimmerCards.setVisibility(View.GONE);
|
shimmerCards.setVisibility(View.GONE);
|
||||||
});
|
});
|
||||||
|
|
@ -574,12 +586,12 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
|
||||||
resultObjects.addAll(video);
|
resultObjects.addAll(video);
|
||||||
new Handler(Looper.getMainLooper()).post(() -> {
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
if (resetResults) dbManager.clearResults();
|
if (resetResults) dbManager.clearResults();
|
||||||
|
homeRecyclerViewAdapter.add(video);
|
||||||
dbManager.addToResults(resultObjects);
|
dbManager.addToResults(resultObjects);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
new Handler(Looper.getMainLooper()).post(() -> {
|
new Handler(Looper.getMainLooper()).post(() -> {
|
||||||
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
|
|
||||||
shimmerCards.stopShimmer();
|
shimmerCards.stopShimmer();
|
||||||
shimmerCards.setVisibility(View.GONE);
|
shimmerCards.setVisibility(View.GONE);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -145,9 +145,12 @@ public class InfoUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlaylistTuple getPlaylist(String id, String nextPageToken) throws JSONException{
|
public PlaylistTuple getPlaylist(String id, String nextPageToken) throws JSONException{
|
||||||
if (key.isEmpty()) return new PlaylistTuple("", getFromYTDL("https://www.youtube.com/playlist?list="+id));
|
|
||||||
videos = new ArrayList<>();
|
videos = new ArrayList<>();
|
||||||
|
|
||||||
|
if (key.isEmpty()) {
|
||||||
|
if (useInvidous) return getPlaylistFromInvidous(id);
|
||||||
|
else return new PlaylistTuple("", getFromYTDL("https://www.youtube.com/playlist?list="+id));
|
||||||
|
}
|
||||||
String url = "https://youtube.googleapis.com/youtube/v3/playlistItems?part=snippet&pageToken="+nextPageToken+"&maxResults=50®ionCode="+countryCODE+"&playlistId="+id+"&key="+key;
|
String url = "https://youtube.googleapis.com/youtube/v3/playlistItems?part=snippet&pageToken="+nextPageToken+"&maxResults=50®ionCode="+countryCODE+"&playlistId="+id+"&key="+key;
|
||||||
//short data
|
//short data
|
||||||
JSONObject res = genericRequest(url);
|
JSONObject res = genericRequest(url);
|
||||||
|
|
@ -191,6 +194,25 @@ public class InfoUtil {
|
||||||
return new PlaylistTuple(next, videos);
|
return new PlaylistTuple(next, videos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PlaylistTuple getPlaylistFromInvidous(String id){
|
||||||
|
String url = invidousURL + "playlists/"+id;
|
||||||
|
JSONObject res = genericRequest(url);
|
||||||
|
if (res.length() == 0) return new PlaylistTuple("", getFromYTDL("https://www.youtube.com/playlist?list="+id));
|
||||||
|
try{
|
||||||
|
JSONArray vids = res.getJSONArray("videos");
|
||||||
|
for(int i = 0; i < vids.length(); i++){
|
||||||
|
JSONObject element = vids.getJSONObject(i);
|
||||||
|
Video v = createVideofromInvidiousJSON(element);
|
||||||
|
if(v == null || v.getThumb().isEmpty()) continue;
|
||||||
|
v.setPlaylistTitle(res.getString("title"));
|
||||||
|
videos.add(v);
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return new PlaylistTuple("", videos);
|
||||||
|
}
|
||||||
|
|
||||||
public Video getVideo(String id) throws JSONException {
|
public Video getVideo(String id) throws JSONException {
|
||||||
if (key.isEmpty()) {
|
if (key.isEmpty()) {
|
||||||
if (useInvidous){
|
if (useInvidous){
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue