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
> # 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)
# What's Changed

View file

@ -10,7 +10,7 @@
</div>
<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>
<div align="center">

View file

@ -10,10 +10,10 @@
</div>
<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>
<h4 align="center">
[Creado por Denis Çerri. Actualmente mantenido por zaednasr]
Creado por Denis Çerri
</h4>
<div align="center">

View file

@ -10,7 +10,7 @@
</div>
<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>
<div align="center">

View file

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

View file

@ -10,7 +10,7 @@
</div>
<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>
<div align="center">

View file

@ -10,7 +10,7 @@
</div>
<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>
<div align="center">

View file

@ -20,10 +20,10 @@
</div>
<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>
<h4 align="center">
[Created by Denis Çerri. Currently being maintained by zaednasr]
Created by Denis Çerri
</h4>
<div align="center">

View file

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

View file

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

View file

@ -176,7 +176,7 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
return@combine PausedAllDownloadsState.HIDDEN
}else if (paused > 1 || (active == 0 && queued > 0) || (paused > 0 && active > 0)) {
return@combine PausedAllDownloadsState.RESUME
}else if (active > 1) {
}else if (active > 1 || (active > 0 && queued > 0)) {
return@combine PausedAllDownloadsState.PAUSE
}else{
return@combine PausedAllDownloadsState.HIDDEN
@ -767,12 +767,14 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
//other ids that need to move around
val takenPositions = mutableListOf<Long>()
for (dID in downloads.filter { !ids.contains(it) && it < lastID }.reversed()){
val newID = downloads.last { !newIDs.contains(it) && !takenPositions.contains(it) && it <= lastID }
takenPositions.add(newID)
dao.updateDownloadID(dID, newID)
downloads.filter { !ids.contains(it) && it < lastID }.toMutableList().apply {
this.reverse()
this.forEach { dID ->
val newID = downloads.last { !newIDs.contains(it) && !takenPositions.contains(it) && it <= lastID }
takenPositions.add(newID)
dao.updateDownloadID(dID, newID)
}
}
ids.forEachIndexed { idx, it ->
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{
val downloads = dao.getQueuedDownloadsListIDs()
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
val takenPositions = mutableListOf<Long>()
@ -792,8 +794,11 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel
dao.updateDownloadID(dID, newID)
}
ids.reversed().forEachIndexed { idx, it ->
dao.updateDownloadID(-it, newIDs[idx])
ids.toMutableList().apply {
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)
if (current > id){
for (dID in downloads.filter { it in id until current }.reversed()){
val index = downloads.indexOf(dID)
dao.updateDownloadID(dID, downloads[index + 1])
downloads.filter { it in id until current }.toMutableList().apply {
this.reverse()
this.forEach { dID ->
val index = downloads.indexOf(dID)
dao.updateDownloadID(dID, downloads[index + 1])
}
}
}else{
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.allItems.observe(viewLifecycleOwner) {
allhistoryList = it
if(it.isEmpty()){
noResults!!.visibility = VISIBLE
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