added preferred audio format id

pull/196/head
deniscerri 3 years ago
parent 259b3b27dd
commit 7131e3e1e8
No known key found for this signature in database
GPG Key ID: 95C43D517D830350

@ -12,6 +12,7 @@ import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.provider.Settings
import android.util.Log
import android.view.View
@ -67,6 +68,7 @@ class MainActivity : BaseActivity() {
private lateinit var navigationView: View
private lateinit var navHostFragment : NavHostFragment
private lateinit var navController : NavController
private lateinit var sharedPreferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -105,13 +107,18 @@ class MainActivity : BaseActivity() {
}
}
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
val graph = navController.navInflater.inflate(R.navigation.nav_graph)
graph.setStartDestination(R.id.homeFragment)
when(sharedPreferences.getString("start_destination", "")) {
"History" -> graph.setStartDestination(R.id.historyFragment)
"More" -> if (navigationView is NavigationBarView) graph.setStartDestination(R.id.moreFragment)
}
navController.graph = graph
if (navigationView is NavigationBarView){
(navigationView as NavigationBarView).selectedItemId = graph.startDestinationId
(navigationView as NavigationBarView).setupWithNavController(navController)
(navigationView as NavigationBarView).setOnItemReselectedListener {
when (it.itemId) {
@ -142,7 +149,6 @@ class MainActivity : BaseActivity() {
window.navigationBarColor = SurfaceColors.SURFACE_2.getColor(this)
}
if (navigationView is NavigationView){
(navigationView as NavigationView).setCheckedItem(graph.startDestinationId)
(navigationView as NavigationView).setupWithNavController(navController)
//terminate button
(navigationView as NavigationView).menu.getItem(7).setOnMenuItemClickListener {
@ -194,13 +200,14 @@ class MainActivity : BaseActivity() {
}
}
when(sharedPreferences.getString("start_destination", "")) {
"History" -> navController.navigate(R.id.historyFragment)
"Queue" -> navController.navigate(R.id.downloadQueueMainFragment)
"More" -> if (navigationView is NavigationBarView) graph.setStartDestination(R.id.moreFragment)
}
}
private fun View.visibilityChanged(action: (View) -> Unit) {
this.viewTreeObserver.addOnGlobalLayoutListener {
val newVis: Int = this.visibility

@ -64,6 +64,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
private val videoQualityPreference: String
private val formatIDPreference: String
private val audioFormatIDPreference: String
private val resources : Resources
enum class Type {
audio, video, command
@ -86,6 +87,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
videoQualityPreference = sharedPreferences.getString("video_quality", application.getString(R.string.best_quality)).toString()
formatIDPreference = sharedPreferences.getString("format_id", "").toString()
audioFormatIDPreference = sharedPreferences.getString("format_id_audio", "").toString()
val confTmp = Configuration(application.resources.configuration)
confTmp.locale = Locale(sharedPreferences.getString("app_language", "en")!!)
@ -165,7 +167,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
val sponsorblock = sharedPreferences.getStringSet("sponsorblock_filters", emptySet())
val audioPreferences = AudioPreferences(embedThumb, false, ArrayList(sponsorblock!!))
val videoPreferences = VideoPreferences(embedSubs, addChapters, false, ArrayList(sponsorblock), saveSubs)
val videoPreferences = VideoPreferences(embedSubs, addChapters, false, ArrayList(sponsorblock), saveSubs, audioFormatIDs = ArrayList(resultItem.formats.filter { it.format_id == audioFormatIDPreference }.map { it.format_id }))
return DownloadItem(0,
resultItem.url,
@ -312,7 +314,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
return cloneFormat (
try {
try{
formats.first { it.format_note.contains("audio", ignoreCase = true) && it.format_id == formatIDPreference }
formats.first { it.format_note.contains("audio", ignoreCase = true) && it.format_id == audioFormatIDPreference }
}catch (e: Exception){
formats.last { it.format_note.contains("audio", ignoreCase = true) }
}

@ -118,9 +118,7 @@ class ShareActivity : BaseActivity() {
val inputQuery = intent.getStringExtra(Intent.EXTRA_TEXT)!!
lifecycleScope.launch {
try {
val result = withContext(Dispatchers.IO){
resultViewModel.getItemByURL(inputQuery)
}
val result = resultViewModel.getItemByURL(inputQuery)
loadingBottomSheet.dismiss()
showDownloadSheet(result)
}catch (e: Exception){
@ -130,20 +128,18 @@ class ShareActivity : BaseActivity() {
loadingBottomSheet.dismiss()
showDownloadSheet(result)
}else{
lifecycleScope.launch {
val res = withContext(Dispatchers.IO){
resultViewModel.parseQuery(inputQuery, true)
}
if (res.isEmpty()) {
Toast.makeText(this@ShareActivity, "No Results Found!", Toast.LENGTH_SHORT).show()
exit()
val res = withContext(Dispatchers.IO){
resultViewModel.parseQuery(inputQuery, true)
}
if (res.isEmpty()) {
Toast.makeText(this@ShareActivity, "No Results Found!", Toast.LENGTH_SHORT).show()
exit()
}else{
loadingBottomSheet.dismiss()
if (res.size == 1){
showDownloadSheet(res[0]!!)
}else{
loadingBottomSheet.dismiss()
if (res.size == 1){
showDownloadSheet(res[0]!!)
}else{
showSelectPlaylistItems(res.toList())
}
showSelectPlaylistItems(res.toList())
}
}
}

@ -176,7 +176,9 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr
)
)
downloadItem.container = if (containerPreference == getString(R.string.defaultValue)) "" else containerPreference!!
if (currentDownloadItem == null || !containers.contains(downloadItem.container)){
downloadItem.container = if (containerPreference == getString(R.string.defaultValue)) "" else containerPreference!!
}
containerAutoCompleteTextView.setText(downloadItem.container.ifEmpty { getString(R.string.defaultValue) }, false)
(container!!.editText as AutoCompleteTextView?)!!.onItemClickListener =

@ -180,7 +180,9 @@ class DownloadVideoFragment(private val resultItem: ResultItem, private var curr
containers
)
)
downloadItem.container = if (containerPreference == getString(R.string.defaultValue)) "" else containerPreference!!
if (currentDownloadItem == null || !containers.contains(downloadItem.container)){
downloadItem.container = if (containerPreference == getString(R.string.defaultValue)) "" else containerPreference!!
}
containerAutoCompleteTextView!!.setText(
downloadItem.container.ifEmpty { getString(R.string.defaultValue) },
false)

@ -541,7 +541,7 @@ class MainSettingsFragment : PreferenceFragmentCompat() {
val intent: Intent? = requireContext().packageManager
.getLaunchIntentForPackage(requireContext().packageName)
intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
startActivity(intent!!)
if(json.has("settings")){
AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(preferences.getString("app_language", "en")))
}

@ -9,6 +9,15 @@ class ProcessingSettingsFragment : BaseSettingsFragment() {
override val title: Int = R.string.processing
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.processing_preferences, rootKey)
val preferredFormatID : EditTextPreference? = findPreference("format_id")
val preferredFormatIDAudio : EditTextPreference? = findPreference("format_id_audio")
preferredFormatID?.title = "${getString(R.string.preferred_format_id)} [${getString(R.string.video)}]"
preferredFormatID?.dialogTitle = "${getString(R.string.file_name_template)} [${getString(R.string.video)}]"
preferredFormatIDAudio?.title = "${getString(R.string.preferred_format_id)} [${getString(R.string.audio)}]"
preferredFormatIDAudio?.dialogTitle = "${getString(R.string.file_name_template)} [${getString(R.string.audio)}]"
}
}

@ -69,7 +69,7 @@ class DownloadWorker(
CoroutineScope(Dispatchers.IO).launch {
//update item if its incomplete
updateDownloadItem(downloadItem, infoUtil, dao, resultDao, false, notificationUtil)
updateDownloadItem(downloadItem, infoUtil, dao, resultDao)
}
val pendingIntent = NavDeepLinkBuilder(context)
@ -173,6 +173,8 @@ class DownloadWorker(
when(type){
DownloadViewModel.Type.audio -> {
val supportedContainers = context.resources.getStringArray(R.array.audio_containers)
var audioQualityId : String = downloadItem.format.format_id
if (audioQualityId.isBlank() || audioQualityId == "0" || audioQualityId == context.getString(R.string.best_quality) || audioQualityId == "best") audioQualityId = ""
else if (audioQualityId == context.getString(R.string.worst_quality) || audioQualityId == "worst") audioQualityId = "worstaudio"
@ -182,7 +184,7 @@ class DownloadWorker(
request.addOption("-x")
if(ext.isNotBlank()){
if(!ext.matches("(webm)|(Default)|(${context.getString(R.string.defaultValue)})".toRegex())){
if(!ext.matches("(webm)|(Default)|(${context.getString(R.string.defaultValue)})".toRegex()) && supportedContainers.contains(ext)){
request.addOption("--audio-format", ext)
}
}
@ -220,6 +222,8 @@ class DownloadWorker(
}
DownloadViewModel.Type.video -> {
val supportedContainers = context.resources.getStringArray(R.array.video_containers)
if (downloadItem.videoPreferences.addChapters) {
request.addOption("--sponsorblock-mark", "all")
request.addOption("--embed-chapters")
@ -250,7 +254,7 @@ class DownloadWorker(
Log.e(TAG, formatArgument)
request.addOption("-f", formatArgument)
val outputFormat = downloadItem.container
if(outputFormat.isNotEmpty() && outputFormat != "Default" && outputFormat != context.getString(R.string.defaultValue)){
if(outputFormat.isNotEmpty() && outputFormat != "Default" && outputFormat != context.getString(R.string.defaultValue) && supportedContainers.contains(outputFormat)){
request.addOption("--merge-output-format", outputFormat.lowercase())
if (outputFormat != "webm") {
val embedThumb = sharedPreferences.getBoolean("embed_thumbnail", false)
@ -343,7 +347,7 @@ class DownloadWorker(
}, 1000)
}
val wasQuickDownloaded = updateDownloadItem(downloadItem, infoUtil, dao, resultDao, false, notificationUtil)
val wasQuickDownloaded = updateDownloadItem(downloadItem, infoUtil, dao, resultDao)
//put download in history
val incognito = sharedPreferences.getBoolean("incognito", false)
@ -359,7 +363,9 @@ class DownloadWorker(
notificationUtil.cancelDownloadNotification(downloadItem.id.toInt())
notificationUtil.createDownloadFinished(
downloadItem.title, if (finalPaths?.first().equals(context.getString(R.string.unfound_file))) null else finalPaths,
downloadItem.title, if (finalPaths?.first().equals(context.getString(R.string.unfound_file))) null else listOf(
finalPaths!!.maxByOrNull { it.length }!!
),
NotificationUtil.DOWNLOAD_FINISHED_CHANNEL_ID
)
@ -420,10 +426,14 @@ class DownloadWorker(
return Result.success()
}
private fun updateDownloadItem(downloadItem: DownloadItem, infoUtil: InfoUtil, dao: DownloadDao, resultDao: ResultDao, logDownloads: Boolean, notificationUtil: NotificationUtil) : Boolean {
private fun updateDownloadItem(
downloadItem: DownloadItem,
infoUtil: InfoUtil,
dao: DownloadDao,
resultDao: ResultDao
) : Boolean {
var wasQuickDownloaded = false
if (downloadItem.title.isEmpty() || downloadItem.author.isEmpty() || downloadItem.thumb.isEmpty()){
if (logDownloads) notificationUtil.createUpdatingItemNotification(NotificationUtil.DOWNLOAD_SERVICE_CHANNEL_ID)
runCatching {
setProgressAsync(workDataOf("progress" to 0, "output" to context.getString(R.string.updating_download_data), "id" to downloadItem.id, "log" to false))
val info = infoUtil.getMissingInfo(downloadItem.url)
@ -437,7 +447,6 @@ class DownloadWorker(
dao.update(downloadItem)
}
}
if (logDownloads) notificationUtil.cancelDownloadNotification(NotificationUtil.DOWNLOAD_UPDATING_NOTIFICATION_ID)
}
return wasQuickDownloaded
}

@ -132,7 +132,7 @@
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/codec"
android:id="@+id/container"
style="@style/Widget.Material3.FloatingActionButton.Large.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

@ -107,6 +107,7 @@
<item>nb</item>
<item>pl</item>
<item>pt</item>
<item>pt-BR</item>
<item>ru</item>
<item>ro</item>
<item>sq</item>

@ -17,6 +17,7 @@
<locale android:name="ms"/>
<locale android:name="nb-NO"/>
<locale android:name="pl"/>
<locale android:name="pt"/>
<locale android:name="pt-BR" />
<locale android:name="ru"/>
<locale android:name="ro-RO"/>

@ -126,4 +126,10 @@
app:defaultValue=""
app:summary="@string/preferred_format_id_summary"
app:title="@string/preferred_format_id" />
<EditTextPreference
app:key="format_id_audio"
app:defaultValue=""
app:summary="@string/preferred_format_id_summary"
app:title="@string/preferred_format_id" />
</PreferenceScreen>
Loading…
Cancel
Save