diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index aabdac831..179c9d891 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -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}") + } } /**