From b60d02adb08f4e23254f2c6177d46818b367d914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C3=87erri?= <64997243+deniscerri@users.noreply.github.com> Date: Tue, 18 Oct 2022 17:38:00 +0200 Subject: [PATCH] added ability to change item title before download changing author is possible but a limitation of youtubedl-android prevents doing both at the same time --- .../deniscerri/ytdlnis/DownloaderService.java | 29 ++++++------ .../ytdlnis/page/DownloadsFragment.java | 4 -- .../deniscerri/ytdlnis/page/HomeFragment.java | 46 +++++++++++++++++-- .../home_download_audio_bottom_sheet.xml | 19 ++------ 4 files changed, 58 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.java b/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.java index 7f138102..3500dd79 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.java +++ b/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.java @@ -25,7 +25,6 @@ import com.yausername.youtubedl_android.YoutubeDLRequest; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.Map; @@ -313,7 +312,8 @@ public class DownloaderService extends Service { if (type.equals("audio")) { request.addOption("-x"); - String format = sharedPreferences.getString("audio_format", ""); + String format = video.getAudioFormat(); + if (format == null) format = sharedPreferences.getString("audio_format", ""); request.addOption("--audio-format", format); request.addOption("--embed-metadata"); if(format.equals("mp3") || format.equals("m4a") || format.equals("flac")){ @@ -337,11 +337,12 @@ public class DownloaderService extends Service { request.addOption("--sponsorblock-remove", "all"); } - request.addOption("--replace-in-metadata", "title \"[ ]\" \""+video.getTitle()+"\""); - request.addOption("--parse-metadata", "meta_title:%(title)s"); - request.addOption("--parse-metadata", "title:%(title)s"); - request.addOption("--parse-metadata", "meta_artist:\""+video.getAuthor()+"\""); + request.addOption("--replace-in-metadata", "title"); + request.addOption(".*.", video.getTitle()); +// request.addOption("--replace-in-metadata", "uploader"); +// request.addOption(".*.", video.getAuthor()); + request.addOption("-o", youtubeDLDir.getAbsolutePath() + "/"+video.getTitle()+"."+format); } else if (type.equals("video")) { boolean addChapters = sharedPreferences.getBoolean("add_chapters", false); if(addChapters){ @@ -351,14 +352,15 @@ public class DownloaderService extends Service { if(embedSubs){ request.addOption("--embed-subs", ""); } - String videoQuality = sharedPreferences.getString("video_quality", ""); + String videoQuality = video.getVideoQuality(); + if (videoQuality == null) videoQuality = sharedPreferences.getString("video_quality", ""); String formatArgument = "bestvideo+bestaudio/best"; if (!videoQuality.isEmpty() && !videoQuality.equals("Best Quality")) { formatArgument = "bestvideo[height<="+videoQuality.substring(0, videoQuality.length()-1)+"]+bestaudio/best"; } - Toast.makeText(context, formatArgument, Toast.LENGTH_LONG).show(); request.addOption("-f", formatArgument); - String format = sharedPreferences.getString("video_format", ""); + String format = video.getVideoFormat(); + if (format == null) format = sharedPreferences.getString("audio_format", ""); request.addOption("--merge-output-format", format); if(!format.equals("webm")){ @@ -367,20 +369,16 @@ public class DownloaderService extends Service { request.addOption("--embed-thumbnail"); } } - - request.addOption("--add-metadata"); - request.addOption("--postprocessor-args", "-metadata title=\""+video.getTitle()+"\""); - + request.addOption("-o", youtubeDLDir.getAbsolutePath() + "/"+video.getTitle()+"."+format); } - request.addOption("-o", youtubeDLDir.getAbsolutePath() + "/%(title)s.%(ext)s"); - Disposable disposable = Observable.fromCallable(() -> YoutubeDL.getInstance().execute(request, downloadProcessID, callback)) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(youtubeDLResponse -> { downloadInfo.setDownloadPath(youtubeDLDir.getAbsolutePath()); downloadInfo.setDownloadType(type); + try{ for (Activity activity: activities.keySet()){ activity.runOnUiThread(() -> { @@ -393,6 +391,7 @@ public class DownloaderService extends Service { }catch (Exception e){ e.printStackTrace(); } + // SCAN NEXT IN QUEUE videos.remove(); downloadInfo.setDownloadQueue(videos); diff --git a/app/src/main/java/com/deniscerri/ytdlnis/page/DownloadsFragment.java b/app/src/main/java/com/deniscerri/ytdlnis/page/DownloadsFragment.java index 61fd334b..d1959554 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/page/DownloadsFragment.java +++ b/app/src/main/java/com/deniscerri/ytdlnis/page/DownloadsFragment.java @@ -4,13 +4,11 @@ import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Bundle; import androidx.appcompat.widget.SearchView; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.RecyclerView; import android.os.Handler; @@ -42,14 +40,12 @@ import com.google.android.material.chip.Chip; import com.google.android.material.chip.ChipGroup; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.progressindicator.LinearProgressIndicator; - import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; -import java.util.LinkedList; import java.util.Locale; /** diff --git a/app/src/main/java/com/deniscerri/ytdlnis/page/HomeFragment.java b/app/src/main/java/com/deniscerri/ytdlnis/page/HomeFragment.java index a16411bf..2ae3d221 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/page/HomeFragment.java +++ b/app/src/main/java/com/deniscerri/ytdlnis/page/HomeFragment.java @@ -11,7 +11,9 @@ import android.media.MediaScannerConnection; import android.os.Bundle; import android.os.Handler; import android.os.Looper; +import android.text.Editable; import android.text.InputType; +import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; @@ -46,14 +48,17 @@ import com.google.android.material.chip.Chip; import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.progressindicator.LinearProgressIndicator; +import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputLayout; import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.LinkedList; +import java.util.List; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -626,17 +631,37 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On TextInputLayout title = bottomSheet.findViewById(R.id.title_textinput); title.getEditText().setText(vid.getTitle()); + title.getEditText().addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {} - TextInputLayout album = bottomSheet.findViewById(R.id.album_textinput); - album.getEditText().setText(vid.getPlaylistTitle()); + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void afterTextChanged(Editable editable) { + vid.setTitle(editable.toString()); + } + }); TextInputLayout author = bottomSheet.findViewById(R.id.author_textinput); author.getEditText().setText(vid.getAuthor()); + author.getEditText().addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void afterTextChanged(Editable editable) { + vid.setAuthor(editable.toString()); + } + }); String[] audioFormats = context.getResources().getStringArray(R.array.music_formats); TextInputLayout audioFormat = bottomSheet.findViewById(R.id.audio_format); - audioFormat.getEditText().setText(sharedPreferences.getString("audio_format", "")); ((AutoCompleteTextView)audioFormat.getEditText()).setOnItemClickListener((adapterView, view, i, l) -> { vid.setAudioFormat(audioFormats[i]); editor.putString("audio_format", vid.getAudioFormat()); @@ -648,12 +673,24 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On TextInputLayout title = bottomSheet.findViewById(R.id.title_textinput); title.getEditText().setText(vid.getTitle()); + title.getEditText().addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void afterTextChanged(Editable editable) { + vid.setTitle(editable.toString()); + } + }); + String[] videoFormats = context.getResources().getStringArray(R.array.video_formats); String[] videoQualities = context.getResources().getStringArray(R.array.video_quality); TextInputLayout videoFormat = bottomSheet.findViewById(R.id.video_format); - videoFormat.getEditText().setText(sharedPreferences.getString("video_format", "")); ((AutoCompleteTextView)videoFormat.getEditText()).setOnItemClickListener((adapterView, view, i, l) -> { vid.setVideoFormat(videoFormats[i]); editor.putString("video_format", vid.getVideoFormat()); @@ -661,7 +698,6 @@ public class HomeFragment extends Fragment implements HomeRecyclerViewAdapter.On }); TextInputLayout videoQuality = bottomSheet.findViewById(R.id.video_quality); - videoQuality.getEditText().setText(sharedPreferences.getString("video_quality", "")); ((AutoCompleteTextView)videoQuality.getEditText()).setOnItemClickListener((adapterView, view, i, l) -> { vid.setVideoQuality(videoQualities[i]); editor.putString("video_quality", vid.getVideoQuality()); diff --git a/app/src/main/res/layout/home_download_audio_bottom_sheet.xml b/app/src/main/res/layout/home_download_audio_bottom_sheet.xml index e35f06c3..3b4740cf 100644 --- a/app/src/main/res/layout/home_download_audio_bottom_sheet.xml +++ b/app/src/main/res/layout/home_download_audio_bottom_sheet.xml @@ -61,22 +61,6 @@ - - - - - -