From 1dad3a79b5da97f693ff08fe8d2ef363458398e7 Mon Sep 17 00:00:00 2001 From: deniscerri <64997243+deniscerri@users.noreply.github.com> Date: Mon, 16 Feb 2026 09:05:33 +0100 Subject: [PATCH] fixes --- .../deniscerri/ytdl/core/RuntimeManager.kt | 2 +- .../DownloadMultipleBottomSheetDialog.kt | 2 +- .../ui/downloadcard/DownloadVideoFragment.kt | 7 ++--- .../settings/ProcessingSettingsFragment.kt | 4 +++ .../GenerateYoutubePoTokensFragment.kt | 2 +- .../webview/PoTokenWebViewLoginActivity.kt | 26 ++++++++++--------- .../com/deniscerri/ytdl/util/UpdateUtil.kt | 2 +- .../util/extractors/newpipe/NewPipeUtil.kt | 13 +++++----- .../ytdl/util/extractors/ytdlp/YTDLPUtil.kt | 2 +- 9 files changed, 34 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/deniscerri/ytdl/core/RuntimeManager.kt b/app/src/main/java/com/deniscerri/ytdl/core/RuntimeManager.kt index d8474849..9d8c39b6 100644 --- a/app/src/main/java/com/deniscerri/ytdl/core/RuntimeManager.kt +++ b/app/src/main/java/com/deniscerri/ytdl/core/RuntimeManager.kt @@ -255,7 +255,7 @@ object RuntimeManager { if (!successCodes.contains(exitCode)) { // Check if process was manually killed (removed from map) if (processId != null && !idProcessMap.containsKey(processId)) throw CanceledException() - if (out.isEmpty()) throw ExecuteException(err) + throw ExecuteException(err) } ExecuteResponse(fullCommand, exitCode, System.currentTimeMillis() - startTime, out, err) diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdl/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt index a9dbf002..d24105bd 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt @@ -698,7 +698,7 @@ class DownloadMultipleBottomSheetDialog : BottomSheetDialogFragment(), Configure items.forEach { it.videoPreferences.compatibilityMode = checked if(checked) { - it.container = "mkv" + it.container = "mp4" } } CoroutineScope(Dispatchers.IO).launch { items.forEach { downloadViewModel.updateDownload(it) } } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/downloadcard/DownloadVideoFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/downloadcard/DownloadVideoFragment.kt index 47ba60f1..f23ff479 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/downloadcard/DownloadVideoFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/downloadcard/DownloadVideoFragment.kt @@ -344,7 +344,8 @@ class DownloadVideoFragment(private var resultItem: ResultItem? = null, private } } if (downloadItem.videoPreferences.compatibilityMode) { - containerAutoCompleteTextView.setText("mkv",false) + containerAutoCompleteTextView.setText("mp4",false) + downloadItem.container = "mp4" } view.findViewById(R.id.adjust).apply { visibility = if (shownFields.contains("adjust_video")) View.VISIBLE else View.GONE @@ -453,8 +454,8 @@ class DownloadVideoFragment(private var resultItem: ResultItem? = null, private downloadItem.videoPreferences.compatibilityMode = it container.isEnabled = !it if (it) { - containerAutoCompleteTextView.setText("mkv",false) - downloadItem.container = "mkv" + containerAutoCompleteTextView.setText("mp4",false) + downloadItem.container = "mp4" } }, alsoDownloadAsAudioClicked = { diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt index 5185534f..ee8b431c 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt @@ -104,12 +104,14 @@ class ProcessingSettingsFragment : BaseSettingsFragment() { val audioCodecPref = findPreference("audio_codec") val videoCodecPref = findPreference("video_codec") + val videoContainerPref = findPreference("video_format") val recodeVideoPreference = findPreference("recode_video")!! val compatibleVideoPreference = findPreference("compatible_video")!! audioCodecPref?.isEnabled = !compatibleVideoPreference.isChecked videoCodecPref?.isEnabled = !compatibleVideoPreference.isChecked + videoContainerPref?.isEnabled = !compatibleVideoPreference.isChecked recodeVideoPreference.setOnPreferenceClickListener { if (compatibleVideoPreference.isChecked && recodeVideoPreference.isChecked) { @@ -121,6 +123,7 @@ class ProcessingSettingsFragment : BaseSettingsFragment() { compatibleVideoPreference.setOnPreferenceClickListener { audioCodecPref?.isEnabled = !compatibleVideoPreference.isChecked videoCodecPref?.isEnabled = !compatibleVideoPreference.isChecked + videoContainerPref?.isEnabled = !compatibleVideoPreference.isChecked if (compatibleVideoPreference.isChecked) { if (recodeVideoPreference.isChecked) { @@ -137,6 +140,7 @@ class ProcessingSettingsFragment : BaseSettingsFragment() { editor.putString("audio_codec", audioCodecValues[audioCodecs.indexOf(newAudioCodec)]).apply() editor.putString("video_codec", videoCodecValues[videoCodecs.indexOf(newVideoCodec)]).apply() + editor.putString("video_format", "").apply() requireActivity().recreate() } true diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/GenerateYoutubePoTokensFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/GenerateYoutubePoTokensFragment.kt index 35417a3a..497b8369 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/GenerateYoutubePoTokensFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/GenerateYoutubePoTokensFragment.kt @@ -217,7 +217,7 @@ class GenerateYoutubePoTokensFragment : Fragment() { val intent = Intent(requireContext(), PoTokenWebViewLoginActivity::class.java) intent.putExtra("url", "https://www.youtube.com") - intent.putExtra("redirect_url", "https://www.youtube.com/embed/${editText.text.toString().getIDFromYoutubeURL()}") + intent.putExtra("redirect_url", "https://www.youtube.com/watch?v=${editText.text.toString().getIDFromYoutubeURL()}") intent.putExtra("no_auth", true) webPoTokenResultLauncher.launch(intent) } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/webview/PoTokenWebViewLoginActivity.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/webview/PoTokenWebViewLoginActivity.kt index c1264c15..765e38c5 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/webview/PoTokenWebViewLoginActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/webview/PoTokenWebViewLoginActivity.kt @@ -158,20 +158,22 @@ class PoTokenWebViewLoginActivity : BaseActivity() { } } - webView.evaluateJavascript("(function(){return document.readyState;})()") { value -> - if (value?.trim('"') == "complete") { - Handler(Looper.getMainLooper()).postDelayed({ - redirectUrl?.apply { - val extraHeaders: MutableMap = - HashMap() - extraHeaders["Referer"] = "https://www.google.com/" - webView.loadUrl(this, extraHeaders) - } - redirectUrl = null - }, 2500) + val canRedirect = noAuth || url?.contains("youtube.com/account") == true + if (canRedirect) { + webView.evaluateJavascript("(function(){return document.readyState;})()") { value -> + if (value?.trim('"') == "complete") { + Handler(Looper.getMainLooper()).postDelayed({ + redirectUrl?.apply { + val extraHeaders: MutableMap = + HashMap() + extraHeaders["Referer"] = "https://www.google.com/" + webView.loadUrl(this, extraHeaders) + } + redirectUrl = null + }, 2500) + } } } - } } diff --git a/app/src/main/java/com/deniscerri/ytdl/util/UpdateUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/UpdateUtil.kt index 56ebe58c..0bfa8ccd 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/UpdateUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/UpdateUtil.kt @@ -137,7 +137,7 @@ class UpdateUtil(var context: Context) { } else -> { val request = YTDLRequest(emptyList()) - request.addOption("--update-to", "${channel}@latest") + request.addOption("--update-to", "$channel") val res = RuntimeManager.getInstance().execute(request) val out = res.out.lines().last { it.isNotBlank() } diff --git a/app/src/main/java/com/deniscerri/ytdl/util/extractors/newpipe/NewPipeUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/extractors/newpipe/NewPipeUtil.kt index 0d35f925..5baf3d48 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/extractors/newpipe/NewPipeUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/extractors/newpipe/NewPipeUtil.kt @@ -328,6 +328,7 @@ class NewPipeUtil(context: Context) { if(sharedPreferences.getString("formats_source", "yt-dlp") == "newpipe" || ignoreFormatPreference){ if (stream.audioStreams.isNotEmpty()){ + stream.audioStreams = stream.audioStreams.sortedByDescending { it.bitrate } for (f in 0 until stream.audioStreams.size){ val it = stream.audioStreams[f] if (it.bitrate == 0 || listOf(599, 600).contains(it.itag)) continue @@ -354,9 +355,9 @@ class NewPipeUtil(context: Context) { } } - if (stream.videoStreams.isNotEmpty()){ - for (f in 0 until stream.videoStreams.size){ - val it = stream.videoStreams[f] + if (stream.videoOnlyStreams.isNotEmpty()){ + for (f in 0 until stream.videoOnlyStreams.size){ + val it = stream.videoOnlyStreams[f] if (it.bitrate == 0) continue val formatObj = Format( @@ -372,9 +373,9 @@ class NewPipeUtil(context: Context) { } } - if (stream.videoOnlyStreams.isNotEmpty()){ - for (f in 0 until stream.videoOnlyStreams.size){ - val it = stream.videoOnlyStreams[f] + if (stream.videoStreams.isNotEmpty()){ + for (f in 0 until stream.videoStreams.size){ + val it = stream.videoStreams[f] if (it.bitrate == 0) continue val formatObj = Format( diff --git a/app/src/main/java/com/deniscerri/ytdl/util/extractors/ytdlp/YTDLPUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/extractors/ytdlp/YTDLPUtil.kt index 794eaad5..82dcb410 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/extractors/ytdlp/YTDLPUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/extractors/ytdlp/YTDLPUtil.kt @@ -1124,7 +1124,7 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co if (downloadItem.format.format_id == context.resources.getString(R.string.worst_quality) || downloadItem.format.format_id == "wa" || downloadItem.format.format_id == "worst") { formatSorting.remove("size") formatSorting.remove("+size") - formatSorting.addAll(0,listOf("+br", "+res", "+fps")) + formatSorting.addAll(0,listOf("+abr","+br", "+res", "+fps")) } if (abrSort.isNotBlank()){