From 4b921bd6c703479c02b58940003730304ba24140 Mon Sep 17 00:00:00 2001 From: deniscerri <64997243+deniscerri@users.noreply.github.com> Date: Sun, 23 Apr 2023 21:37:33 +0200 Subject: [PATCH] fixed ytm playlist links not showing all items and more theme fixes --- app/build.gradle | 2 +- .../java/com/deniscerri/ytdlnis/MainActivity.kt | 6 ++++++ .../database/repository/ResultRepository.kt | 2 +- .../database/viewmodel/DownloadViewModel.kt | 14 +++++++++----- .../ytdlnis/database/viewmodel/ResultViewModel.kt | 2 +- .../deniscerri/ytdlnis/receiver/ShareActivity.kt | 3 +++ .../ui/downloadcard/DownloadAudioFragment.kt | 11 ++++++----- .../ui/downloadcard/DownloadBottomSheetDialog.kt | 5 ++++- .../ui/downloadcard/DownloadVideoFragment.kt | 3 ++- .../ui/downloads/ActiveDownloadsFragment.kt | 9 ++++++++- .../deniscerri/ytdlnis/util/NotificationUtil.kt | 1 + .../com/deniscerri/ytdlnis/work/DownloadWorker.kt | 4 ++-- .../main/res/layout/fragment_download_audio.xml | 1 + .../main/res/layout/fragment_download_command.xml | 1 - .../main/res/layout/fragment_download_video.xml | 1 + .../layout/history_item_details_bottom_sheet.xml | 2 +- app/src/main/res/values-night/colors.xml | 2 +- app/src/main/res/values/colors.xml | 2 +- 18 files changed, 49 insertions(+), 22 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b2668a92..16ff8aad 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation "androidx.appcompat:appcompat:$appCompatVer" implementation "androidx.constraintlayout:constraintlayout:2.1.4" - implementation 'com.google.android.material:material:1.9.0-beta01' + implementation 'com.google.android.material:material:1.9.0-rc01' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.3.0' implementation 'androidx.preference:preference:1.2.0' diff --git a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt index abf6b37b..da811618 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt @@ -8,6 +8,7 @@ import android.content.Intent import android.content.SharedPreferences import android.content.pm.PackageManager import android.content.res.Configuration +import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.net.Uri import android.os.Build @@ -16,6 +17,7 @@ import android.provider.Settings import android.util.Log import android.view.View import android.view.WindowInsets +import android.view.WindowManager import android.widget.CheckBox import android.widget.TextView import androidx.core.app.ActivityCompat @@ -35,6 +37,7 @@ import com.deniscerri.ytdlnis.ui.more.settings.SettingsActivity import com.deniscerri.ytdlnis.util.ThemeUtil import com.deniscerri.ytdlnis.util.UpdateUtil import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.elevation.SurfaceColors import com.google.android.material.navigation.NavigationBarView import com.google.android.material.navigation.NavigationView import kotlinx.coroutines.Dispatchers @@ -47,6 +50,7 @@ import java.nio.charset.Charset import java.nio.charset.StandardCharsets import kotlin.system.exitProcess + class MainActivity : BaseActivity() { lateinit var context: Context @@ -156,6 +160,8 @@ class MainActivity : BaseActivity() { true } } + window.navigationBarColor = SurfaceColors.SURFACE_2.getColor(this) + cookieViewModel.updateCookiesFile() val intent = intent handleIntents(intent) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt index 3bd82a56..21ba7047 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt @@ -68,7 +68,7 @@ class ResultRepository(private val resultDao: ResultDao, private val commandTemp suspend fun getPlaylist(inputQuery: String, resetResults: Boolean) : ArrayList{ val query = inputQuery.split("list=".toRegex()).dropLastWhile { it.isEmpty() } - .toTypedArray()[1] + .toTypedArray()[1].split("&").first() var nextPageToken = "" if (resetResults) deleteAll() val infoUtil = InfoUtil(context) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt index 54540ec5..c5c84316 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt @@ -59,7 +59,8 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel erroredDownloads = repository.erroredDownloads val videoFormat = getApplication().resources.getStringArray(R.array.video_formats) - val videoContainer = sharedPreferences.getString("video_format", "Default") + var videoContainer = sharedPreferences.getString("video_format", "Default") + if (videoContainer == "Default") videoContainer = application.getString(R.string.defaultValue) defaultVideoFormats = mutableListOf() videoFormat.forEach { @@ -77,7 +78,8 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel bestVideoFormat = defaultVideoFormats.last() - val audioContainer = sharedPreferences.getString("audio_format", "mp3") + var audioContainer = sharedPreferences.getString("audio_format", "mp3") + if (audioContainer == "Default") audioContainer = application.getString(R.string.defaultValue) bestAudioFormat = Format( getApplication().resources.getString(R.string.best_quality), audioContainer!!, @@ -228,7 +230,7 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel try { val theFormats = formats.ifEmpty { defaultVideoFormats } - val qualityPreference = sharedPreferences.getString("video_quality", getApplication().resources.getString(R.string.best_quality)) + val qualityPreference = sharedPreferences.getString("video_quality", application.getString(R.string.best_quality)) if (qualityPreference == getApplication().resources.getString(R.string.worst_quality)){ theFormats.first { !it.format_note.contains("audio", ignoreCase = true) } } @@ -267,7 +269,8 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel fun getGenericAudioFormats() : MutableList{ val audioFormats = application.resources.getStringArray(R.array.audio_formats) val formats = mutableListOf() - val containerPreference = sharedPreferences.getString("audio_format", "Default") + var containerPreference = sharedPreferences.getString("audio_format", "Default") + if (containerPreference == "Default") containerPreference = application.getString(R.string.defaultValue) audioFormats.forEach { formats.add(Format(it, containerPreference!!,"","", "",0, it)) } return formats } @@ -275,7 +278,8 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel fun getGenericVideoFormats() : MutableList{ val videoFormats = application.resources.getStringArray(R.array.video_formats) val formats = mutableListOf() - val containerPreference = sharedPreferences.getString("video_format", "Default") + var containerPreference = sharedPreferences.getString("video_format", "Default") + if (containerPreference == "Default") containerPreference = application.getString(R.string.defaultValue) videoFormats.forEach { formats.add(Format(it, containerPreference!!,"","", "",0, it)) } return formats } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt index 26ef2157..b05d5303 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt @@ -104,7 +104,7 @@ class ResultViewModel(application: Application) : AndroidViewModel(application) } fun getQueryType(inputQuery: String) : String { var type = "Search" - val p = Pattern.compile("^(https?)://(www.)?youtu(.be)?") + val p = Pattern.compile("^(https?)://(www.)?(music.)?youtu(.be)?") val m = p.matcher(inputQuery) if (m.find()) { type = "Video" diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt index 775dbf81..90d2a222 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareActivity.kt @@ -16,6 +16,7 @@ import android.provider.Settings import android.util.Log import android.view.Window import android.view.WindowManager +import android.widget.FrameLayout import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity @@ -34,6 +35,7 @@ import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel import com.deniscerri.ytdlnis.ui.BaseActivity import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog import com.deniscerri.ytdlnis.ui.downloadcard.SelectPlaylistItemsBottomSheetDialog +import com.deniscerri.ytdlnis.util.ThemeUtil import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.Dispatchers @@ -53,6 +55,7 @@ class ShareActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ThemeUtil.updateTheme(this) WindowCompat.setDecorFitsSystemWindows(window, false) ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { v, insets -> v.setPadding(0, 0, 0, 0) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt index e40b55fa..a6d34823 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt @@ -126,7 +126,8 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr if (formats.isEmpty()) formats.addAll(downloadItem.allFormats.filter { it.format_note.contains("audio", ignoreCase = true) }) val containers = requireContext().resources.getStringArray(R.array.audio_containers) - val containerPreference = sharedPreferences.getString("audio_format", "Default") + var containerPreference = sharedPreferences.getString("audio_format", "Default") + if (containerPreference == "Default") containerPreference = getString(R.string.defaultValue) val container = view.findViewById(R.id.downloadContainer) val containerAutoCompleteTextView = view.findViewById(R.id.container_textview) @@ -154,7 +155,7 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr formats = allFormats.first().toMutableList() } } - formatCard.setOnClickListener{_ -> + formatCard.setOnClickListener{ if (parentFragmentManager.findFragmentByTag("formatSheet") == null){ val bottomSheet = FormatSelectionBottomSheetDialog(listOf(downloadItem), listOf(formats), listener) bottomSheet.show(parentFragmentManager, "formatSheet") @@ -215,13 +216,13 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr builder.setMultiChoiceItems( entries, checkedItems.toBooleanArray() - ) { dialog, which, isChecked -> + ) { _, which, isChecked -> checkedItems[which] = isChecked } builder.setPositiveButton( getString(R.string.ok) - ) { dialog: DialogInterface?, which: Int -> + ) { _: DialogInterface?, _: Int -> downloadItem.audioPreferences.sponsorBlockFilters.clear() for (i in 0 until checkedItems.size) { if (checkedItems[i]) { @@ -233,7 +234,7 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr // handle the negative button of the alert dialog builder.setNegativeButton( getString(R.string.cancel) - ) { dialog: DialogInterface?, which: Int -> } + ) { _: DialogInterface?, _: Int -> } val dialog = builder.create() diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt index 1bf66f14..43e7d180 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt @@ -6,6 +6,7 @@ import android.content.DialogInterface import android.os.Bundle import android.text.format.DateFormat import android.util.DisplayMetrics +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -220,7 +221,9 @@ class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val parentFragmentManager.beginTransaction().remove(parentFragmentManager.findFragmentByTag("downloadSingleSheet")!!).commit() parentFragmentManager.beginTransaction().remove(downloadVideoFragment).commit() parentFragmentManager.beginTransaction().remove(downloadVideoFragment).commit() - parentFragmentManager.beginTransaction().remove(downloadCommandFragment).commit() + if (this::downloadCommandFragment.isInitialized){ + parentFragmentManager.beginTransaction().remove(downloadCommandFragment).commit() + } if (activity is ShareActivity){ (activity as ShareActivity).finish() } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt index 72f59400..03c7755f 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt @@ -135,7 +135,8 @@ class DownloadVideoFragment(private val resultItem: ResultItem, private var curr val container = view.findViewById(R.id.downloadContainer) val containerAutoCompleteTextView = view.findViewById(R.id.container_textview) - val containerPreference = sharedPreferences.getString("video_format", "Default") + var containerPreference = sharedPreferences.getString("video_format", "Default") + if (containerPreference == "Default") containerPreference = getString(R.string.defaultValue) if (formats.isEmpty()) formats = downloadViewModel.getGenericVideoFormats() diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ActiveDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ActiveDownloadsFragment.kt index 939e772d..fb9289fb 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ActiveDownloadsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ActiveDownloadsFragment.kt @@ -19,6 +19,7 @@ import androidx.work.WorkManager import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.adapter.ActiveDownloadAdapter import com.deniscerri.ytdlnis.database.models.DownloadItem +import com.deniscerri.ytdlnis.database.repository.DownloadRepository import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogActivity @@ -26,6 +27,7 @@ import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.NotificationUtil import com.google.android.material.progressindicator.LinearProgressIndicator import com.yausername.youtubedl_android.YoutubeDL +import kotlinx.coroutines.runBlocking class ActiveDownloadsFragment() : Fragment(), ActiveDownloadAdapter.OnItemClickListener, OnClickListener { @@ -124,7 +126,12 @@ class ActiveDownloadsFragment() : Fragment(), ActiveDownloadAdapter.OnItemClickL } private fun cancelDownload(itemID: Long){ - list.find { it.id == itemID }?.let { downloadViewModel.deleteDownload(it) } + list.find { it.id == itemID }?.let { + it.status = DownloadRepository.Status.Cancelled.toString() + downloadViewModel.updateDownload(it) + } + + val id = itemID.toInt() YoutubeDL.getInstance().destroyProcessById(id.toString()) WorkManager.getInstance(requireContext()).cancelUniqueWork(id.toString()) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt index 0c038f4f..bf48aea5 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt @@ -164,6 +164,7 @@ class NotificationUtil(var context: Context) { notificationBuilder .setContentTitle("${context.getString(R.string.failed_download)}: $title") .setContentText(error) + .setContentIntent(errorPendingIntent) .setSmallIcon(R.drawable.ic_app_icon) .setLargeIcon( BitmapFactory.decodeResource( diff --git a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt index 4d32d453..f57f4eba 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt @@ -145,7 +145,7 @@ class DownloadWorker( else if (audioQualityId == context.getString(R.string.worst_quality)) audioQualityId = "worstaudio" val ext = downloadItem.format.container - if (audioQualityId.isBlank() || ext == "Default") request.addOption("-x") + if (audioQualityId.isBlank() || ext == "Default" || ext == context.getString(R.string.defaultValue)) request.addOption("-x") else request.addOption("-f", audioQualityId) if(ext != "webm"){ @@ -217,7 +217,7 @@ class DownloadWorker( Log.e(TAG, formatArgument) request.addOption("-f", formatArgument) val format = downloadItem.format.container - if(format.isNotEmpty() && format != "Default"){ + if(format.isNotEmpty() && format != "Default" && format != context.getString(R.string.defaultValue)){ request.addOption("--merge-output-format", format) if (format != "webm") { val embedThumb = sharedPreferences.getBoolean("embed_thumbnail", false) diff --git a/app/src/main/res/layout/fragment_download_audio.xml b/app/src/main/res/layout/fragment_download_audio.xml index 326736fe..2c042b23 100644 --- a/app/src/main/res/layout/fragment_download_audio.xml +++ b/app/src/main/res/layout/fragment_download_audio.xml @@ -121,6 +121,7 @@ > diff --git a/app/src/main/res/layout/fragment_download_video.xml b/app/src/main/res/layout/fragment_download_video.xml index da0be6fa..de48731d 100644 --- a/app/src/main/res/layout/fragment_download_video.xml +++ b/app/src/main/res/layout/fragment_download_video.xml @@ -116,6 +116,7 @@ android:paddingHorizontal="10dp"> - @android:color/background_dark + #1c1d23 #000000 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 478330d5..281fb8c8 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -4,7 +4,7 @@ #000000 #323232 #A6A6A6 - @android:color/background_dark + #1c1d23 #d43c3c