added playlist support for invidious & removed recyclerview flashes

pull/15/head
Denis Çerri 4 years ago
parent 14033e38e2
commit dc75436bdc
No known key found for this signature in database
GPG Key ID: 96B3554AF5B193EE

@ -318,7 +318,6 @@ public class DownloaderService extends Service {
video.setAuthor(video.getAuthor().replaceAll(":|'|\"|[.]|,", ""));
String sponsorBlockFilters = sharedPreferences.getString("sponsorblock_filter", "");
Toast.makeText(context, sponsorBlockFilters, Toast.LENGTH_LONG).show();
if (!sponsorBlockFilters.isEmpty()){
request.addOption("--sponsorblock-remove", sponsorBlockFilters);
}

@ -197,17 +197,11 @@ public class DownloadsRecyclerViewAdapter extends RecyclerView.Adapter<Downloads
void onButtonClick(int position);
}
public void setVideoList(ArrayList<Video> videoList){
this.videoList = videoList;
setWebsiteList();
notifyDataSetChanged();
}
public ArrayList<String> getWebsites(){
return websites;
}
public void setWebsiteList(){
public void updateWebsiteList(){
websites = new ArrayList<>();
for (Video video : videoList){
if (!websites.contains(video.getWebsite())) websites.add(video.getWebsite());
@ -230,4 +224,17 @@ public class DownloadsRecyclerViewAdapter extends RecyclerView.Adapter<Downloads
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.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
@ -190,13 +192,6 @@ public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerVi
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){
videoList.set(position, v);
notifyItemChanged(position);
@ -217,4 +212,9 @@ public class HomeRecyclerViewAdapter extends RecyclerView.Adapter<HomeRecyclerVi
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.clearHistoryItem(v,false);
dbManager.close();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.notifyItemRemoved(downloadsObjects.indexOf(v));
if (downloadsObjects.isEmpty()) initCards();
downloading = false;
@ -283,14 +283,13 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
downloadsRecyclerViewAdapter.clear();
no_results.setVisibility(View.GONE);
selectionChips.setVisibility(View.VISIBLE);
dbManager = new DBManager(context);
try{
Thread thread = new Thread(() -> {
if (!downloading) dbManager.clearDownloadingHistory();
downloadsObjects = dbManager.getHistory("", format,website,sort);
uiHandler.post(() -> {
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.add(downloadsObjects);
shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE);
updateWebsiteChips();
@ -346,7 +345,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
topAppBar.getMenu().findItem(R.id.search_downloads).collapseActionView();
downloadsObjects = dbManager.getHistory(query, format,website,sort);
downloadsRecyclerViewAdapter.clear();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.add(downloadsObjects);
if(downloadsObjects.size() == 0) {
no_results.setVisibility(View.VISIBLE);
@ -361,7 +360,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
searchQuery = newText;
downloadsObjects = dbManager.getHistory(newText, format,website,sort);
downloadsRecyclerViewAdapter.clear();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.add(downloadsObjects);
if (downloadsObjects.size() == 0) {
no_results.setVisibility(View.VISIBLE);
@ -395,7 +394,6 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
dbManager.clearHistory();
downloadsRecyclerViewAdapter.clear();
downloadsObjects.clear();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
no_results.setVisibility(View.VISIBLE);
selectionChips.setVisibility(View.GONE);
websiteGroup.removeAllViews();
@ -474,7 +472,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
sort = "DESC";
downloadsObjects = dbManager.getHistory(searchQuery, format,website,sort);
downloadsRecyclerViewAdapter.clear();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.add(downloadsObjects);
sortSheet.cancel();
});
@ -482,7 +480,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
sort = "ASC";
downloadsObjects = dbManager.getHistory(searchQuery, format,website,sort);
downloadsRecyclerViewAdapter.clear();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.add(downloadsObjects);
sortSheet.cancel();
});
@ -512,7 +510,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
}
downloadsRecyclerViewAdapter.clear();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.add(downloadsObjects);
});
Chip video = fragmentView.findViewById(R.id.video_chip);
@ -528,7 +526,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
}
downloadsRecyclerViewAdapter.clear();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.add(downloadsObjects);
});
}
@ -555,7 +553,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
websiteGroup.clearCheck();
}
downloadsRecyclerViewAdapter.clear();
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.add(downloadsObjects);
});
websiteGroup.addView(tmp);
}
@ -601,8 +599,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
Video v = selectedObjects.get(j);
int position = downloadsObjects.indexOf(v);
downloadsObjects.remove(v);
downloadsRecyclerViewAdapter.notifyItemRemoved(position);
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.remove(position);
dbManager.clearHistoryItem(v, delete_file[0]);
}
updateWebsiteChips();
@ -636,8 +633,7 @@ public class DownloadsFragment extends Fragment implements DownloadsRecyclerView
});
delete_dialog.setPositiveButton(getString(R.string.ok), (dialogInterface, i) -> {
downloadsObjects.remove(position);
downloadsRecyclerViewAdapter.notifyItemRemoved(position);
downloadsRecyclerViewAdapter.setVideoList(downloadsObjects);
downloadsRecyclerViewAdapter.remove(position);
updateWebsiteChips();
dbManager.clearHistoryItem(v, delete_file[0]);
dbManager.close();

@ -260,6 +260,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
dbManager.clearResults();
dbManager.close();
inputQueriesLength = inputQueries.size();
homeRecyclerViewAdapter.clear();
shimmerCards.startShimmer();
shimmerCards.setVisibility(View.VISIBLE);
@ -318,7 +319,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
}
}else {
if (!downloading){
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
homeRecyclerViewAdapter.add(resultObjects);
for (int i = 0; i < resultObjects.size(); i++){
Video tmp = resultObjects.get(i);
if(tmp.isDownloading()){
@ -330,7 +331,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
}
uiHandler.post(() -> {
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
homeRecyclerViewAdapter.add(resultObjects);
shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE);
});
@ -499,17 +500,22 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
case "Search": {
try {
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) {
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;
}
case "Video": {
@ -527,18 +533,24 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
try {
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) {
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;
}
case "Playlist": {
@ -547,7 +559,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
if (resetResults) dbManager.clearResults();
if (resetResults){
resultObjects.clear();
homeRecyclerViewAdapter.setVideoList(new ArrayList<>(), true);
homeRecyclerViewAdapter.clear();
}
do {
InfoUtil.PlaylistTuple tmp = infoUtil.getPlaylist(inputQuery, nextPageToken);
@ -556,7 +568,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
resultObjects.addAll(tmp_vids);
new Handler(Looper.getMainLooper()).post(() -> {
dbManager.addToResults(tmp_vids);
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
homeRecyclerViewAdapter.add(tmp_vids);
shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE);
});
@ -574,12 +586,12 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
resultObjects.addAll(video);
new Handler(Looper.getMainLooper()).post(() -> {
if (resetResults) dbManager.clearResults();
homeRecyclerViewAdapter.add(video);
dbManager.addToResults(resultObjects);
});
}
new Handler(Looper.getMainLooper()).post(() -> {
homeRecyclerViewAdapter.setVideoList(resultObjects, true);
shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE);
});

@ -145,9 +145,12 @@ public class InfoUtil {
}
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<>();
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&regionCode="+countryCODE+"&playlistId="+id+"&key="+key;
//short data
JSONObject res = genericRequest(url);
@ -191,6 +194,25 @@ public class InfoUtil {
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 {
if (key.isEmpty()) {
if (useInvidous){

Loading…
Cancel
Save