pull/1434/head
gedoor 4 years ago
parent 45408b7cc2
commit 4f465fcb69
  1. 38
      app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt
  2. 4
      app/src/main/java/io/legado/app/utils/GsonExtensions.kt

@ -1,6 +1,7 @@
package io.legado.app.ui.main.bookshelf package io.legado.app.ui.main.bookshelf
import android.app.Application import android.app.Application
import com.google.gson.stream.JsonWriter
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb import io.legado.app.data.appDb
@ -14,6 +15,9 @@ import io.legado.app.model.webBook.WebBook
import io.legado.app.utils.* import io.legado.app.utils.*
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import java.io.File
import java.io.FileOutputStream
import java.io.OutputStreamWriter
class BookshelfViewModel(application: Application) : BaseViewModel(application) { class BookshelfViewModel(application: Application) : BaseViewModel(application) {
@ -66,19 +70,33 @@ class BookshelfViewModel(application: Application) : BaseViewModel(application)
} }
} }
fun exportBookshelf(books: List<Book>?, success: (json: String) -> Unit) { fun exportBookshelf(books: List<Book>?, success: (file: File) -> Unit) {
execute { execute {
val exportList = arrayListOf<Map<String, String?>>() books?.let {
books?.forEach { val path = "${context.filesDir}/books.json"
val bookMap = hashMapOf<String, String?>() FileUtils.delete(path)
bookMap["name"] = it.name val file = FileUtils.createFileWithReplace(path)
bookMap["author"] = it.author @Suppress("BlockingMethodInNonBlockingContext")
bookMap["intro"] = it.getDisplayIntro() FileOutputStream(file).use { out ->
exportList.add(bookMap) val writer = JsonWriter(OutputStreamWriter(out, "UTF-8"))
} writer.setIndent(" ")
GSON.toJson(exportList) writer.beginArray()
books.forEach {
val bookMap = hashMapOf<String, String?>()
bookMap["name"] = it.name
bookMap["author"] = it.author
bookMap["intro"] = it.getDisplayIntro()
GSON.toJson(bookMap, bookMap::class.java, writer)
}
writer.endArray()
writer.close()
}
file
} ?: throw NoStackTraceException("书籍不能为空")
}.onSuccess { }.onSuccess {
success(it) success(it)
}.onError {
context.toastOnUi("导出书籍出错\n${it.localizedMessage}")
} }
} }

@ -49,12 +49,12 @@ fun Gson.writeToOutputStream(out: OutputStream, any: Any) {
writer.beginArray() writer.beginArray()
any.forEach { any.forEach {
it?.let { it?.let {
GSON.toJson(it, it::class.java, writer) toJson(it, it::class.java, writer)
} }
} }
writer.endArray() writer.endArray()
} else { } else {
GSON.toJson(any, any::class.java, writer) toJson(any, any::class.java, writer)
} }
writer.close() writer.close()
} }

Loading…
Cancel
Save