Move downloadLocation getter setter companion of DownloadManager

This commit is contained in:
tarsin committed 2023-06-02 15:43:10 +08:00
1 parent 3f4ca1bcbf
commit c46c386fea
8 files changed
+50 -55

No files matched your search

@@ -2,11 +2,8 @@
package com.hippo.ehviewer
import android.net.Uri
import androidx.annotation.DimenRes
import com.hippo.ehviewer.client.data.FavListUrlBuilder
import com.hippo.unifile.UniFile
import splitties.init.appCtx
import splitties.preferences.DefaultPreferences
import splitties.preferences.edit
import java.util.Locale
@@ -64,32 +61,11 @@ object Settings : DefaultPreferences() {
else -> throw IllegalStateException("Unexpected value: $detailSize")
}
private var downloadScheme by stringOrNullPref("image_scheme", null)
private var downloadAuthority by stringOrNullPref("image_authority", null)
private var downloadPath by stringOrNullPref("image_path", null)
private var downloadQuery by stringOrNullPref("image_query", null)
private var downloadFragment by stringOrNullPref("image_fragment", null)
var downloadLocation: UniFile
get() = UniFile.fromUri(
appCtx,
Uri.Builder().apply {
scheme(downloadScheme)
encodedAuthority(downloadAuthority)
encodedPath(downloadPath)
encodedQuery(downloadQuery)
encodedFragment(downloadFragment)
}.build(),
) ?: UniFile.fromFile(AppConfig.getDefaultDownloadDir())!!
set(value) = with(value.uri) {
edit {
downloadScheme = scheme
downloadAuthority = encodedAuthority
downloadPath = encodedPath
downloadQuery = encodedQuery
downloadFragment = encodedFragment
}
}
var downloadScheme by stringOrNullPref("image_scheme", null)
var downloadAuthority by stringOrNullPref("image_authority", null)
var downloadPath by stringOrNullPref("image_path", null)
var downloadQuery by stringOrNullPref("image_query", null)
var downloadFragment by stringOrNullPref("image_fragment", null)
var favCat by stringArrayPref("fav_cat", 10, "Favorites")
var favCount by intArrayPref("fav_count", 10)
@@ -15,11 +15,14 @@
*/
package com.hippo.ehviewer.download
import android.net.Uri
import android.util.Log
import android.util.SparseLongArray
import androidx.collection.LongSparseArray
import androidx.collection.keyIterator
import com.hippo.ehviewer.AppConfig
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.dao.DownloadInfo
import com.hippo.ehviewer.dao.DownloadLabel
@@ -34,8 +37,11 @@ import com.hippo.ehviewer.yorozuya.MathUtils
import com.hippo.ehviewer.yorozuya.ObjectUtils
import com.hippo.ehviewer.yorozuya.SimpleHandler
import com.hippo.ehviewer.yorozuya.collect.LongList
import com.hippo.unifile.UniFile
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import splitties.init.appCtx
import splitties.preferences.edit
import java.util.LinkedList
import kotlin.contracts.contract
@@ -1230,3 +1236,26 @@ object DownloadManager : OnSpiderListener {
sortByDescending { it.time }
}
}
var downloadLocation: UniFile
get() = with(Settings) {
UniFile.fromUri(
appCtx,
Uri.Builder().apply {
scheme(downloadScheme)
encodedAuthority(downloadAuthority)
encodedPath(downloadPath)
encodedQuery(downloadQuery)
encodedFragment(downloadFragment)
}.build(),
) ?: UniFile.fromFile(AppConfig.getDefaultDownloadDir())!!
}
set(value) = with(value.uri) {
Settings.edit {
downloadScheme = scheme
downloadAuthority = encodedAuthority
downloadPath = encodedPath
downloadQuery = encodedQuery
downloadFragment = encodedFragment
}
}
@@ -19,7 +19,7 @@ import android.content.Context
import android.util.AttributeSet
import com.hippo.ehviewer.GetText
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.download.downloadLocation
import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.util.lang.launchUI
import eu.kanade.tachiyomi.util.lang.withUIContext
@@ -53,7 +53,7 @@ class CleanRedundancyPreference @JvmOverloads constructor(
}
private fun doRealWork(): Int {
return Settings.downloadLocation?.listFiles()?.sumOf { clearFile(it).compareTo(false) } ?: 0
return downloadLocation.listFiles()?.sumOf { clearFile(it).compareTo(false) } ?: 0
}
override fun launchJob() {
@@ -20,12 +20,12 @@ import android.util.AttributeSet
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.GetText
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhEngine.fillGalleryListByApi
import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.client.data.BaseGalleryInfo
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.download.DownloadManager
import com.hippo.ehviewer.download.downloadLocation
import com.hippo.ehviewer.spider.SpiderQueen
import com.hippo.ehviewer.spider.readCompatFromUniFile
import com.hippo.unifile.UniFile
@@ -73,8 +73,7 @@ class RestoreDownloadPreference @JvmOverloads constructor(
}
private suspend fun doRealWork(): List<GalleryInfo>? {
val dir = Settings.downloadLocation ?: return null
val files = dir.listFiles() ?: return null
val files = downloadLocation.listFiles() ?: return null
return files.mapNotNull { getRestoreItem(it) }.apply {
runSuspendCatching {
fillGalleryListByApi(this, EhUrl.referer)
@@ -19,7 +19,6 @@ import android.graphics.ImageDecoder
import android.os.ParcelFileDescriptor
import android.os.ParcelFileDescriptor.MODE_READ_WRITE
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhUtils.getSuitableTitle
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.client.ehRequest
@@ -27,6 +26,7 @@ import com.hippo.ehviewer.client.executeNonCache
import com.hippo.ehviewer.client.getImageKey
import com.hippo.ehviewer.coil.edit
import com.hippo.ehviewer.coil.read
import com.hippo.ehviewer.download.downloadLocation
import com.hippo.ehviewer.gallery.SUPPORT_IMAGE_EXTENSIONS
import com.hippo.ehviewer.image.Image.CloseableSource
import com.hippo.ehviewer.image.rewriteGifSource2
@@ -244,9 +244,8 @@ class SpiderDen(private val mGalleryInfo: GalleryInfo) {
companion object {
fun getGalleryDownloadDir(gid: Long): UniFile? {
val dir = Settings.downloadLocation ?: return null
val dirname = EhDB.getDownloadDirname(gid) ?: return null
return dir.subFile(dirname)
return downloadLocation.subFile(dirname)
}
}
}
@@ -42,6 +42,7 @@ import com.hippo.ehviewer.client.exception.EhException
import com.hippo.ehviewer.dao.DownloadInfo
import com.hippo.ehviewer.download.DownloadManager
import com.hippo.ehviewer.download.DownloadService
import com.hippo.ehviewer.download.downloadLocation
import com.hippo.ehviewer.ui.compose.DialogState
import com.hippo.ehviewer.ui.legacy.ListCheckBoxDialogBuilder
import com.hippo.ehviewer.ui.scene.BaseScene
@@ -182,7 +183,6 @@ private val lck = Mutex()
suspend fun keepNoMediaFileStatus() {
lck.withLock {
val downloadLocation = Settings.downloadLocation ?: return
if (Settings.mediaScan) {
removeNoMediaFile(downloadLocation)
} else {
@@ -59,6 +59,7 @@ import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser
import com.hippo.ehviewer.client.parser.GalleryPageUrlParser
import com.hippo.ehviewer.databinding.ActivityMainBinding
import com.hippo.ehviewer.download.DownloadService
import com.hippo.ehviewer.download.downloadLocation
import com.hippo.ehviewer.image.Image
import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder
import com.hippo.ehviewer.ui.legacy.EditTextDialogBuilder
@@ -307,9 +308,9 @@ class MainActivity : EhActivity() {
}
private fun checkDownloadLocation() {
val uniFile = Settings.downloadLocation
val uniFile = downloadLocation
// null == uniFile for first start
if (null == uniFile || uniFile.ensureDir()) {
if (uniFile.ensureDir()) {
return
}
BaseDialogBuilder(this)
@@ -24,6 +24,7 @@ import androidx.preference.Preference
import com.hippo.ehviewer.AppConfig
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.download.downloadLocation
import com.hippo.ehviewer.ui.keepNoMediaFileStatus
import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder
import com.hippo.ehviewer.ui.scene.BaseScene
@@ -43,7 +44,7 @@ class DownloadFragment : BasePreferenceFragment() {
)
val uniFile = UniFile.fromTreeUri(activity, treeUri)
if (uniFile != null) {
Settings.downloadLocation = uniFile
downloadLocation = uniFile
lifecycleScope.launchNonCancellable {
keepNoMediaFileStatus()
}
@@ -74,24 +75,14 @@ class DownloadFragment : BasePreferenceFragment() {
}
private fun onUpdateDownloadLocation() {
val file = Settings.downloadLocation
if (mDownloadLocation != null) {
if (file != null) {
mDownloadLocation!!.summary = file.uri.toString()
} else {
mDownloadLocation!!.setSummary(R.string.settings_download_invalid_download_location)
}
}
mDownloadLocation?.summary = downloadLocation.uri.toString()
}
override fun onPreferenceClick(preference: Preference): Boolean {
val key = preference.key
if (KEY_DOWNLOAD_LOCATION == key) {
val file = Settings.downloadLocation
if (file != null && !UniFile.isFileUri(
Settings.downloadLocation!!.uri,
)
) {
val file = downloadLocation
if (!UniFile.isFileUri(downloadLocation.uri)) {
BaseDialogBuilder(requireContext())
.setTitle(R.string.settings_download_download_location)
.setMessage(file.uri.toString())
@@ -99,7 +90,7 @@ class DownloadFragment : BasePreferenceFragment() {
.setNeutralButton(R.string.reset_download_location) { _, _ ->
val uniFile = UniFile.fromFile(AppConfig.getDefaultDownloadDir())
if (uniFile != null) {
Settings.downloadLocation = uniFile
downloadLocation = uniFile
lifecycleScope.launchNonCancellable {
keepNoMediaFileStatus()
}