阅读配置导入

pull/363/head
gedoor 5 years ago
parent d7f7c91936
commit acf0db017f
  1. 2
      app/src/main/java/io/legado/app/help/CrashHandler.kt
  2. 2
      app/src/main/java/io/legado/app/help/storage/Backup.kt
  3. 4
      app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt
  4. 43
      app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt
  5. 4
      app/src/main/java/io/legado/app/ui/config/OtherConfigFragment.kt
  6. 15
      app/src/main/java/io/legado/app/utils/RealPathUtil.kt

@ -147,7 +147,7 @@ class CrashHandler : Thread.UncaughtExceptionHandler {
it.delete()
}
}
FileUtils.createFileIfNotExist(rootFile, fileName, "crash")
FileUtils.createFileIfNotExist(rootFile, "crash", fileName)
.writeText(sb.toString())
}
}

@ -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

@ -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)
}

@ -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 ->

@ -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()

@ -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,13 +50,17 @@ object RealPathUtil {
val split = docId.split(":").toTypedArray()
val type = split[0]
var contentUri: Uri? = null
if ("image" == type) {
when (type) {
"image" -> {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
} else if ("video" == type) {
}
"video" -> {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
} else if ("audio" == type) {
}
"audio" -> {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
}
}
val selection = "_id=?"
val selectionArgs = arrayOf(
split[1]

Loading…
Cancel
Save