diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9d778fbb3..71fa00c62 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -244,7 +244,17 @@ - + + + + + + + + + + + diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt index 385088640..d3cb63af3 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt @@ -104,8 +104,14 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity when (it.path) { "/importonline" -> it.getQueryParameter("src")?.let { url -> Snackbar.make(title_bar, R.string.importing, Snackbar.LENGTH_INDEFINITE).show() - viewModel.importSource(url) { msg -> - title_bar.snackbar(msg) + if (url.startsWith("http", false)){ + viewModel.importSource(url) { msg -> + title_bar.snackbar(msg) + } + } + else{ + viewModel.importSourceFromFilePath(url){msg -> + title_bar.snackbar(msg)} } } else -> { diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt new file mode 100644 index 000000000..0b2a3c749 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociation.kt @@ -0,0 +1,37 @@ +package io.legado.app.ui.config + +import android.content.Intent +import android.os.Bundle +import io.legado.app.R +import io.legado.app.base.VMBaseActivity +import io.legado.app.ui.main.MainActivity +import io.legado.app.utils.getViewModel + + +class FileAssociation : VMBaseActivity(R.layout.activity_file_association) { + override val viewModel: FileAssociationViewModel + get() = getViewModel(FileAssociationViewModel::class.java) + + override fun onActivityCreated(savedInstanceState: Bundle?) { + if (null != intent.data){ + val newIntent = viewModel.dispatchIndent(intent.data!!) + if (newIntent != null){ + this.startActivityForResult(newIntent, 100) + }else{ + gotoMainActivity() + } + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + + //返回后直接跳转到主页面 + gotoMainActivity() + } + + private fun gotoMainActivity(){ + val mIntent = Intent() + mIntent.setClass(this, MainActivity::class.java) + startActivity(mIntent) + } +} diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt new file mode 100644 index 000000000..4a09b4325 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt @@ -0,0 +1,60 @@ +package io.legado.app.ui.config + +import android.app.Application +import android.content.Intent +import android.net.Uri +import android.text.TextUtils +import io.legado.app.base.BaseViewModel +import io.legado.app.model.localBook.LocalBook +import io.legado.app.utils.isJsonArray +import io.legado.app.utils.isJsonObject +import org.jetbrains.anko.toast +import java.io.File + +class FileAssociationViewModel(application: Application) : BaseViewModel(application) { + fun dispatchIndent(uri:Uri):Intent?{ + var url = ""; + //如果是普通的url,需要根据返回的内容判断是什么 + if(uri.scheme == "file" || uri.scheme == "content"){ + val file = File(uri.path.toString()) + var scheme = "" + if (file.exists()) { + val content = file.readText() + if (content.isJsonObject() || content.isJsonArray()){ + //暂时根据文件内容判断属于什么 + if (content.contains("bookSourceUrl")){ + scheme = "booksource" + }else if (content.contains("sourceUrl")){ + scheme = "rsssource" + }else if (content.contains("pattern")){ + scheme = "replace" + } + } + if (TextUtils.isEmpty(scheme)){ + execute{ + LocalBook.importFile(uri.path.toString()) + toast("添加本地文件成功${uri.path}") + } + + return null + } + } + else{ + toast("文件不存在") + return null + } + + url = "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 newIndent = Intent(Intent.ACTION_VIEW) + newIndent.data = data; + return newIndent + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt index fd0a591b6..1f9057e35 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt @@ -81,8 +81,15 @@ class ReplaceRuleActivity : VMBaseActivity(R.layout.activi when (it.path) { "/importonline" -> it.getQueryParameter("src")?.let { url -> Snackbar.make(title_bar, R.string.importing, Snackbar.LENGTH_INDEFINITE).show() - viewModel.importSource(url) { msg -> - title_bar.snackbar(msg) + if (url.startsWith("http", false)){ + viewModel.importSource(url) { msg -> + title_bar.snackbar(msg) + } + } + else{ + viewModel.importSourceFromFilePath(url) { msg -> + title_bar.snackbar(msg) + } } } else -> { diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt index a63d7ea38..8f0e848f0 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt @@ -11,11 +11,26 @@ import io.legado.app.help.http.HttpHelper import io.legado.app.help.storage.Backup import io.legado.app.help.storage.ImportOldData import io.legado.app.utils.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.jetbrains.anko.toast import java.io.File class ReplaceRuleViewModel(application: Application) : BaseViewModel(application) { - + fun importSourceFromFilePath(path: String, finally: (msg: String) -> Unit) { + execute { + val file = File(path) + if (file.exists()) { + importSource(file.readText(), finally) + } else { + withContext(Dispatchers.Main) { + finally("打开文件出错") + } + } + }.onError { + finally(it.localizedMessage ?: "打开文件出错") + } + } fun importSource(text: String, showMsg: (msg: String) -> Unit) { execute { if (text.isAbsUrl()) { diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt index fb54d0cae..1f7503e47 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt @@ -117,8 +117,15 @@ class RssSourceActivity : VMBaseActivity(R.layout.activity_r when (it.path) { "/importonline" -> it.getQueryParameter("src")?.let { url -> Snackbar.make(title_bar, R.string.importing, Snackbar.LENGTH_INDEFINITE).show() - viewModel.importSource(url) { msg -> - title_bar.snackbar(msg) + if (url.startsWith("http", false)){ + viewModel.importSource(url) { msg -> + title_bar.snackbar(msg) + } + } + else{ + viewModel.importSourceFromFilePath(url) { msg -> + title_bar.snackbar(msg) + } } } else -> { diff --git a/app/src/main/res/layout/activity_file_association.xml b/app/src/main/res/layout/activity_file_association.xml new file mode 100644 index 000000000..5c147517b --- /dev/null +++ b/app/src/main/res/layout/activity_file_association.xml @@ -0,0 +1,9 @@ + + + +