pull/416/head
gedoor 4 years ago
parent a2f4a1c928
commit 4148ed0ba5
  1. 1
      app/src/main/AndroidManifest.xml
  2. 49
      app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt

@ -343,7 +343,6 @@
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file" /> <data android:scheme="file" />
<data android:scheme="content" /> <data android:scheme="content" />

@ -3,15 +3,14 @@ package io.legado.app.ui.association
import android.app.Application import android.app.Application
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.text.TextUtils
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.legado.app.App
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.model.localBook.AnalyzeTxtFile
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.utils.isJsonArray import io.legado.app.utils.*
import io.legado.app.utils.isJsonObject
import io.legado.app.utils.readText
import java.io.File import java.io.File
class FileAssociationViewModel(application: Application) : BaseViewModel(application) { class FileAssociationViewModel(application: Application) : BaseViewModel(application) {
@ -19,19 +18,14 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica
val successLiveData = MutableLiveData<Intent>() val successLiveData = MutableLiveData<Intent>()
val errorLiveData = MutableLiveData<String>() val errorLiveData = MutableLiveData<String>()
@Suppress("BlockingMethodInNonBlockingContext")
fun dispatchIndent(uri: Uri) { fun dispatchIndent(uri: Uri) {
execute { execute {
val url: String
//如果是普通的url,需要根据返回的内容判断是什么 //如果是普通的url,需要根据返回的内容判断是什么
if (uri.scheme == "file" || uri.scheme == "content") { if (uri.scheme == "file" || uri.scheme == "content") {
var scheme = "" var scheme = ""
val content = if (uri.scheme == "file") { val content = if (uri.scheme == "file") {
val file = File(uri.path.toString()) File(uri.path.toString()).readText()
if (file.exists()) {
file.readText()
} else {
null
}
} else { } else {
DocumentFile.fromSingleUri(context, uri)?.readText(context) DocumentFile.fromSingleUri(context, uri)?.readText(context)
} }
@ -50,38 +44,39 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica
} }
} }
} }
if (TextUtils.isEmpty(scheme)) { if (scheme.isEmpty()) {
val book = if (uri.scheme == "content") { val book = if (uri.scheme == "content") {
LocalBook.importFile(uri.toString()) LocalBook.importFile(uri.toString()).apply {
val bookFile =
FileUtils.getFile(AnalyzeTxtFile.cacheFolder, originName)
if (!bookFile.exists()) {
bookFile.createNewFile()
DocumentUtils.readBytes(App.INSTANCE, uri)?.let {
bookFile.writeBytes(it)
}
}
}
} else { } else {
LocalBook.importFile(uri.path.toString()) LocalBook.importFile(uri.path.toString())
} }
val intent = Intent(context, ReadBookActivity::class.java) val intent = Intent(context, ReadBookActivity::class.java)
intent.putExtra("bookUrl", book.bookUrl) intent.putExtra("bookUrl", book.bookUrl)
successLiveData.postValue(intent) successLiveData.postValue(intent)
return@execute
}
} else { } else {
errorLiveData.postValue("文件不存在") val url = if (uri.scheme == "content") {
return@execute
}
// content模式下,需要传递完整的路径,方便后续解析
url = if (uri.scheme == "content") {
"yuedu://${scheme}/importonline?src=$uri" "yuedu://${scheme}/importonline?src=$uri"
} else { } else {
"yuedu://${scheme}/importonline?src=${uri.path}" "yuedu://${scheme}/importonline?src=${uri.path}"
} }
} else if (uri.scheme == "yuedu") {
url = uri.toString()
} else {
url = "yuedu://booksource/importonline?src=${uri.path}"
}
val data = Uri.parse(url) val data = Uri.parse(url)
val newIndent = Intent(Intent.ACTION_VIEW) val newIndent = Intent(Intent.ACTION_VIEW)
newIndent.data = data newIndent.data = data
successLiveData.postValue(newIndent) successLiveData.postValue(newIndent)
return@execute }
} else {
throw Exception("文件不存在")
}
}
}.onError { }.onError {
it.printStackTrace() it.printStackTrace()
errorLiveData.postValue(it.localizedMessage) errorLiveData.postValue(it.localizedMessage)

Loading…
Cancel
Save