pull/2107/head
821938089 2 years ago
parent 2715169531
commit abc0af7103
  1. 14
      app/src/main/java/io/legado/app/ui/association/FileAssociationActivity.kt
  2. 25
      app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt

@ -103,9 +103,18 @@ class FileAssociationActivity :
} }
} }
intent.data?.let { data -> intent.data?.let { data ->
if (!data.isContentScheme()) {
PermissionsCompat.Builder(this)
.addPermissions(*Permissions.Group.STORAGE)
.rationale(R.string.tip_perm_request_storage)
.onGranted {
viewModel.dispatchIndent(data)
}.request()
} else {
viewModel.dispatchIndent(data) viewModel.dispatchIndent(data)
} }
} }
}
private fun importBook(uri: Uri) { private fun importBook(uri: Uri) {
if (uri.isContentScheme()) { if (uri.isContentScheme()) {
@ -119,12 +128,7 @@ class FileAssociationActivity :
importBook(Uri.parse(treeUriStr), uri) importBook(Uri.parse(treeUriStr), uri)
} }
} else { } else {
PermissionsCompat.Builder(this)
.addPermissions(*Permissions.Group.STORAGE)
.rationale(R.string.tip_perm_request_storage)
.onGranted {
viewModel.importBook(uri) viewModel.importBook(uri)
}.request()
} }
} }

@ -4,13 +4,14 @@ import android.app.Application
import android.net.Uri import android.net.Uri
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.legado.app.constant.AppLog
import io.legado.app.constant.AppPattern.bookFileRegex import io.legado.app.constant.AppPattern.bookFileRegex
import io.legado.app.exception.NoStackTraceException import io.legado.app.exception.NoStackTraceException
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.utils.isJson import io.legado.app.utils.isJson
import io.legado.app.utils.printOnDebug import io.legado.app.utils.printOnDebug
import io.legado.app.utils.readText
import java.io.File import java.io.File
import java.io.InputStream
class FileAssociationViewModel(application: Application) : BaseAssociationViewModel(application) { class FileAssociationViewModel(application: Application) : BaseAssociationViewModel(application) {
val importBookLiveData = MutableLiveData<Uri>() val importBookLiveData = MutableLiveData<Uri>()
@ -23,28 +24,34 @@ class FileAssociationViewModel(application: Application) : BaseAssociationViewMo
execute { execute {
lateinit var fileName: String lateinit var fileName: String
lateinit var content: String lateinit var content: String
lateinit var fileStream: InputStream
//如果是普通的url,需要根据返回的内容判断是什么 //如果是普通的url,需要根据返回的内容判断是什么
if (uri.scheme == "file" || uri.scheme == "content") { if (uri.scheme == "file" || uri.scheme == "content") {
if (uri.scheme == "file") { if (uri.scheme == "file") {
val file = File(uri.path.toString()) val file = File(uri.path.toString())
content = file.readText() fileStream = file.inputStream()
fileName = file.name fileName = file.name
} else { } else {
val file = DocumentFile.fromSingleUri(context, uri) val file = DocumentFile.fromSingleUri(context, uri)
content = file?.readText(context) ?: throw NoStackTraceException("文件不存在") if (file?.exists() != true) throw NoStackTraceException("文件不存在")
fileStream = context.contentResolver.openInputStream(uri)!!
fileName = file.name ?: "" fileName = file.name ?: ""
} }
when { kotlin.runCatching {
content.isJson() -> { content = fileStream.reader(Charsets.UTF_8).use { it.readText() }
if (content.isJson()) {
importJson(content) importJson(content)
return@execute
} }
fileName.matches(bookFileRegex) -> { }.onFailure {
it.printOnDebug()
AppLog.put("尝试导入为JSON文件失败\n${it.localizedMessage}", it)
}
if (fileName.matches(bookFileRegex)) {
importBookLiveData.postValue(uri) importBookLiveData.postValue(uri)
return@execute
} }
else -> {
notSupportedLiveData.postValue(Pair(uri, fileName)) notSupportedLiveData.postValue(Pair(uri, fileName))
}
}
} else { } else {
onLineImportLive.postValue(uri) onLineImportLive.postValue(uri)
} }

Loading…
Cancel
Save