diff --git a/.gitignore b/.gitignore
index 3b4b454b..68fa944b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
*.iml
.gradle
/local.properties
+/keystore.properties
/.idea
.DS_Store
/build
diff --git a/app/build.gradle b/app/build.gradle
index 317b33fe..97aaa623 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -27,7 +27,7 @@ android {
compileSdk 34
try {
- def propertiesFile = rootProject.file("local.properties")
+ def propertiesFile = rootProject.file("keystore.properties")
if(propertiesFile.text != ""){
properties.load(new FileInputStream(propertiesFile))
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 bcefc6d5..a9d50b5b 100644
--- a/app/src/main/java/com/deniscerri/ytdl/util/UiUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdl/util/UiUtil.kt
@@ -6,13 +6,10 @@ import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.app.Activity
import android.content.ClipData
-import android.content.ClipData.Item
import android.content.ClipboardManager
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
-import android.content.res.ColorStateList
-import android.graphics.Canvas
import android.net.Uri
import android.os.Build
import android.text.Editable
@@ -37,36 +34,26 @@ import androidx.annotation.OptIn
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.content.res.AppCompatResources
-import androidx.cardview.widget.CardView
-import androidx.compose.ui.graphics.Color
import androidx.constraintlayout.widget.ConstraintLayout
-import androidx.core.content.FileProvider
+import androidx.core.text.HtmlCompat
+import androidx.core.text.parseAsHtml
import androidx.core.view.isVisible
import androidx.core.widget.doOnTextChanged
-import androidx.documentfile.provider.DocumentFile
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.LifecycleOwner
import androidx.preference.PreferenceManager
-import androidx.recyclerview.widget.GridLayoutManager
-import androidx.recyclerview.widget.ItemTouchHelper
-import androidx.recyclerview.widget.RecyclerView
import com.afollestad.materialdialogs.utils.MDUtil.getStringArray
+import com.deniscerri.ytdl.MainActivity
import com.deniscerri.ytdl.R
import com.deniscerri.ytdl.database.models.CommandTemplate
import com.deniscerri.ytdl.database.models.DownloadItem
import com.deniscerri.ytdl.database.models.Format
import com.deniscerri.ytdl.database.models.HistoryItem
-import com.deniscerri.ytdl.database.models.RestoreAppDataItem
import com.deniscerri.ytdl.database.models.TemplateShortcut
import com.deniscerri.ytdl.database.repository.DownloadRepository
import com.deniscerri.ytdl.database.viewmodel.CommandTemplateViewModel
import com.deniscerri.ytdl.database.viewmodel.DownloadViewModel
-import com.deniscerri.ytdl.database.viewmodel.HistoryViewModel
-import com.deniscerri.ytdl.database.viewmodel.ResultViewModel
-import com.deniscerri.ytdl.ui.adapter.AlreadyExistsAdapter
-import com.deniscerri.ytdl.ui.downloadcard.ConfigureDownloadBottomSheetDialog
import com.deniscerri.ytdl.ui.downloadcard.VideoCutListener
-import com.deniscerri.ytdl.util.Extensions.enableFastScroll
import com.deniscerri.ytdl.util.Extensions.enableTextHighlight
import com.deniscerri.ytdl.util.Extensions.getMediaDuration
import com.deniscerri.ytdl.util.Extensions.toStringDuration
@@ -75,7 +62,6 @@ import com.deniscerri.ytdl.util.extractors.YTDLPUtil
import com.google.android.material.badge.BadgeDrawable
import com.google.android.material.badge.BadgeUtils
import com.google.android.material.badge.ExperimentalBadgeUtils
-import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.button.MaterialButton
@@ -91,21 +77,18 @@ import com.google.android.material.materialswitch.MaterialSwitch
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.textfield.TextInputLayout
import com.google.android.material.textfield.TextInputLayout.END_ICON_NONE
-import com.google.android.material.textfield.TextInputLayout.EndIconMode
import com.google.android.material.timepicker.MaterialTimePicker
import com.google.android.material.timepicker.TimeFormat
+import com.yausername.youtubedl_android.YoutubeDL
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
-import kotlinx.serialization.json.JsonObject
import java.io.File
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
-import java.util.Queue
-import java.util.function.Predicate
object UiUtil {
@@ -1588,9 +1571,12 @@ object UiUtil {
fun handleNoResults(context: Activity, message: String, continueAnyway: Boolean = false, continued: () -> Unit, closed: () -> Unit) {
+ val updateYTDLP = "${context.getString(R.string.update_ytdl)}"
+ .parseAsHtml(HtmlCompat.FROM_HTML_MODE_COMPACT)
+
val errDialog = MaterialAlertDialogBuilder(context)
.setTitle(R.string.no_results)
- .setMessage(message)
+ .setMessage(message + "\n\n" + updateYTDLP)
errDialog.setPositiveButton(R.string.copy_log) { d:DialogInterface?, _:Int ->
val clipboard: ClipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
@@ -1608,7 +1594,23 @@ object UiUtil {
closed()
}
- errDialog.show()
+ val dialog = errDialog.show()
+ dialog.findViewById(android.R.id.message)?.setOnClickListener {
+ dialog.cancel()
+ CoroutineScope(Dispatchers.IO).launch {
+ val res = UpdateUtil(context).updateYoutubeDL()
+ if (res == YoutubeDL.UpdateStatus.DONE) {
+ val version = YoutubeDL.getInstance().version(context)
+ withContext(Dispatchers.Main){
+ Toast.makeText(context, context.getString(R.string.ytld_update_success) + " [${version}]", Toast.LENGTH_LONG).show()
+ }
+ }else {
+ withContext(Dispatchers.Main) {
+ Toast.makeText(context, context.getString(R.string.you_are_in_latest_version), Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ }
}
fun showErrorDialog(context: Context, it: String){
diff --git a/keystore.properties b/keystore.properties
new file mode 100644
index 00000000..c684a2a0
--- /dev/null
+++ b/keystore.properties
@@ -0,0 +1,8 @@
+## This file must *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+#Wed Nov 23 15:28:54 CET 2022
+signingConfig.storeFile=C\:/Users/denis/androidkeystore/androidstudio.jks