random fixes

pull/1112/head
deniscerri 7 months ago
parent 02aef16edc
commit 1a60bf9e53
No known key found for this signature in database
GPG Key ID: 95C43D517D830350

@ -230,4 +230,5 @@ dependencies {
implementation("commons-io:commons-io:2.5")
implementation("org.apache.commons:commons-compress:1.12")
implementation("androidx.core:core-splashscreen:1.2.0")
}

@ -18,6 +18,7 @@ import android.widget.CheckBox
import android.widget.TextView
import android.widget.Toast
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.forEach
import androidx.core.view.isVisible
@ -90,12 +91,19 @@ class MainActivity : BaseActivity() {
private lateinit var navController : NavController
override fun onCreate(savedInstanceState: Bundle?) {
val splashScreen = installSplashScreen()
super.onCreate(savedInstanceState)
CrashListener(this).registerExceptionHandler()
ThemeUtil.updateTheme(this)
window.navigationBarColor = SurfaceColors.SURFACE_2.getColor(this)
setContentView(R.layout.activity_main)
context = baseContext
splashScreen.setKeepOnScreenCondition {
!RuntimeManager.initialized
}
resultViewModel = ViewModelProvider(this)[ResultViewModel::class.java]
cookieViewModel = ViewModelProvider(this)[CookieViewModel::class.java]
downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java]
@ -109,8 +117,6 @@ class MainActivity : BaseActivity() {
}
}
askPermissions()
checkUpdate()
@ -269,27 +275,7 @@ class MainActivity : BaseActivity() {
cookieViewModel.updateCookiesFile()
val intent = intent
handleIntents(intent)
if (preferences.getBoolean("auto_update_ytdlp", false)){
CoroutineScope(SupervisorJob()).launch(Dispatchers.IO) {
kotlin.runCatching {
if(DBManager.getInstance(this@MainActivity).downloadDao.getDownloadsCountByStatus(listOf("Active", "Queued")) == 0){
if (UpdateUtil(this@MainActivity).updateYTDL().status == UpdateUtil.YTDLPUpdateStatus.DONE) {
val version = RuntimeManager.getInstance().version(context)
val snack = Snackbar.make(findViewById(R.id.frame_layout),
this@MainActivity.getString(R.string.ytld_update_success) + " [${version}]",
Snackbar.LENGTH_LONG)
navigationBarView?.apply {
snack.setAnchorView(this)
}
snack.show()
}
}
}
}
}
checkRuntimeReadyState()
}
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
@ -504,6 +490,33 @@ class MainActivity : BaseActivity() {
}
}
private fun checkRuntimeReadyState() {
if (RuntimeManager.initialized) {
if (preferences.getBoolean("auto_update_ytdlp", false)){
CoroutineScope(SupervisorJob()).launch(Dispatchers.IO) {
kotlin.runCatching {
if(DBManager.getInstance(this@MainActivity).downloadDao.getDownloadsCountByStatus(listOf("Active", "Queued")) == 0){
if (UpdateUtil(this@MainActivity).updateYTDL().status == UpdateUtil.YTDLPUpdateStatus.DONE) {
val version = RuntimeManager.getInstance().version(context)
val snack = Snackbar.make(findViewById(R.id.frame_layout),
this@MainActivity.getString(R.string.ytld_update_success) + " [${version}]",
Snackbar.LENGTH_LONG)
navigationBarView?.apply {
snack.setAnchorView(this)
}
snack.show()
}
}
}
}
}
} else {
Handler(Looper.getMainLooper()).postDelayed({ checkRuntimeReadyState() }, 50)
}
}
companion object {
private const val TAG = "MainActivity"
}

@ -28,9 +28,9 @@ object RuntimeManager {
lateinit var quickJsLocation : PackageBase.PackageLocation
var ytdlpPath: File? = null
const val PREFS_NAME = "runtime_prefs"
var initialized = false
private set
private var initialized = false
const val BASENAME = "ytdlnis"
const val ytdlpDirName = "yt-dlp"
const val ytdlpBin = "yt-dlp"

@ -96,6 +96,7 @@ class DownloadLogFragment : Fragment() {
logAdapter = LogAdapter()
logRecyclerView.layoutManager = LinearLayoutManager(requireContext())
logRecyclerView.adapter = logAdapter
logRecyclerView.itemAnimator = null
logAdapter.isWrapped = sharedPreferences.getBoolean("wrap_text_log", false)
logAdapter.textSize = sharedPreferences.getFloat("log_zoom", 2f) + 13f

@ -130,6 +130,10 @@ class ProcessingSettingsFragment : BaseSettingsFragment() {
recodeVideoPreference.performClick()
}
editor.putString("audio_codec_tmp", audioCodecPref?.value ?: "").apply()
editor.putString("video_codec_tmp", videoCodecPref?.value ?: "").apply()
editor.putString("video_format_tmp", videoContainerPref?.value ?: "").apply()
val audioCodecs = requireContext().getStringArray(R.array.audio_codec)
val audioCodecValues = requireContext().getStringArray(R.array.audio_codec_values)
val videoCodecs = requireContext().getStringArray(R.array.video_codec)
@ -142,6 +146,11 @@ class ProcessingSettingsFragment : BaseSettingsFragment() {
editor.putString("video_codec", videoCodecValues[videoCodecs.indexOf(newVideoCodec)]).apply()
editor.putString("video_format", "").apply()
requireActivity().recreate()
} else {
editor.putString("audio_codec", prefs.getString("audio_codec_tmp", "")).apply()
editor.putString("video_codec", prefs.getString("video_codec_tmp", "")).apply()
editor.putString("video_format", prefs.getString("video_format_tmp", "")).apply()
requireActivity().recreate()
}
true
}

@ -365,7 +365,8 @@ object Extensions {
lines.addAll(newLines)
if (newLines.isNotEmpty()) {
newLines.last().apply {
if (this.contains("[download")) {
//common text in yt-dlp and aria2c progress
if (this.contains("[download") || this.contains(") CN:")) {
newline = "\n${this}"
}
}
@ -373,13 +374,13 @@ object Extensions {
return lines.distinct().filterNot {
(it.contains("[download") && !finishingProgressLinesRegex.matcher(it).find())
((it.contains("[download") || it.contains(") CN:")) && !finishingProgressLinesRegex.matcher(it).find())
|| it.contains("does not pass filter (id")
}.joinToString("\n") + newline
}
return lines.filterNot {
(it.contains("[download") && !finishingProgressLinesRegex.matcher(it).find())
((it.contains("[download") || it.contains(") CN:")) && !finishingProgressLinesRegex.matcher(it).find())
|| it.contains("does not pass filter (id")
}.joinToString("\n")
}

@ -772,7 +772,7 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co
//extractorArgs.add("skip=translated_subs")
val useLanguageForMetadata = sharedPreferences.getBoolean("use_app_language_for_metadata", true)
val useLanguageForMetadata = sharedPreferences.getBoolean("use_app_language_for_metadata", false)
if (useLanguageForMetadata) {
val lang = java.util.Locale.getDefault().language
val langTag = java.util.Locale.getDefault().toLanguageTag()
@ -1063,14 +1063,14 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co
audioQualityId += "/ba/b"
}
if ((audioQualityId.isBlank() || audioQualityId == "ba/b") && preferredLanguage.isNotBlank()) {
audioQualityId = "ba[language^=$preferredLanguage]/${audioQualityId.ifEmpty { "ba/b" }}"
}
if ((audioQualityId.isBlank() || audioQualityId == "ba/b") && formatImportance.contains("prefer_drc")) {
audioQualityId = "ba[format_id$=-drc]/${audioQualityId.ifEmpty { "ba/b" }}"
}
if ((audioQualityId.isBlank() || audioQualityId == "ba/b") && preferredLanguage.isNotBlank()) {
audioQualityId = "ba[language^=$preferredLanguage]/${audioQualityId.ifEmpty { "ba/b" }}"
}
if (audioQualityId.isNotBlank()) {
if (audioQualityId.matches(".*-[0-9]+.*".toRegex())) {
audioQualityId = if(!downloadItem.format.lang.isNullOrBlank() && downloadItem.format.lang != "None"){
@ -1124,7 +1124,7 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co
if (downloadItem.format.format_id == context.resources.getString(R.string.worst_quality) || downloadItem.format.format_id == "wa" || downloadItem.format.format_id == "worst") {
formatSorting.remove("size")
formatSorting.remove("+size")
formatSorting.addAll(0,listOf("+abr","+br", "+res", "+fps"))
formatSorting.addAll(0,listOf("+abr"))
}
if (abrSort.isNotBlank()){
@ -1298,7 +1298,7 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co
if (!f.contains("$videoF+ba")) {
if (preferredAudioLanguage.isNotEmpty()) {
f.append("$videoF+ba[language^=$preferredAudioLanguage]/")
} else if (preferDRCAudio) {
}else if (preferDRCAudio) {
f.append("$videoF+ba[format_id$=-drc]/")
}else {
f.append("$videoF+ba/")
@ -1335,8 +1335,8 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co
.filter { it.isNotBlank() }
.ifEmpty {
val list = mutableListOf<String>()
if (preferDRCAudio) list.add("ba[format_id$=-drc]")
if (preferredAudioLanguage.isNotEmpty() && !downloadItem.videoPreferences.removeAudio) list.add("ba[language^=$preferredAudioLanguage]")
if (preferDRCAudio) list.add("ba[format_id$=-drc]")
list.add(audioF)
list
}.apply {

@ -33,9 +33,9 @@ class MoveCacheFilesWorker(
val cachePath = FileUtil.getCachePath(context)
val downloadFolders = File(cachePath)
val allContent = downloadFolders.walk()
allContent.drop(1)
val totalFiles = allContent.count()
val destination = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath + File.separator + "YTDLnis/CACHE_IMPORT")
val destination = File(FileUtil.getDefaultApplicationPath(), "CACHE_IMPORT")
val intent = Intent(context, MainActivity::class.java)
val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
@ -50,6 +50,8 @@ class MoveCacheFilesWorker(
var progress = 0
allContent.forEach {
progress++
if (progress == 1) return@forEach
notificationUtil.updateCacheMovingNotification(id, progress, totalFiles)
val destFile = File(destination.absolutePath + "/${it.absolutePath.removePrefix(cachePath)}")
if (it.isDirectory) {

@ -513,4 +513,5 @@
<string name="packages">Packages</string>
<string name="not_installed">Not installed</string>
<string name="bundled">Bundled</string>
<string name="use_app_language_for_metadata_summary">If enabled, metadata fields will follow your app language and even affect format selection by preferring dubbed versions instead of original</string>
</resources>

@ -20,7 +20,8 @@
<SwitchPreferenceCompat
android:widgetLayout="@layout/preferece_material_switch"
android:icon="@drawable/ic_language"
android:defaultValue="true"
android:defaultValue="false"
android:summary="@string/use_app_language_for_metadata_summary"
android:key="use_app_language_for_metadata"
android:title="@string/use_app_language_for_metadata" />

Loading…
Cancel
Save