This commit is contained in:
zaednasr 2024-10-20 14:01:37 +02:00
parent 80672a2556
commit d1d9a341bd
No known key found for this signature in database
GPG key ID: 92B1DE23AD3D0E9E
13 changed files with 76 additions and 30 deletions

View file

@ -1,5 +1,28 @@
# YTDLnis Changelog # YTDLnis Changelog
> # 1.8.0 (2024-10)
# Notice
This version has the updated python version 3.11. Due to yt-dlp's deprecation of python 3.8, this update had to be made, but at the same time support for Android 6 will be dropped. Android 6 users can still keep using the previous version until yt-dlp stops working in the future.
# What's Changed
- Re-added individual pause button for downloads
- Added ability to set preferred command template
- Added PO Token setting for youtube extractor arguments
- Added customizable client for youtube extractor arguments
- Added preference to add extra youtube extractor arguments
- Added a header on cancelled/errored/scheduled/saved tabs to show the count and a dropdown menu to delete and copy urls instead of using the main queue screen menu
- Fixed app not starting scheduled downloads with the resume button if there were no paused downloads, weird ik
- Added Socket Timeout in Download Settings
- Fixed app not adding extra commands in the very end of the command list
- Fixed #580
- Small fixes on the home screen channel tab filters
- Fixed app crashing when pressing the thumbnail icon in the result card details. The icon is hidden if there is no thumbnail
- Watch Videos playlist type link is supported for data fetching and downloading.
- Added ability to parse the "artists" tag when fetching data for ytm
> # 1.7.9.2 (2024-09) > # 1.7.9.2 (2024-09)
# What's Changed # What's Changed

View file

@ -10,7 +10,7 @@
</div> </div>
<h3 align="center"> <h3 align="center">
YTDLnis Android 6.0 və yuxarı üçün yt-dlp istifadə edən pulsuz və açıq mənbəli video/səs yükləyicidir. YTDLnis Android 7.0 və yuxarı üçün yt-dlp istifadə edən pulsuz və açıq mənbəli video/səs yükləyicidir.
</h3> </h3>
<div align="center"> <div align="center">

View file

@ -10,10 +10,10 @@
</div> </div>
<h3 align="center"> <h3 align="center">
YTDLnis es un descargador de audio/video gratuito y de código abierto que utiliza yt-dlp para Android 6.0 y superior. YTDLnis es un descargador de audio/video gratuito y de código abierto que utiliza yt-dlp para Android 7.0 y superior.
</h3> </h3>
<h4 align="center"> <h4 align="center">
[Creado por Denis Çerri. Actualmente mantenido por zaednasr] Creado por Denis Çerri
</h4> </h4>
<div align="center"> <div align="center">

View file

@ -10,7 +10,7 @@
</div> </div>
<h3 align="center"> <h3 align="center">
YTDLnis adalah pengunduh video/audio sumber terbuka dan gratis yang menggunakan yt-dlp bagi Android 6.0 ke atas. YTDLnis adalah pengunduh video/audio sumber terbuka dan gratis yang menggunakan yt-dlp bagi Android 7.0 ke atas.
</h3> </h3>
<div align="center"> <div align="center">

View file

@ -20,10 +20,10 @@
</div> </div>
<h3 align="center"> <h3 align="center">
YTDLnisは、Android 6.0以降に対応した、yt-dlpを使用した無料かつオープンソースのビデオ/オーディオダウンローダーです。 YTDLnisは、Android 7.0以降に対応した、yt-dlpを使用した無料かつオープンソースのビデオ/オーディオダウンローダーです。
</h3> </h3>
<h4 align="center"> <h4 align="center">
[Denis Çerriによって作成されました。現在はzaednasrによってメンテナンスされています] Denis Çerriによって作成されました
</h4> </h4>
<div align="center"> <div align="center">

View file

@ -10,7 +10,7 @@
</div> </div>
<h3 align="center"> <h3 align="center">
YTDLnis é um aplicativo gratuito e de código aberto para baixar vídeos/áudios usando yt-dlp disponível para o Android 6.0 e superior. YTDLnis é um aplicativo gratuito e de código aberto para baixar vídeos/áudios usando yt-dlp disponível para o Android 7.0 e superior.
</h3> </h3>
<div align="center"> <div align="center">

View file

@ -10,7 +10,7 @@
</div> </div>
<h3 align="center"> <h3 align="center">
YTDLnis është një shkarkues video/audio falas dhe me burim të hapur duke përdorur yt-dlp për Android 6.0 dhe më lart. YTDLnis është një shkarkues video/audio falas dhe me burim të hapur duke përdorur yt-dlp për Android 7.0 dhe më lart.
</h3> </h3>
<div align="center"> <div align="center">

View file

@ -20,10 +20,10 @@
</div> </div>
<h3 align="center"> <h3 align="center">
YTDLnis is a free and open source video/audio downloader using yt-dlp for Android 6.0 and above. YTDLnis is a free and open source video/audio downloader using yt-dlp for Android 7.0 and above.
</h3> </h3>
<h4 align="center"> <h4 align="center">
[Created by Denis Çerri. Currently being maintained by zaednasr] Created by Denis Çerri
</h4> </h4>
<div align="center"> <div align="center">

View file

@ -9,9 +9,9 @@ plugins {
def properties = new Properties() def properties = new Properties()
def versionMajor = 1 def versionMajor = 1
def versionMinor = 7 def versionMinor = 8
def versionPatch = 9 def versionPatch = 0
def versionBuild = 2 // bump for dogfood builds, public betas, etc. def versionBuild = 0 // bump for dogfood builds, public betas, etc.
def isBeta = false def isBeta = false
def versionExt = "" def versionExt = ""

View file

@ -118,7 +118,7 @@ interface DownloadDao {
@Query("SELECT * FROM downloads WHERE status='Scheduled' ORDER BY downloadStartTime, id") @Query("SELECT * FROM downloads WHERE status='Scheduled' ORDER BY downloadStartTime, id")
fun getScheduledDownloadsList() : List<DownloadItem> fun getScheduledDownloadsList() : List<DownloadItem>
@Query("SELECT id FROM downloads WHERE status='Queued' ORDER BY id") @Query("SELECT id FROM downloads WHERE status='Queued' ORDER BY downloadStartTime, id")
fun getQueuedDownloadsListIDs() : List<Long> fun getQueuedDownloadsListIDs() : List<Long>
@RewriteQueriesToDropUnusedColumns @RewriteQueriesToDropUnusedColumns
@ -289,8 +289,11 @@ interface DownloadDao {
resetScheduleTimeForItems(existingIDs) resetScheduleTimeForItems(existingIDs)
existingIDs.forEach { updateDownloadID(it, -it) } existingIDs.forEach { updateDownloadID(it, -it) }
downloads.filter { !existingIDs.contains(it) }.reversed().forEach { downloads.filter { !existingIDs.contains(it) }.toMutableList().apply {
updateDownloadID(it, it + existingIDs.size) this.reverse()
this.forEach {
updateDownloadID(it, it + existingIDs.size)
}
} }
existingIDs.forEachIndexed { idx, it -> existingIDs.forEachIndexed { idx, it ->
@ -305,8 +308,11 @@ interface DownloadDao {
resetScheduleTimeForItems(existingIDs) resetScheduleTimeForItems(existingIDs)
existingIDs.forEach { updateDownloadID(it, -it) } existingIDs.forEach { updateDownloadID(it, -it) }
downloads.filter { !existingIDs.contains(it) }.reversed().forEach { downloads.filter { !existingIDs.contains(it) }.toMutableList().apply {
updateDownloadID(it, it + existingIDs.size) this.reverse()
this.forEach {
updateDownloadID(it, it + existingIDs.size)
}
} }
existingIDs.forEachIndexed { idx, it -> existingIDs.forEachIndexed { idx, it ->

View file

@ -176,7 +176,7 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
return@combine PausedAllDownloadsState.HIDDEN return@combine PausedAllDownloadsState.HIDDEN
}else if (paused > 1 || (active == 0 && queued > 0) || (paused > 0 && active > 0)) { }else if (paused > 1 || (active == 0 && queued > 0) || (paused > 0 && active > 0)) {
return@combine PausedAllDownloadsState.RESUME return@combine PausedAllDownloadsState.RESUME
}else if (active > 1) { }else if (active > 1 || (active > 0 && queued > 0)) {
return@combine PausedAllDownloadsState.PAUSE return@combine PausedAllDownloadsState.PAUSE
}else{ }else{
return@combine PausedAllDownloadsState.HIDDEN return@combine PausedAllDownloadsState.HIDDEN
@ -767,12 +767,14 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
//other ids that need to move around //other ids that need to move around
val takenPositions = mutableListOf<Long>() val takenPositions = mutableListOf<Long>()
for (dID in downloads.filter { !ids.contains(it) && it < lastID }.reversed()){ downloads.filter { !ids.contains(it) && it < lastID }.toMutableList().apply {
val newID = downloads.last { !newIDs.contains(it) && !takenPositions.contains(it) && it <= lastID } this.reverse()
takenPositions.add(newID) this.forEach { dID ->
dao.updateDownloadID(dID, newID) val newID = downloads.last { !newIDs.contains(it) && !takenPositions.contains(it) && it <= lastID }
takenPositions.add(newID)
dao.updateDownloadID(dID, newID)
}
} }
ids.forEachIndexed { idx, it -> ids.forEachIndexed { idx, it ->
dao.updateDownloadID(-it, newIDs[idx]) dao.updateDownloadID(-it, newIDs[idx])
} }
@ -782,7 +784,7 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
suspend fun putAtBottomOfQueue(ids: List<Long>) = CoroutineScope(Dispatchers.IO).launch{ suspend fun putAtBottomOfQueue(ids: List<Long>) = CoroutineScope(Dispatchers.IO).launch{
val downloads = dao.getQueuedDownloadsListIDs() val downloads = dao.getQueuedDownloadsListIDs()
ids.forEach { dao.updateDownloadID(it, -it)} ids.forEach { dao.updateDownloadID(it, -it)}
val newIDs = downloads.sortedByDescending { it }.take(ids.size) val newIDs = downloads.takeLast(ids.size)
//other ids that need to move around //other ids that need to move around
val takenPositions = mutableListOf<Long>() val takenPositions = mutableListOf<Long>()
@ -792,8 +794,11 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
dao.updateDownloadID(dID, newID) dao.updateDownloadID(dID, newID)
} }
ids.reversed().forEachIndexed { idx, it -> ids.toMutableList().apply {
dao.updateDownloadID(-it, newIDs[idx]) this.reverse()
this.forEachIndexed { idx, it ->
dao.updateDownloadID(-it, newIDs[idx])
}
} }
} }
@ -803,9 +808,12 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
dao.updateDownloadID(current, -current) dao.updateDownloadID(current, -current)
if (current > id){ if (current > id){
for (dID in downloads.filter { it in id until current }.reversed()){ downloads.filter { it in id until current }.toMutableList().apply {
val index = downloads.indexOf(dID) this.reverse()
dao.updateDownloadID(dID, downloads[index + 1]) this.forEach { dID ->
val index = downloads.indexOf(dID)
dao.updateDownloadID(dID, downloads[index + 1])
}
} }
}else{ }else{
for (dID in downloads.filter { it in (current + 1)..id }){ for (dID in downloads.filter { it in (current + 1)..id }){

View file

@ -151,6 +151,7 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
historyViewModel = ViewModelProvider(this)[HistoryViewModel::class.java] historyViewModel = ViewModelProvider(this)[HistoryViewModel::class.java]
historyViewModel.allItems.observe(viewLifecycleOwner) { historyViewModel.allItems.observe(viewLifecycleOwner) {
allhistoryList = it
if(it.isEmpty()){ if(it.isEmpty()){
noResults!!.visibility = VISIBLE noResults!!.visibility = VISIBLE
selectionChips!!.visibility = GONE selectionChips!!.visibility = GONE

View file

@ -0,0 +1,8 @@
# What's Changed
- Update to Python 3.11, FFMpeg 7.0.1, Cryptodome-3.20.0, mutagen-1.47.0
- Re-added individual pause button for downloads
- Added ability to set preferred command template
- Added youtube extractor argument preferences
- Download Queue general fixes
- Read the Github changelog for more info