diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index 5740639a..dd5b3b55 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -320,7 +320,7 @@
@@ -330,7 +330,7 @@
diff --git a/app/build.gradle b/app/build.gradle
index 61ed0475..2eec33c0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -120,7 +120,7 @@ dependencies {
implementation "androidx.appcompat:appcompat:$appCompatVer"
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
- implementation 'com.google.android.material:material:1.8.0'
+ implementation 'com.google.android.material:material:1.7.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.core:core:1.9.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
diff --git a/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json b/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json
index 5a6a700d..3c32d030 100644
--- a/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json
+++ b/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json
@@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 1,
- "identityHash": "9197d2ce894417365b9012ace8bcf284",
+ "identityHash": "ae6989cdbd101bb25c22cc38d8ec456d",
"entities": [
{
"tableName": "results",
@@ -160,7 +160,7 @@
},
{
"tableName": "downloads",
- "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `thumb` TEXT NOT NULL, `duration` TEXT NOT NULL, `type` TEXT NOT NULL, `format` TEXT NOT NULL, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `downloadSize` TEXT NOT NULL, `playlistTitle` TEXT NOT NULL, `embedSubs` INTEGER NOT NULL, `addChapters` INTEGER NOT NULL, `SaveThumb` INTEGER NOT NULL, `status` TEXT NOT NULL DEFAULT 'Queued', `downloadStartTime` INTEGER NOT NULL DEFAULT 0)",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `thumb` TEXT NOT NULL, `duration` TEXT NOT NULL, `type` TEXT NOT NULL, `format` TEXT NOT NULL, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `downloadSize` TEXT NOT NULL, `playlistTitle` TEXT NOT NULL, `audioPreferences` TEXT NOT NULL, `videoPreferences` TEXT NOT NULL, `customFileNameTemplate` TEXT NOT NULL, `SaveThumb` INTEGER NOT NULL, `status` TEXT NOT NULL DEFAULT 'Queued', `downloadStartTime` INTEGER NOT NULL DEFAULT 0)",
"fields": [
{
"fieldPath": "id",
@@ -235,15 +235,21 @@
"notNull": true
},
{
- "fieldPath": "embedSubs",
- "columnName": "embedSubs",
- "affinity": "INTEGER",
+ "fieldPath": "audioPreferences",
+ "columnName": "audioPreferences",
+ "affinity": "TEXT",
"notNull": true
},
{
- "fieldPath": "addChapters",
- "columnName": "addChapters",
- "affinity": "INTEGER",
+ "fieldPath": "videoPreferences",
+ "columnName": "videoPreferences",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "customFileNameTemplate",
+ "columnName": "customFileNameTemplate",
+ "affinity": "TEXT",
"notNull": true
},
{
@@ -312,7 +318,7 @@
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
- "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '9197d2ce894417365b9012ace8bcf284')"
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ae6989cdbd101bb25c22cc38d8ec456d')"
]
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt
index 302079f1..01ecc909 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt
@@ -1,7 +1,9 @@
package com.deniscerri.ytdlnis.database
import androidx.room.TypeConverter
+import com.deniscerri.ytdlnis.database.models.AudioPreferences
import com.deniscerri.ytdlnis.database.models.Format
+import com.deniscerri.ytdlnis.database.models.VideoPreferences
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
@@ -39,4 +41,14 @@ class Converters {
else -> DownloadViewModel.Type.command
}
}
+
+ @TypeConverter
+ fun audioPreferencesToString(audioPreferences: AudioPreferences): String = Gson().toJson(audioPreferences)
+ @TypeConverter
+ fun stringToAudioPreferences(string: String): AudioPreferences = Gson().fromJson(string, AudioPreferences::class.java)
+
+ @TypeConverter
+ fun videoPreferencesToString(videoPreferences: VideoPreferences): String = Gson().toJson(videoPreferences)
+ @TypeConverter
+ fun stringToVideoPreferences(string: String): VideoPreferences = Gson().fromJson(string, VideoPreferences::class.java)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/CommandTemplateDao.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/CommandTemplateDao.kt
index 4331ce44..0cfb88a9 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/CommandTemplateDao.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/CommandTemplateDao.kt
@@ -16,6 +16,9 @@ interface CommandTemplateDao {
@Query("SELECT * FROM commandTemplates WHERE id=:id LIMIT 1")
fun getTemplate(id: Long) : CommandTemplate
+ @Query("SELECT * FROM commandTemplates LIMIT 1")
+ fun getFirst() : CommandTemplate
+
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(item: CommandTemplate)
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/AudioPreferences.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/AudioPreferences.kt
new file mode 100644
index 00000000..4d1713ac
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/AudioPreferences.kt
@@ -0,0 +1,5 @@
+package com.deniscerri.ytdlnis.database.models
+
+data class AudioPreferences(
+ var embedThumb: Boolean = true,
+)
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
index 229b6c37..a378c1dc 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
@@ -21,8 +21,9 @@ data class DownloadItem(
val website: String,
val downloadSize: String,
val playlistTitle: String,
- var embedSubs: Boolean,
- var addChapters: Boolean,
+ val audioPreferences : AudioPreferences,
+ val videoPreferences: VideoPreferences,
+ var customFileNameTemplate: String,
var SaveThumb: Boolean,
@ColumnInfo(defaultValue = "Queued")
var status: String,
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/VideoPreferences.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/VideoPreferences.kt
new file mode 100644
index 00000000..727a6c3b
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/VideoPreferences.kt
@@ -0,0 +1,6 @@
+package com.deniscerri.ytdlnis.database.models
+
+data class VideoPreferences (
+ var embedSubs: Boolean = true,
+ var addChapters: Boolean = true,
+)
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 7d8b9912..9183b6b1 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
@@ -15,9 +15,8 @@ import androidx.work.WorkManager
import com.deniscerri.ytdlnis.App
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.DBManager
-import com.deniscerri.ytdlnis.database.models.DownloadItem
-import com.deniscerri.ytdlnis.database.models.Format
-import com.deniscerri.ytdlnis.database.models.ResultItem
+import com.deniscerri.ytdlnis.database.dao.CommandTemplateDao
+import com.deniscerri.ytdlnis.database.models.*
import com.deniscerri.ytdlnis.database.repository.DownloadRepository
import com.deniscerri.ytdlnis.work.DownloadWorker
import com.google.gson.Gson
@@ -29,6 +28,7 @@ import java.util.concurrent.TimeUnit
class DownloadViewModel(application: Application) : AndroidViewModel(application) {
private val repository : DownloadRepository
private val sharedPreferences: SharedPreferences
+ private val commandTemplateDao: CommandTemplateDao
val allDownloads : LiveData>
val queuedDownloads : LiveData>
val activeDownloads : LiveData>
@@ -45,6 +45,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
repository = DownloadRepository(dao)
sharedPreferences =
getApplication().getSharedPreferences("root_preferences", Activity.MODE_PRIVATE)
+ commandTemplateDao = DBManager.getInstance(application).commandTemplateDao
allDownloads = repository.allDownloads
queuedDownloads = repository.queuedDownloads
@@ -82,9 +83,14 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
}
fun createDownloadItemFromResult(resultItem: ResultItem, type: Type) : DownloadItem {
- val embedSubs = sharedPreferences.getBoolean("embed_subtitles", false)
+ val embedSubs = sharedPreferences.getBoolean("embed_subtitles", false)
val addChapters = sharedPreferences.getBoolean("add_chapters", false)
val saveThumb = sharedPreferences.getBoolean("write_thumbnail", false)
+ val embedThumb = sharedPreferences.getBoolean("embed_thumbnail", false)
+ val customFileNameTemplate = sharedPreferences.getString("file_name_template", "%(uploader)s - %(title)s")
+
+ val audioPreferences = AudioPreferences(embedThumb)
+ val videoPreferences = VideoPreferences(embedSubs, addChapters)
return DownloadItem(0,
resultItem.url,
@@ -94,7 +100,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
resultItem.duration,
type,
getFormat(resultItem, type),
- "", resultItem.website, "", resultItem.playlistTitle, embedSubs, addChapters, saveThumb, DownloadRepository.Status.Processing.toString(), 0
+ "", resultItem.website, "", resultItem.playlistTitle, audioPreferences, videoPreferences,customFileNameTemplate!!, saveThumb, DownloadRepository.Status.Processing.toString(), 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 b120bac1..999a7921 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
@@ -25,6 +25,7 @@ import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel.Type
import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding
import com.deniscerri.ytdlnis.util.FileUtil
+import com.google.android.material.chip.Chip
import com.google.android.material.textfield.TextInputLayout
import kotlinx.coroutines.launch
@@ -190,6 +191,12 @@ class DownloadAudioFragment(private var resultItem: ResultItem) : Fragment() {
downloadItem.format.container = containers[index]
}
+ val embedThumb = view.findViewById(R.id.embed_thumb)
+ embedThumb!!.isChecked = downloadItem.audioPreferences.embedThumb
+ embedThumb.setOnClickListener {
+ downloadItem.audioPreferences.embedThumb = embedThumb.isChecked
+ }
+
}catch (e : Exception){
e.printStackTrace()
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadCommandFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadCommandFragment.kt
index 2149b14d..c19f4a00 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadCommandFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadCommandFragment.kt
@@ -121,24 +121,24 @@ class DownloadCommandFragment(private val resultItem: ResultItem) : Fragment() {
commandPathResultLauncher.launch(intent)
}
-
- val embedSubs = view.findViewById(R.id.embed_subtitles)
- embedSubs!!.isChecked = embedSubs.isChecked
- embedSubs.setOnClickListener {
- downloadItem.embedSubs = embedSubs.isChecked
- }
-
- val addChapters = view.findViewById(R.id.add_chapters)
- addChapters!!.isChecked = addChapters.isChecked
- addChapters.setOnClickListener{
- downloadItem.addChapters = addChapters.isChecked
- }
-
- val saveThumbnail = view.findViewById(R.id.save_thumbnail)
- saveThumbnail!!.isChecked = saveThumbnail.isChecked
- saveThumbnail.setOnClickListener {
- downloadItem.SaveThumb = saveThumbnail.isChecked
- }
+//
+// val embedSubs = view.findViewById(R.id.embed_subtitles)
+// embedSubs!!.isChecked = embedSubs.isChecked
+// embedSubs.setOnClickListener {
+// downloadItem.embedSubs = embedSubs.isChecked
+// }
+//
+// val addChapters = view.findViewById(R.id.add_chapters)
+// addChapters!!.isChecked = addChapters.isChecked
+// addChapters.setOnClickListener{
+// downloadItem.addChapters = addChapters.isChecked
+// }
+//
+// val saveThumbnail = view.findViewById(R.id.save_thumbnail)
+// saveThumbnail!!.isChecked = saveThumbnail.isChecked
+// saveThumbnail.setOnClickListener {
+// downloadItem.SaveThumb = saveThumbnail.isChecked
+// }
} catch (e: Exception) {
e.printStackTrace()
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 f3dd5dd7..f6a2c767 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
@@ -174,15 +174,15 @@ class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() {
val embedSubs = view.findViewById(R.id.embed_subtitles)
- embedSubs!!.isChecked = downloadItem.embedSubs
+ embedSubs!!.isChecked = downloadItem.videoPreferences.embedSubs
embedSubs.setOnClickListener {
- downloadItem.embedSubs = embedSubs.isChecked
+ downloadItem.videoPreferences.embedSubs = embedSubs.isChecked
}
val addChapters = view.findViewById(R.id.add_chapters)
- addChapters!!.isChecked = downloadItem.addChapters
+ addChapters!!.isChecked = downloadItem.videoPreferences.addChapters
addChapters.setOnClickListener{
- downloadItem.addChapters = addChapters.isChecked
+ downloadItem.videoPreferences.addChapters = addChapters.isChecked
}
val saveThumbnail = view.findViewById(R.id.save_thumbnail)
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 9a827700..01d0383b 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
@@ -24,6 +24,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
private var limitRate: EditTextPreference? = null
private var aria2: SwitchPreferenceCompat? = null
private var sponsorblockFilters: MultiSelectListPreference? = null
+ private var filenameTemplate: EditTextPreference? = null
private var embedSubtitles: SwitchPreferenceCompat? = null
private var embedThumbnail: SwitchPreferenceCompat? = null
private var addChapters: SwitchPreferenceCompat? = null
@@ -62,6 +63,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
aria2 = findPreference("aria2")
sponsorblockFilters = findPreference("sponsorblock_filter")
embedSubtitles = findPreference("embed_subtitles")
+ filenameTemplate = findPreference("file_name_template")
embedThumbnail = findPreference("embed_thumbnail")
addChapters = findPreference("add_chapters")
writeThumbnail = findPreference("write_thumbnail")
@@ -91,6 +93,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
editor.putString("limit_rate", limitRate!!.text)
editor.putBoolean("aria2", aria2!!.isChecked)
editor.putStringSet("sponsorblock_filters", sponsorblockFilters!!.values)
+ editor.putString("file_name_template", filenameTemplate!!.text)
editor.putBoolean("embed_subtitles", embedSubtitles!!.isChecked)
editor.putBoolean("embed_thumbnail", embedThumbnail!!.isChecked)
editor.putBoolean("add_chapters", addChapters!!.isChecked)
@@ -192,6 +195,12 @@ class SettingsFragment : PreferenceFragmentCompat() {
editor.apply()
true
}
+ filenameTemplate!!.onPreferenceChangeListener =
+ Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any ->
+ editor.putString("file_name_template", newValue.toString())
+ editor.apply()
+ true
+ }
embedSubtitles!!.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any ->
val embed = newValue as Boolean
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
index 1bcd0f7c..1b1b2f1b 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
@@ -525,16 +525,17 @@ class InfoUtil(context: Context) {
}
fun getSearchSuggestions(query: String): ArrayList {
- val url = invidousURL + "search/suggestions?q=" + query
- val res = genericRequest(url)
+ val url = "https://suggestqueries.google.com/complete/search?client=youtube&ds=yt&client=firefox&q=$query"
+ // invidousURL + "search/suggestions?q=" + query
+ val res = genericArrayRequest(url)
if (res.length() == 0) return ArrayList()
val suggestionList = ArrayList()
try {
- val suggestions = res.getJSONArray("suggestions")
- for (i in 0 until suggestions.length()) {
- suggestionList.add(suggestions.getString(i))
+ for (i in 0 until res.getJSONArray(1).length()) {
+ suggestionList.add(res.getJSONArray(1).getString(i))
}
} catch (ignored: Exception) {
+ ignored.printStackTrace()
}
return suggestionList
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/UpdateUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/UpdateUtil.kt
index 8526bdb0..00aa754d 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/UpdateUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/UpdateUtil.kt
@@ -57,7 +57,9 @@ class UpdateUtil(var context: Context) {
} catch (ignored: JSONException) {
return false
}
- if (version == "v" + BuildConfig.VERSION_NAME) {
+ val versionNameInt = version.split("v")[1].replace(".","").toInt()
+ val currentVersionNameInt = BuildConfig.VERSION_NAME.replace(".","").toInt()
+ if (currentVersionNameInt > versionNameInt) {
return false
}
val updateDialog = MaterialAlertDialogBuilder(context)
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 2ea1d99a..b37751dc 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt
@@ -90,8 +90,7 @@ class DownloadWorker(
}
val limitRate = sharedPreferences.getString("limit_rate", "")
if (limitRate != "") request.addOption("-r", limitRate!!)
- val writeThumbnail = sharedPreferences.getBoolean("write_thumbnail", false)
- if (writeThumbnail) {
+ if (downloadItem.SaveThumb) {
request.addOption("--write-thumbnail")
request.addOption("--convert-thumbnails", "png")
}
@@ -108,6 +107,8 @@ class DownloadWorker(
if (downloadItem.author.isNotEmpty()){
request.addCommands(listOf("--replace-in-metadata","uploader",".*.",downloadItem.author));
}
+ if (downloadItem.customFileNameTemplate.isEmpty()) downloadItem.customFileNameTemplate = "%(uploader)s - %(title)s"
+
when(type){
DownloadViewModel.Type.audio -> {
@@ -124,8 +125,7 @@ class DownloadWorker(
}
request.addOption("--embed-metadata")
- val embedThumb = sharedPreferences.getBoolean("embed_thumbnail", false)
- if (embedThumb) {
+ if (downloadItem.audioPreferences.embedThumb) {
request.addOption("--embed-thumbnail")
request.addOption("--convert-thumbnails", "png")
try {
@@ -137,8 +137,6 @@ class DownloadWorker(
} catch (ignored: Exception) {}
}
request.addOption("--parse-metadata", "%(release_year,upload_date)s:%(meta_date)s")
- request.addCommands(listOf("--replace-in-metadata", "title", ".*.", downloadItem.title))
- request.addCommands(listOf("--replace-in-metadata", "uploader", ".*.", downloadItem.author))
if (downloadItem.playlistTitle.isNotEmpty()) {
request.addOption("--parse-metadata", "%(album,playlist,title)s:%(meta_album)s")
@@ -146,15 +144,13 @@ class DownloadWorker(
} else {
request.addOption("--parse-metadata", "%(album,title)s:%(meta_album)s")
}
- request.addOption("-o", tempFileDir.absolutePath + "/%(uploader)s - %(title)s.%(ext)s")
+ request.addOption("-o", tempFileDir.absolutePath + "/${downloadItem.customFileNameTemplate}.%(ext)s")
}
DownloadViewModel.Type.video -> {
- val addChapters = sharedPreferences.getBoolean("add_chapters", false)
- if (addChapters) {
+ if (downloadItem.videoPreferences.addChapters) {
request.addOption("--sponsorblock-mark", "all")
}
- val embedSubs = sharedPreferences.getBoolean("embed_subtitles", false)
- if (embedSubs) {
+ if (downloadItem.videoPreferences.embedSubs) {
request.addOption("--embed-subs", "")
}
val defaultFormats = context.resources.getStringArray(R.array.video_formats)
@@ -180,7 +176,7 @@ class DownloadWorker(
request.addOption("--embed-thumbnail")
}
}
- request.addOption("-o", tempFileDir.absolutePath + "/%(uploader)s - %(title)s.%(ext)s")
+ request.addOption("-o", tempFileDir.absolutePath + "/${downloadItem.customFileNameTemplate}.%(ext)s")
}
DownloadViewModel.Type.command -> {
val commandRegex = "\"([^\"]*)\"|(\\S+)"
diff --git a/app/src/main/res/drawable/ic_textformat.xml b/app/src/main/res/drawable/ic_textformat.xml
new file mode 100644
index 00000000..dd678a8d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_textformat.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_download_audio.xml b/app/src/main/res/layout/fragment_download_audio.xml
index 3bdd7ea3..5c38a28b 100644
--- a/app/src/main/res/layout/fragment_download_audio.xml
+++ b/app/src/main/res/layout/fragment_download_audio.xml
@@ -156,7 +156,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0dbdd857..bcd0e529 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -77,7 +77,6 @@
Remove non-music parts
Strips non-music parts of audio files with SponsorBlock
Processing
- Subtitles in Videos
Adds subtitles in the video
Thumbnail Covers
Uses the thumbnail as cover art
@@ -167,4 +166,6 @@
Commands
Date added
Download Nightly Version of yt-dlp
+ Adjust Audio
+ Filename Template
\ 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 022eee8c..914edbfe 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -63,7 +63,6 @@
app:key="concurrent_downloads"
app:min="1"
app:showSeekBarValue="true"
- android:dependency="aria2"
app:summary="@string/concurrent_downloads_summary"
app:title="@string/concurrent_downloads" />
@@ -95,12 +94,18 @@
app:summary="@string/select_sponsorblock_filtering"
app:title="SponsorBlock" />
+
+
+ app:title="@string/embed_subtitles" />