|
|
@@ -3,6 +3,7 @@ package io.legado.app.ui.book.read
|
|
|
import android.app.Application
|
|
|
import android.content.Intent
|
|
|
import android.net.Uri
|
|
|
+import androidx.documentfile.provider.DocumentFile
|
|
|
import androidx.lifecycle.MutableLiveData
|
|
|
import androidx.lifecycle.viewModelScope
|
|
|
import io.legado.app.R
|
|
|
@@ -29,12 +30,12 @@ import io.legado.app.service.BaseReadAloudService
|
|
|
import io.legado.app.ui.book.read.page.entities.TextChapter
|
|
|
import io.legado.app.ui.book.read.page.provider.ImageProvider
|
|
|
import io.legado.app.ui.book.searchContent.SearchResult
|
|
|
-import io.legado.app.utils.msg
|
|
|
-import io.legado.app.utils.postEvent
|
|
|
-import io.legado.app.utils.toStringArray
|
|
|
-import io.legado.app.utils.toastOnUi
|
|
|
+import io.legado.app.utils.*
|
|
|
import kotlinx.coroutines.Dispatchers.IO
|
|
|
import kotlinx.coroutines.launch
|
|
|
+import java.io.File
|
|
|
+import java.io.FileInputStream
|
|
|
+import java.io.FileOutputStream
|
|
|
|
|
|
/**
|
|
|
* 阅读界面数据处理
|
|
|
@@ -426,8 +427,31 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Suppress("BlockingMethodInNonBlockingContext")
|
|
|
fun saveImage(src: String?, uri: Uri) {
|
|
|
-
|
|
|
+ src ?: return
|
|
|
+ val book = ReadBook.book ?: return
|
|
|
+ execute {
|
|
|
+ val image = BookHelp.getImage(book, src)
|
|
|
+ FileInputStream(image).use { input ->
|
|
|
+ if (uri.isContentScheme()) {
|
|
|
+ DocumentFile.fromTreeUri(context, uri)?.let { doc ->
|
|
|
+ DocumentUtils.createFileIfNotExist(doc, image.name)
|
|
|
+ context.contentResolver.openOutputStream(doc.uri)!!.use { output ->
|
|
|
+ input.copyTo(output)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ val dir = File(uri.path ?: uri.toString())
|
|
|
+ val file = FileUtils.createFileIfNotExist(dir, image.name)
|
|
|
+ FileOutputStream(file).use { output ->
|
|
|
+ input.copyTo(output)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }.onError {
|
|
|
+ context.toastOnUi("保存图片出错\n${it.localizedMessage}")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|