优化导入

pull/306/head
gedoor 4 years ago
parent b182b05380
commit ae0e3253a4
  1. 3
      app/src/main/java/io/legado/app/model/localBook/LocalBook.kt
  2. 19
      app/src/main/java/io/legado/app/ui/association/FileAssociationActivity.kt
  3. 33
      app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt

@ -31,7 +31,7 @@ object LocalBook {
} }
} }
fun importFile(path: String) { fun importFile(path: String): Book {
val fileName = if (path.isContentPath()) { val fileName = if (path.isContentPath()) {
val doc = DocumentFile.fromSingleUri(App.INSTANCE, Uri.parse(path)) val doc = DocumentFile.fromSingleUri(App.INSTANCE, Uri.parse(path))
doc?.name ?: "" doc?.name ?: ""
@ -67,6 +67,7 @@ object LocalBook {
) )
) )
App.db.bookDao().insert(book) App.db.bookDao().insert(book)
return book
} }
fun deleteBook(book: Book, deleteOriginal: Boolean) { fun deleteBook(book: Book, deleteOriginal: Boolean) {

@ -2,11 +2,13 @@ package io.legado.app.ui.association
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.lifecycle.Observer
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.Theme import io.legado.app.constant.Theme
import io.legado.app.ui.main.MainActivity import io.legado.app.ui.main.MainActivity
import io.legado.app.utils.getViewModel import io.legado.app.utils.getViewModel
import org.jetbrains.anko.toast
class FileAssociationActivity : VMBaseActivity<FileAssociationViewModel>( class FileAssociationActivity : VMBaseActivity<FileAssociationViewModel>(
@ -18,20 +20,21 @@ class FileAssociationActivity : VMBaseActivity<FileAssociationViewModel>(
get() = getViewModel(FileAssociationViewModel::class.java) get() = getViewModel(FileAssociationViewModel::class.java)
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
intent.data?.let { data -> viewModel.errorLiveData.observe(this, Observer {
val newIntent = viewModel.dispatchIndent(data) toast(it)
if (newIntent != null) {
this.startActivityForResult(newIntent, 100)
finish()
} else {
gotoMainActivity() gotoMainActivity()
} })
viewModel.successLiveData.observe(this, Observer {
startActivity(it)
finish()
})
intent.data?.let { data ->
viewModel.dispatchIndent(data)
} }
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
//返回后直接跳转到主页面 //返回后直接跳转到主页面
gotoMainActivity() gotoMainActivity()
} }

@ -5,8 +5,10 @@ import android.content.Intent
import android.net.Uri import android.net.Uri
import android.text.TextUtils import android.text.TextUtils
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.MutableLiveData
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
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.utils.isJsonArray import io.legado.app.utils.isJsonArray
import io.legado.app.utils.isJsonObject import io.legado.app.utils.isJsonObject
import io.legado.app.utils.readText import io.legado.app.utils.readText
@ -14,8 +16,11 @@ import java.io.File
class FileAssociationViewModel(application: Application) : BaseViewModel(application) { class FileAssociationViewModel(application: Application) : BaseViewModel(application) {
fun dispatchIndent(uri: Uri): Intent? { val successLiveData = MutableLiveData<Intent>()
try { val errorLiveData = MutableLiveData<String>()
fun dispatchIndent(uri: Uri) {
execute {
val url: String val url: String
//如果是普通的url,需要根据返回的内容判断是什么 //如果是普通的url,需要根据返回的内容判断是什么
if (uri.scheme == "file" || uri.scheme == "content") { if (uri.scheme == "file" || uri.scheme == "content") {
@ -46,19 +51,19 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica
} }
} }
if (TextUtils.isEmpty(scheme)) { if (TextUtils.isEmpty(scheme)) {
execute { val book = if (uri.scheme == "content") {
if (uri.scheme == "content") {
LocalBook.importFile(uri.toString()) LocalBook.importFile(uri.toString())
} else { } else {
LocalBook.importFile(uri.path.toString()) LocalBook.importFile(uri.path.toString())
} }
toast("添加本地文件成功${uri.path}") val intent = Intent(context, ReadBookActivity::class.java)
} intent.putExtra("bookUrl", book.bookUrl)
return null successLiveData.postValue(intent)
return@execute
} }
} else { } else {
toast("文件不存在") errorLiveData.postValue("文件不存在")
return null return@execute
} }
// content模式下,需要传递完整的路径,方便后续解析 // content模式下,需要传递完整的路径,方便后续解析
url = if (uri.scheme == "content") { url = if (uri.scheme == "content") {
@ -75,11 +80,11 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica
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
return newIndent successLiveData.postValue(newIndent)
} catch (e: Exception) { return@execute
e.printStackTrace() }.onError {
toast(e.localizedMessage) it.printStackTrace()
return null toast(it.localizedMessage)
} }
} }
} }
Loading…
Cancel
Save