fixed file import bugs

This commit is contained in:
Denis Çerri 2022-10-20 18:17:56 +02:00
parent a699711671
commit 4edd72f627
No known key found for this signature in database
GPG key ID: 3F50F14A8E7F7A13
3 changed files with 115 additions and 142 deletions

View file

@ -38,8 +38,11 @@ import java.nio.charset.StandardCharsets;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale; import java.util.Locale;
@ -175,7 +178,8 @@ public class MainActivity extends AppCompatActivity{
while ((c = reader.read()) != -1) { while ((c = reader.read()) != -1) {
textBuilder.append((char) c); textBuilder.append((char) c);
} }
String[] lines = textBuilder.toString().split("\n"); List<String> l = Arrays.asList(textBuilder.toString().split("\n"));
LinkedList<String> lines = new LinkedList<>(l);
homeFragment.handleFileIntent(lines); homeFragment.handleFileIntent(lines);
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();

View file

@ -47,6 +47,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.progressindicator.LinearProgressIndicator; import com.google.android.material.progressindicator.LinearProgressIndicator;
import com.google.android.material.textfield.TextInputLayout; import com.google.android.material.textfield.TextInputLayout;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -56,7 +57,8 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
private View fragmentView; private View fragmentView;
private LinearProgressIndicator progressBar; private LinearProgressIndicator progressBar;
private String inputQuery; private String inputQuery;
private String[] inputQueries; private LinkedList<String> inputQueries;
private int inputQueriesLength = 0;
private RecyclerView recyclerView; private RecyclerView recyclerView;
private HomeRecyclerViewAdapter homeRecyclerViewAdapter; private HomeRecyclerViewAdapter homeRecyclerViewAdapter;
private ShimmerFrameLayout shimmerCards; private ShimmerFrameLayout shimmerCards;
@ -247,14 +249,30 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
dbManager = new DBManager(context); dbManager = new DBManager(context);
dbManager.clearResults(); dbManager.clearResults();
dbManager.close(); dbManager.close();
for (int i = 0; i < inputQueries.length; i++){ inputQueriesLength = inputQueries.size();
inputQuery = inputQueries[i];
activity.runOnUiThread(() -> parseQuery(true)); shimmerCards.startShimmer();
shimmerCards.setVisibility(View.VISIBLE);
Thread thread = new Thread(() -> {
while(!inputQueries.isEmpty()){
inputQuery = inputQueries.pop();
parseQuery(false);
} }
if (inputQueries.length > 1){
Toast.makeText(context, getString(R.string.finished_loading), Toast.LENGTH_SHORT).show(); try{
new Handler(Looper.getMainLooper()).post(() -> {
// DOWNLOAD ALL BUTTON
if (resultObjects.get(0).getIsPlaylistItem() == 1 || inputQueriesLength > 1) {
downloadAllFab.setVisibility(View.VISIBLE);
} }
inputQueries = null; dbManager = new DBManager(context);
dbManager.clearResults();
for (Video v : resultObjects) v.setIsPlaylistItem(1);
dbManager.addToResults(resultObjects);
});
}catch (Exception ignored){}
});
thread.start();
} else { } else {
initCards(); initCards();
} }
@ -272,6 +290,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
Thread thread = new Thread(() -> { Thread thread = new Thread(() -> {
dbManager = new DBManager(context); dbManager = new DBManager(context);
resultObjects = dbManager.getResults(); resultObjects = dbManager.getResults();
Log.e(TAG, resultObjects.toString());
String playlistTitle = ""; String playlistTitle = "";
try { try {
playlistTitle = resultObjects.get(0).getPlaylistTitle(); playlistTitle = resultObjects.get(0).getPlaylistTitle();
@ -358,7 +377,19 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
downloadFabs.setVisibility(View.GONE); downloadFabs.setVisibility(View.GONE);
selectedObjects = new ArrayList<>(); selectedObjects = new ArrayList<>();
inputQuery = query.trim(); inputQuery = query.trim();
shimmerCards.startShimmer();
shimmerCards.setVisibility(View.VISIBLE);
homeRecyclerViewAdapter.clear();
Thread thread = new Thread(() -> {
parseQuery(true); parseQuery(true);
// DOWNLOAD ALL BUTTON
if (resultObjects.get(0).getIsPlaylistItem() == 1) {
new Handler(Looper.getMainLooper()).post(() -> downloadAllFab.setVisibility(View.VISIBLE));
}
});
thread.start();
return true; return true;
} }
@ -397,10 +428,11 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
public void handleIntent(Intent intent) { public void handleIntent(Intent intent) {
inputQueries = new String[]{intent.getStringExtra(Intent.EXTRA_TEXT)}; inputQueries = new LinkedList<>();
inputQueries.add(intent.getStringExtra(Intent.EXTRA_TEXT));
} }
public void handleFileIntent(String[] lines) { public void handleFileIntent(LinkedList<String> lines) {
inputQueries = lines; inputQueries = lines;
} }
@ -410,12 +442,9 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
} }
private void parseQuery(boolean resetResults) { private void parseQuery(boolean resetResults) {
shimmerCards.startShimmer();
shimmerCards.setVisibility(View.VISIBLE);
homeRecyclerViewAdapter.clear();
infoUtil = new InfoUtil(context);
dbManager = new DBManager(context); dbManager = new DBManager(context);
scrollToTop(); infoUtil = new InfoUtil(context);
new Handler(Looper.getMainLooper()).post(this::scrollToTop);
String type = "Search"; String type = "Search";
Pattern p = Pattern.compile("^(https?)://(www.)?youtu(.be)?"); Pattern p = Pattern.compile("^(https?)://(www.)?youtu(.be)?");
@ -435,32 +464,19 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
try { try {
switch (type) { switch (type) {
case "Search": { case "Search": {
Thread thread = new Thread(new Runnable() {
private final String query;
{
this.query = inputQuery;
}
@Override
public void run() {
try { try {
if (resetResults) resultObjects.clear(); if (resetResults) resultObjects.clear();
resultObjects.addAll(infoUtil.search(query)); resultObjects.addAll(infoUtil.search(inputQuery));
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, e.toString()); Log.e(TAG, e.toString());
} }
new Handler(Looper.getMainLooper()).post(() -> {
if (resetResults) dbManager.clearResults(); if (resetResults) dbManager.clearResults();
dbManager.addToResults(resultObjects); dbManager.addToResults(resultObjects);
dbManager.close();
new Handler(Looper.getMainLooper()).post(() -> {
homeRecyclerViewAdapter.setVideoList(resultObjects, true); homeRecyclerViewAdapter.setVideoList(resultObjects, true);
shimmerCards.stopShimmer(); shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE); shimmerCards.setVisibility(View.GONE);
}); });
}
});
thread.start();
break; break;
} }
case "Video": { case "Video": {
@ -476,102 +492,57 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
inputQuery = el[0]; inputQuery = el[0];
} }
Thread thread = new Thread(new Runnable() {
private final String query;
{
this.query = inputQuery;
}
@Override
public void run() {
try { try {
if (resetResults) resultObjects.clear(); if (resetResults) resultObjects.clear();
resultObjects.add(infoUtil.getVideo(query)); resultObjects.add(infoUtil.getVideo(inputQuery));
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, e.toString()); Log.e(TAG, e.toString());
} }
new Handler(Looper.getMainLooper()).post(() -> {
if (resetResults) dbManager.clearResults(); if (resetResults) dbManager.clearResults();
dbManager.addToResults(resultObjects); dbManager.addToResults(resultObjects);
dbManager.close();
new Handler(Looper.getMainLooper()).post(() -> {
homeRecyclerViewAdapter.setVideoList(resultObjects, true); homeRecyclerViewAdapter.setVideoList(resultObjects, true);
shimmerCards.stopShimmer(); shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE); shimmerCards.setVisibility(View.GONE);
}); });
}
});
thread.start();
break; break;
} }
case "Playlist": { case "Playlist": {
inputQuery = inputQuery.split("list=")[1]; inputQuery = inputQuery.split("list=")[1];
Thread thread = new Thread(new Runnable() {
private final String query;
{
this.query = inputQuery;
}
@Override
public void run() {
try {
String nextPageToken = ""; String nextPageToken = "";
if (resetResults) dbManager.clearResults(); if (resetResults) dbManager.clearResults();
dbManager.close();
if (resetResults){ if (resetResults){
resultObjects.clear(); resultObjects.clear();
homeRecyclerViewAdapter.setVideoList(new ArrayList<>(), true); homeRecyclerViewAdapter.setVideoList(new ArrayList<>(), true);
} }
do { do {
InfoUtil.PlaylistTuple tmp = infoUtil.getPlaylist(query, nextPageToken); InfoUtil.PlaylistTuple tmp = infoUtil.getPlaylist(inputQuery, nextPageToken);
ArrayList<Video> tmp_vids = tmp.getVideos(); ArrayList<Video> tmp_vids = tmp.getVideos();
String tmp_token = tmp.getNextPageToken(); String tmp_token = tmp.getNextPageToken();
resultObjects.addAll(tmp_vids); resultObjects.addAll(tmp_vids);
new Handler(Looper.getMainLooper()).post(() -> { new Handler(Looper.getMainLooper()).post(() -> {
dbManager.addToResults(tmp_vids);
homeRecyclerViewAdapter.setVideoList(tmp_vids, false); homeRecyclerViewAdapter.setVideoList(tmp_vids, false);
shimmerCards.stopShimmer(); shimmerCards.stopShimmer();
shimmerCards.setVisibility(View.GONE); shimmerCards.setVisibility(View.GONE);
}); });
dbManager.addToResults(tmp_vids);
dbManager.close();
if (tmp_token.isEmpty()) break; if (tmp_token.isEmpty()) break;
if (tmp_token.equals(nextPageToken)) break; if (tmp_token.equals(nextPageToken)) break;
nextPageToken = tmp_token; nextPageToken = tmp_token;
}while (true); }while (true);
// DOWNLOAD ALL BUTTON
if (resultObjects.size() > 1) {
new Handler(Looper.getMainLooper()).post(() -> downloadAllFab.setVisibility(View.VISIBLE));
}
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
});
thread.start();
break; break;
} }
case "Default" : { case "Default" : {
Thread thread = new Thread(new Runnable() {
private final String query;
{
this.query = inputQuery;
}
@Override
public void run() {
try { try {
if (resetResults) resultObjects.clear(); if (resetResults) resultObjects.clear();
ArrayList<Video> video = infoUtil.getFromYTDL(query); ArrayList<Video> video = infoUtil.getFromYTDL(inputQuery);
if (video != null) { if (video != null) {
resultObjects.addAll(video); resultObjects.addAll(video);
new Handler(Looper.getMainLooper()).post(() -> {
if (resetResults) dbManager.clearResults(); if (resetResults) dbManager.clearResults();
dbManager.addToResults(resultObjects); dbManager.addToResults(resultObjects);
dbManager.close(); });
} }
new Handler(Looper.getMainLooper()).post(() -> { new Handler(Looper.getMainLooper()).post(() -> {
@ -583,9 +554,6 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, e.toString()); Log.e(TAG, e.toString());
} }
}
});
thread.start();
break; break;
} }
} }
@ -593,6 +561,7 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On
Log.e(TAG, e.toString()); Log.e(TAG, e.toString());
} }
dbManager.close();
} }

View file

@ -33,7 +33,7 @@ ext {
commonsIoVer = '2.5' commonsIoVer = '2.5'
// supports java 1.6 // supports java 1.6
commonsCompressVer = '1.12' commonsCompressVer = '1.12'
youtubedlAndroidVer = "0.14.+" youtubedlAndroidVer = "0.14.0"
} }