diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e540b83..0d1ecbd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,50 @@ # YTDLnis Changelog +> # 1.8.6 (2025-10) + +# What's Changed + +## Upgraded dependencies + +Python 3.12.11 +FFmpeg 7.1.1 +16kb page size support + +## Changes: + +- Fix app sometimes giving you dubbed audio format instead of original audio +- Fix app crashing sometimes when pasting a link to terminal, also btw u can enable color highlight if disabled, wont crash the app i guess +- Make sponsorblock preference clear by default +- For playlists app now uses --lazy-playlist to load large playlists continuously in pages like newpipe does, its faster +- Enable / Disable certain cookie records instead of all at once +- Add option to write cookie description or label +- Add VORBIS to audio containers +- Add GIF to video containers +- Don't apply sponsorblock api url if sponsorblock is disabled +- Add --no-check-certificates command when aria2 is applied +- Add embed thumbnail toggle in adjust video chips +- Some video chips are combined into one with hidden dialog menu when clicked to save space +- Add badges on the adjust audio/video chips with hidden menus so u can know how many settings are active on each of them +- Don't apply generated po tokens when cookies are disabled +- remove data sync id fetch from normal cookies webview, only in po token webview +- Add filename template selection in the terminal screen +- Add toggle to not prefer DRC Audio formats +- Add ability to long press the terminate button to show the warning dialog even if u checked to not show it +- Add warning in the download card if selected format is too big (if format size is known, also this is an approximate as format size could change in the final file) +- Removed prefer smallest formats preference and instead u can select if u prefer small formats or large size formats +- fix app deleting custom cache folder when clearing temporary data +- apply proper autonumber metadata for each item when downloading multiple items +- add ability to remove file from mediastore when deleting file +- fix app crashing when sometimes yt-dlp results subtitles as null instead of an array +- Other small details and changes i forgot to note idk + +## Advanced changes + +- Added toggle to disable --flat-playlist when data fetching +- Add Subs PO Token support when generating po token +- PO Token generation now has two modes, Auth and Non Auth +- Added toggle to use the url user gave to the app as playlist url instead of the playlist_webpage_url tag from the json dump + > # 1.8.5 (2025-07) # What's Changed diff --git a/app/build.gradle b/app/build.gradle index cee6b929..c8c0e3d0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ plugins { def properties = new Properties() def versionMajor = 1 def versionMinor = 8 -def versionPatch = 5 +def versionPatch = 6 def versionBuild = 0 // bump for dogfood builds, public betas, etc. def isBeta = false 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 b113f46e..5e7810ed 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 @@ -91,6 +91,8 @@ class PoTokenWebViewLoginActivity : BaseActivity() { generateBtn = toolbar.findViewById(R.id.generate) webViewCompose = findViewById(R.id.webview_compose) cookieManager = CookieManager.getInstance() + cookieManager.removeAllCookies(null) + cookieManager.flush() preferences = PreferenceManager.getDefaultSharedPreferences(this@PoTokenWebViewLoginActivity) preferences.edit().putString("genenerate_youtube_po_token_preferred_url", url).apply() diff --git a/app/src/main/java/com/deniscerri/ytdl/util/Extensions.kt b/app/src/main/java/com/deniscerri/ytdl/util/Extensions.kt index 07e4f6ff..055cfa2c 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/Extensions.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/Extensions.kt @@ -290,6 +290,14 @@ object Extensions { animator.start() } + fun dpToPx(resources: Resources, dp: Float): Int { + return TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, + dp, + resources.displayMetrics + ).toInt() + } + @OptIn(ExperimentalBadgeUtils::class) fun Chip.createBadge(context: Context, nr: Int) { this.overlay.clear() @@ -297,11 +305,11 @@ object Extensions { val badge = BadgeDrawable.create(context).apply { number = nr backgroundColor = context.getColor(R.color.white) - verticalOffset = 25 + verticalOffset = dpToPx(context.resources, 20f) horizontalOffset = - if (nr < 10) dp(App.instance.resources, 16f) - else if (nr < 100) dp(App.instance.resources, 19f) - else dp(App.instance.resources, 22f) + if (nr < 10) dpToPx(context.resources, 16f) + else if (nr < 100) dpToPx(context.resources, 19f) + else dpToPx(context.resources, 22f) } BadgeUtils.attachBadgeDrawable(badge, this) } diff --git a/app/src/main/java/com/deniscerri/ytdl/util/UiUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/UiUtil.kt index 8f541efa..aa8a3f96 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/UiUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/UiUtil.kt @@ -1677,7 +1677,7 @@ object UiUtil { val sponsorBlock = view.findViewById(R.id.sponsorblock_filters) sponsorBlock.isEnabled = sharedPreferences.getBoolean("use_sponsorblock", true) if (items.size == 1 && sponsorBlock.isEnabled) { - sponsorBlock.createBadge(context, items.first().videoPreferences.sponsorBlockFilters.size) + sponsorBlock.createBadge(context, items.first().videoPreferences.sponsorBlockFilters.filter { it.isNotBlank() }.size) } sponsorBlock!!.setOnClickListener { val builder = MaterialAlertDialogBuilder(context) @@ -1875,7 +1875,7 @@ object UiUtil { val sponsorBlock = view.findViewById(R.id.sponsorblock_filters) sponsorBlock.isEnabled = sharedPreferences.getBoolean("use_sponsorblock", true) if (items.size == 1 && sponsorBlock.isEnabled) { - sponsorBlock.createBadge(context, items.first().videoPreferences.sponsorBlockFilters.size) + sponsorBlock.createBadge(context, items.first().audioPreferences.sponsorBlockFilters.filter { it.isNotBlank() }.size) } sponsorBlock!!.setOnClickListener { val builder = MaterialAlertDialogBuilder(context) 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 287dde80..01ea0e4f 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 @@ -141,6 +141,7 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co request.addOption("--lazy-playlist") request.addOption(if (singleItem) "-J" else "-j") request.applyDefaultOptionsForFetchingData(if (query.isURL()) query else null) + val usePlaylistOriginalURL = sharedPreferences.getBoolean("use_original_url_playlist", false) val finalResults = mutableListOf() var postedProgress = false @@ -148,6 +149,13 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co runCatching { val generatedResults = parseYTDLPListResults(listOf(line)) if (generatedResults.isNotEmpty()) { + + generatedResults.forEach { + if (!it.playlistURL.isNullOrBlank() && usePlaylistOriginalURL) { + it.playlistURL = query + } + } + finalResults.addAll(generatedResults) if (!postedProgress) { if (finalResults.size > 1) { diff --git a/app/src/main/res/layout/observe_sources_bottom_sheet.xml b/app/src/main/res/layout/observe_sources_bottom_sheet.xml index 2a660816..3eb631ff 100644 --- a/app/src/main/res/layout/observe_sources_bottom_sheet.xml +++ b/app/src/main/res/layout/observe_sources_bottom_sheet.xml @@ -167,6 +167,7 @@ app:layout_constraintTop_toTopOf="parent"> flac opus wav + vorbis @@ -19,6 +20,7 @@ flac opus wav + vorbis diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8e24e1eb..178ef972 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -500,4 +500,6 @@ Disable flat playlist Don\'t use --flat-playlist. Slower data fetching, but more data rich Chapters + Use original url for playlist url + Use playlist url given by user instead of the playlist_webpage_url tag from the json dump diff --git a/app/src/main/res/xml/advanced_preferences.xml b/app/src/main/res/xml/advanced_preferences.xml index 2b3468a6..8b284f10 100644 --- a/app/src/main/res/xml/advanced_preferences.xml +++ b/app/src/main/res/xml/advanced_preferences.xml @@ -86,6 +86,14 @@ android:key="no_flat_playlist" android:summary="@string/disable_flat_playlist_summary" android:title="@string/disable_flat_playlist" /> + + +