From acf0db017f333d55b62fc74293301149823a3ba7 Mon Sep 17 00:00:00 2001 From: gedoor Date: Sat, 5 Sep 2020 22:03:42 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BB=E9=85=8D=E7=BD=AE=E5=AF=BC?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/help/CrashHandler.kt | 2 +- .../java/io/legado/app/help/storage/Backup.kt | 2 +- .../ui/book/info/edit/BookInfoEditActivity.kt | 4 +- .../ui/book/read/config/BgTextConfigDialog.kt | 43 +++++++++++++++---- .../app/ui/config/OtherConfigFragment.kt | 4 +- .../java/io/legado/app/utils/RealPathUtil.kt | 21 ++++----- 6 files changed, 52 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/CrashHandler.kt b/app/src/main/java/io/legado/app/help/CrashHandler.kt index cee91e4a3..223d8f29e 100644 --- a/app/src/main/java/io/legado/app/help/CrashHandler.kt +++ b/app/src/main/java/io/legado/app/help/CrashHandler.kt @@ -147,7 +147,7 @@ class CrashHandler : Thread.UncaughtExceptionHandler { it.delete() } } - FileUtils.createFileIfNotExist(rootFile, fileName, "crash") + FileUtils.createFileIfNotExist(rootFile, "crash", fileName) .writeText(sb.toString()) } } diff --git a/app/src/main/java/io/legado/app/help/storage/Backup.kt b/app/src/main/java/io/legado/app/help/storage/Backup.kt index 81ea5cd08..1c6b8dcd6 100644 --- a/app/src/main/java/io/legado/app/help/storage/Backup.kt +++ b/app/src/main/java/io/legado/app/help/storage/Backup.kt @@ -130,7 +130,7 @@ object Backup { if (file.exists()) { file.copyTo( if (isAuto) { - FileUtils.createFileIfNotExist(rootFile, fileName, "auto") + FileUtils.createFileIfNotExist(rootFile, "auto", fileName) } else { FileUtils.createFileIfNotExist(rootFile, fileName) }, true diff --git a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt index 06a149ca1..211c56cb3 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt @@ -111,7 +111,7 @@ class BookInfoEditActivity : val doc = DocumentFile.fromSingleUri(this, uri) doc?.name?.let { var file = this.externalFilesDir - file = FileUtils.createFileIfNotExist(file, it, "covers") + file = FileUtils.createFileIfNotExist(file, "covers", it) kotlin.runCatching { DocumentUtils.readBytes(this, doc.uri) }.getOrNull()?.let { byteArray -> @@ -131,7 +131,7 @@ class BookInfoEditActivity : val imgFile = File(path) if (imgFile.exists()) { var file = this.externalFilesDir - file = FileUtils.createFileIfNotExist(file, imgFile.name, "covers") + file = FileUtils.createFileIfNotExist(file, "covers", imgFile.name) file.writeBytes(imgFile.readBytes()) coverChangeTo(file.absolutePath) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt index e38ab601e..a08f1b96c 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt @@ -46,6 +46,7 @@ class BgTextConfigDialog : BaseDialogFragment(), FileChooserDialog.CallBack { private val requestCodeBg = 123 private val requestCodeExport = 131 private val requestCodeImport = 132 + private val configFileName = "readConfig.zip" private lateinit var adapter: BgAdapter var primaryTextColor = 0 var secondaryTextColor = 0 @@ -225,7 +226,6 @@ class BgTextConfigDialog : BaseDialogFragment(), FileChooserDialog.CallBack { exportFiles.add(bgExportFile) } } - val configFileName = "readConfig.zip" val configZipPath = FileUtils.getPath(requireContext().eCacheDir, configFileName) if (ZipUtils.zipFiles(exportFiles, File(configZipPath))) { if (uri.isContentPath()) { @@ -242,25 +242,52 @@ class BgTextConfigDialog : BaseDialogFragment(), FileChooserDialog.CallBack { } } }.onSuccess { - toast("导出成功") + toast("导出成功, 文件名为 $configFileName") }.onError { it.printStackTrace() longToast("导出失败:${it.localizedMessage}") } } + @Suppress("BlockingMethodInNonBlockingContext") private fun importConfig(uri: Uri) { - if (uri.toString().isContentPath()) { - - } else { + execute { + val configZipPath = FileUtils.getPath(requireContext().eCacheDir, configFileName) + FileUtils.deleteFile(configZipPath) + val zipFile = FileUtils.createFileIfNotExist(configZipPath) + zipFile.writeBytes(uri.readBytes(requireContext())!!) + val configDirPath = FileUtils.getPath(requireContext().eCacheDir, "readConfig") + FileUtils.deleteFile(configDirPath) + ZipUtils.unzipFile(zipFile, FileUtils.createFolderIfNotExist(configDirPath)) + val configDir = FileUtils.createFolderIfNotExist(configDirPath) + val configFile = FileUtils.getFile(configDir, "readConfig.json") + val config: ReadBookConfig.Config = GSON.fromJsonObject(configFile.readText())!! + if (config.textFont.isNotEmpty()) { + val fontName = FileUtils.getName(config.textFont) + val file = FileUtils.createFileIfNotExist( + requireContext().externalFilesDir, + "font", + fontName + ) + FileUtils.getFile(configDir, fontName).copyTo(file) + config.textFont = file.absolutePath + } + if (config.bgType() == 2) { + val bgName = FileUtils.getName(config.bgStr()) + } + }.onSuccess { + toast("导入成功") + }.onError { + it.printStackTrace() + longToast("导入失败:${it.localizedMessage}") } } override fun onFilePicked(requestCode: Int, currentPath: String) { when (requestCode) { - requestCodeImport -> importConfig(Uri.parse(currentPath)) - requestCodeExport -> exportConfig(Uri.parse(currentPath)) + requestCodeImport -> importConfig(Uri.fromFile(File(currentPath))) + requestCodeExport -> exportConfig(Uri.fromFile(File(currentPath))) } } @@ -291,7 +318,7 @@ class BgTextConfigDialog : BaseDialogFragment(), FileChooserDialog.CallBack { doc?.name?.let { var file = requireContext().getExternalFilesDir(null) ?: requireContext().filesDir - file = FileUtils.createFileIfNotExist(file, it, "bg") + file = FileUtils.createFileIfNotExist(file, "bg", it) kotlin.runCatching { DocumentUtils.readBytes(requireContext(), doc.uri) }.getOrNull()?.let { byteArray -> diff --git a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt index c0efd5698..1230bb2b5 100644 --- a/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt @@ -186,7 +186,7 @@ class OtherConfigFragment : BasePreferenceFragment(), val doc = DocumentFile.fromSingleUri(requireContext(), uri) doc?.name?.let { var file = requireContext().externalFilesDir - file = FileUtils.createFileIfNotExist(file, it, "covers") + file = FileUtils.createFileIfNotExist(file, "covers", it) kotlin.runCatching { DocumentUtils.readBytes(requireContext(), doc.uri) }.getOrNull()?.let { byteArray -> @@ -207,7 +207,7 @@ class OtherConfigFragment : BasePreferenceFragment(), val imgFile = File(path) if (imgFile.exists()) { var file = requireContext().externalFilesDir - file = FileUtils.createFileIfNotExist(file, imgFile.name, "covers") + file = FileUtils.createFileIfNotExist(file, "covers", imgFile.name) file.writeBytes(imgFile.readBytes()) putPrefString(PreferKey.defaultCover, file.absolutePath) CoverImageView.upDefaultCover() diff --git a/app/src/main/java/io/legado/app/utils/RealPathUtil.kt b/app/src/main/java/io/legado/app/utils/RealPathUtil.kt index 3eedc2fde..1f9998277 100644 --- a/app/src/main/java/io/legado/app/utils/RealPathUtil.kt +++ b/app/src/main/java/io/legado/app/utils/RealPathUtil.kt @@ -23,10 +23,7 @@ object RealPathUtil { private var filePathUri: Uri? = null @Suppress("DEPRECATION") - fun getPath( - context: Context, - uri: Uri - ): String? { + fun getPath(context: Context, uri: Uri): String? { //check here to KITKAT or new version @SuppressLint("ObsoleteSdkInt") val isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT @@ -53,12 +50,16 @@ object RealPathUtil { val split = docId.split(":").toTypedArray() val type = split[0] var contentUri: Uri? = null - if ("image" == type) { - contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI - } else if ("video" == type) { - contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI - } else if ("audio" == type) { - contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + when (type) { + "image" -> { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI + } + "video" -> { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI + } + "audio" -> { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + } } val selection = "_id=?" val selectionArgs = arrayOf(