From 1328e7771151319369663d07ab81d6ae3c020321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C3=87erri?= <64997243+deniscerri@users.noreply.github.com> Date: Sun, 26 Feb 2023 10:30:27 +0100 Subject: [PATCH] made downloads write logs based on user preference --- .../com/deniscerri/ytdlnis/ui/HomeFragment.kt | 1 + .../ytdlnis/ui/settings/SettingsFragment.kt | 10 +++++++ .../com/deniscerri/ytdlnis/util/UiUtil.kt | 1 - .../deniscerri/ytdlnis/work/DownloadWorker.kt | 29 ++++++++++++++----- app/src/main/res/drawable/ic_money.xml | 2 +- .../res/layout/search_suggestion_item.xml | 2 +- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/root_preferences.xml | 7 +++++ 8 files changed, 44 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt index 1cab248c..760588bb 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt @@ -317,6 +317,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi } catch (ignored: Exception) {} } else if (itemId == R.id.delete_search){ resultViewModel.deleteAllSearchQueryHistory() + searchSuggestionsLinearLayout!!.removeAllViews() } true } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsFragment.kt index bb255ac7..6cc81f33 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/settings/SettingsFragment.kt @@ -29,6 +29,7 @@ class SettingsFragment : PreferenceFragmentCompat() { private var concurrentDownloads: SeekBarPreference? = null private var limitRate: EditTextPreference? = null private var aria2: SwitchPreferenceCompat? = null + private var logDownloads: SwitchPreferenceCompat? = null private var sponsorblockFilters: MultiSelectListPreference? = null private var filenameTemplate: EditTextPreference? = null private var mtime: SwitchPreferenceCompat? = null @@ -69,6 +70,7 @@ class SettingsFragment : PreferenceFragmentCompat() { concurrentDownloads = findPreference("concurrent_downloads") limitRate = findPreference("limit_rate") aria2 = findPreference("aria2") + logDownloads = findPreference("log_downloads") sponsorblockFilters = findPreference("sponsorblock_filter") mtime = findPreference("mtime") embedSubtitles = findPreference("embed_subtitles") @@ -115,6 +117,7 @@ class SettingsFragment : PreferenceFragmentCompat() { editor.putInt("concurrent_downloads", concurrentDownloads!!.value) editor.putString("limit_rate", limitRate!!.text) editor.putBoolean("aria2", aria2!!.isChecked) + editor.putBoolean("log_downloads", logDownloads!!.isChecked) editor.putStringSet("sponsorblock_filters", sponsorblockFilters!!.values) editor.putString("file_name_template", filenameTemplate!!.text) editor.putBoolean("mtime", mtime!!.isChecked) @@ -223,6 +226,13 @@ class SettingsFragment : PreferenceFragmentCompat() { editor.apply() true } + logDownloads!!.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any -> + val enable = newValue as Boolean + editor.putBoolean("log_downloads", enable) + editor.apply() + true + } sponsorblockFilters!!.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any? -> sponsorblockFilters!!.values = newValue as Set? diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/UiUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/UiUtil.kt index 75a4fedb..1cbb8321 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/util/UiUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/util/UiUtil.kt @@ -9,7 +9,6 @@ import com.deniscerri.ytdlnis.database.models.Format class UiUtil(private val fileUtil: FileUtil) { fun populateFormatCard(formatCard : ConstraintLayout, chosenFormat: Format){ - Log.e("aa", chosenFormat.toString()) formatCard.findViewById(R.id.container).text = chosenFormat.container.uppercase() formatCard.findViewById(R.id.format_note).text = chosenFormat.format_note.uppercase() formatCard.findViewById(R.id.format_id).text = "id: ${chosenFormat.format_id}" 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 ad7a5350..66ff0f82 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt @@ -12,7 +12,6 @@ import androidx.work.ForegroundInfo import androidx.work.Worker import androidx.work.WorkerParameters import androidx.work.workDataOf -import com.deniscerri.ytdlnis.App import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.database.DBManager @@ -67,13 +66,13 @@ class DownloadWorker( val url = downloadItem.url - var request = YoutubeDLRequest(url) + val request = YoutubeDLRequest(url) val type = downloadItem.type val downloadLocation = downloadItem.downloadPath - var tempFolder = StringBuilder(context.cacheDir.absolutePath + """/${downloadItem.title}##${downloadItem.type}""") + val tempFolder = StringBuilder(context.cacheDir.absolutePath + """/${downloadItem.title}##${downloadItem.type}""") tempFolder.append("##${downloadItem.format.format_id}") - var tempFileDir = File(tempFolder.toString()) + val tempFileDir = File(tempFolder.toString()) tempFileDir.delete() tempFileDir.mkdir() @@ -104,10 +103,10 @@ class DownloadWorker( } if(downloadItem.title.isNotEmpty()){ - request.addCommands(listOf("--replace-in-metadata","title",".*.",downloadItem.title)); + request.addCommands(listOf("--replace-in-metadata","title",".*.",downloadItem.title)) } if (downloadItem.author.isNotEmpty()){ - request.addCommands(listOf("--replace-in-metadata","uploader",".*.",downloadItem.author)); + request.addCommands(listOf("--replace-in-metadata","uploader",".*.",downloadItem.author)) } if (downloadItem.customFileNameTemplate.isEmpty()) downloadItem.customFileNameTemplate = "%(uploader)s - %(title)s" @@ -166,7 +165,7 @@ class DownloadWorker( if (videoFormatID == "Best Quality") videoFormatID = "bestvideo" else if (videoFormatID == "Worst Quality") videoFormatID = "worst" else if (defaultFormats.contains(videoFormatID)) videoFormatID = "bestvideo[height<="+videoFormatID.substring(0, videoFormatID.length -1)+"]" - formatArgument = videoFormatID + "+bestaudio/best/$videoFormatID" + formatArgument = "$videoFormatID+bestaudio/best/$videoFormatID" } Log.e(TAG, formatArgument) request.addOption("-f", formatArgument) @@ -198,6 +197,19 @@ class DownloadWorker( } runCatching { + val logDownloads = sharedPreferences.getBoolean("log_downloads", false) + val logFolder = File(context.filesDir.absolutePath + "/logs") + val logFile = File(context.filesDir.absolutePath + """/logs/${downloadItem.id} - ${downloadItem.title}##${downloadItem.type}##${downloadItem.format.format_id}.log""") + if (logDownloads){ + logFolder.mkdir() + logFile.createNewFile() + logFile.writeText("Downloading:\n" + + "URL: ${downloadItem.url}\n" + + "Type: ${downloadItem.type}\n" + + "Format: ${downloadItem.format}\n\n") + } + + YoutubeDL.getInstance().execute(request, downloadItem.id.toString()){ progress, _, line -> setProgressAsync(workDataOf("progress" to progress.toInt())) setProgressAsync(workDataOf("output" to line)) @@ -207,6 +219,9 @@ class DownloadWorker( line, progress.toInt(), 0, title, NotificationUtil.DOWNLOAD_SERVICE_CHANNEL_ID ) + if (logDownloads){ + logFile.appendText("${line}\n") + } } }.onSuccess { //move file from internal to set download directory diff --git a/app/src/main/res/drawable/ic_money.xml b/app/src/main/res/drawable/ic_money.xml index 36601422..0614afd9 100644 --- a/app/src/main/res/drawable/ic_money.xml +++ b/app/src/main/res/drawable/ic_money.xml @@ -1,5 +1,5 @@ - + diff --git a/app/src/main/res/layout/search_suggestion_item.xml b/app/src/main/res/layout/search_suggestion_item.xml index 062e83f0..1974b505 100644 --- a/app/src/main/res/layout/search_suggestion_item.xml +++ b/app/src/main/res/layout/search_suggestion_item.xml @@ -9,7 +9,7 @@ android:id="@+id/downloads_relative_layout" android:layout_width="0dp" android:layout_height="0dp" - app:layout_constraintDimensionRatio="H,8:1" + app:layout_constraintDimensionRatio="H,6:1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 20a32544..978ebc1c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -178,4 +178,6 @@ Set the HTTP Last-Modified header as last modified time Update Formats Error updating formats! + Log Downloads + Create a log file for each download \ No newline at end of file diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 7c914da5..b81b3f2c 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -88,6 +88,13 @@ android:disableDependentsState="true" app:title="Aria2" /> + +