From c46c386feaaaaeb9e53b7b9bd169da9137b38e51 Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 2 Jun 2023 15:43:10 +0800 Subject: [PATCH] Move downloadLocation getter setter companion of DownloadManager --- .../main/java/com/hippo/ehviewer/Settings.kt | 34 +++---------------- .../ehviewer/download/DownloadManager.kt | 29 ++++++++++++++++ .../preference/CleanRedundancyPreference.kt | 4 +-- .../preference/RestoreDownloadPreference.kt | 5 ++- .../com/hippo/ehviewer/spider/SpiderDen.kt | 5 ++- .../com/hippo/ehviewer/ui/CommonOperations.kt | 2 +- .../com/hippo/ehviewer/ui/MainActivity.kt | 5 +-- .../ehviewer/ui/fragment/DownloadFragment.kt | 21 ++++-------- 8 files changed, 50 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.kt b/app/src/main/java/com/hippo/ehviewer/Settings.kt index 33fa3122c..c7adf8660 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/java/com/hippo/ehviewer/Settings.kt @@ -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) diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt index df56dddb5..78286570e 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt @@ -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 + } + } diff --git a/app/src/main/java/com/hippo/ehviewer/preference/CleanRedundancyPreference.kt b/app/src/main/java/com/hippo/ehviewer/preference/CleanRedundancyPreference.kt index 453322af7..6a9fbae61 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/CleanRedundancyPreference.kt +++ b/app/src/main/java/com/hippo/ehviewer/preference/CleanRedundancyPreference.kt @@ -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() { diff --git a/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.kt b/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.kt index 4e57c678d..458b68630 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.kt +++ b/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.kt @@ -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? { - 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) diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt index 068653343..3d1866ae6 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt @@ -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) } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.kt b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.kt index 15982744b..f131036af 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.kt @@ -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 { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt index 498273ab8..f211c8d60 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt @@ -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) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/DownloadFragment.kt b/app/src/main/java/com/hippo/ehviewer/ui/fragment/DownloadFragment.kt index f1723e4da..8deb2241d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/DownloadFragment.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/DownloadFragment.kt @@ -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() }