Merge pull request #354 from AndyBernie/master

图片(漫画)支持导出
pull/357/head
kunfei 4 years ago committed by GitHub
commit f37ccd859a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      app/src/main/assets/updateLog.md
  2. 12
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
  3. 42
      app/src/main/java/io/legado/app/ui/book/download/DownloadViewModel.kt

@ -6,6 +6,7 @@
**2020/09/03** **2020/09/03**
* 修复替换中的回车消失的bug * 修复替换中的回车消失的bug
* 所有内容恢复htmlFormat, 在想其它办法解决丢失一些内容的问题 * 所有内容恢复htmlFormat, 在想其它办法解决丢失一些内容的问题
* 图片(漫画)支持导出
**2020/09/02** **2020/09/02**
* 搜索url支持put,get,js里使用java.put,java.get * 搜索url支持put,get,js里使用java.put,java.get

@ -434,15 +434,11 @@ class AnalyzeUrl(
} }
fun getGlideUrl(): Any? { fun getGlideUrl(): Any? {
var glideUrl: Any = urlHasQuery val headers = LazyHeaders.Builder()
if (headerMap.isNotEmpty()) { headerMap.forEach { (key, value) ->
val headers = LazyHeaders.Builder() headers.addHeader(key, value)
headerMap.forEach { (key, value) ->
headers.addHeader(key, value)
}
glideUrl = GlideUrl(urlHasQuery, headers.build())
} }
return glideUrl return GlideUrl(urlHasQuery, headers.build())
} }
data class UrlOption( data class UrlOption(

@ -5,13 +5,11 @@ import android.net.Uri
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import io.legado.app.App import io.legado.app.App
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.AppPattern
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.utils.DocumentUtils import io.legado.app.utils.*
import io.legado.app.utils.FileUtils
import io.legado.app.utils.isContentPath
import io.legado.app.utils.writeText
import java.io.File import java.io.File
@ -38,11 +36,47 @@ class DownloadViewModel(application: Application) : BaseViewModel(application) {
private fun export(doc: DocumentFile, book: Book) { private fun export(doc: DocumentFile, book: Book) {
DocumentUtils.createFileIfNotExist(doc, "${book.name} 作者:${book.author}.txt") DocumentUtils.createFileIfNotExist(doc, "${book.name} 作者:${book.author}.txt")
?.writeText(context, getAllContents(book)) ?.writeText(context, getAllContents(book))
App.db.bookChapterDao().getChapterList(book.bookUrl).forEach { chapter ->
BookHelp.getContent(book, chapter).let { content ->
content?.split("\n")?.forEachIndexed { index, text ->
val matcher = AppPattern.imgPattern.matcher(text)
if (matcher.find()) {
var src = matcher.group(1)
src = NetworkUtils.getAbsoluteURL(chapter.url, src)
src?.let {
val vfile = BookHelp.getImage(book, src)
if(vfile.exists()) {
DocumentUtils.createFileIfNotExist(doc, "${index}-${MD5Utils.md5Encode16(src)}.jpg", subDirs = arrayOf("${book.name}_${book.author}", "images", chapter.title))
?.writeBytes(context, vfile.readBytes())
}
}
}
}
}
}
} }
private fun export(file: File, book: Book) { private fun export(file: File, book: Book) {
FileUtils.createFileIfNotExist(file, "${book.name} 作者:${book.author}.txt") FileUtils.createFileIfNotExist(file, "${book.name} 作者:${book.author}.txt")
.writeText(getAllContents(book)) .writeText(getAllContents(book))
App.db.bookChapterDao().getChapterList(book.bookUrl).forEach { chapter ->
BookHelp.getContent(book, chapter).let { content ->
content?.split("\n")?.forEachIndexed { index, text ->
val matcher = AppPattern.imgPattern.matcher(text)
if (matcher.find()) {
var src = matcher.group(1)
src = NetworkUtils.getAbsoluteURL(chapter.url, src)
src?.let {
val vfile = BookHelp.getImage(book, src)
if(vfile.exists()) {
FileUtils.createFileIfNotExist(file, "${book.name}_${book.author}", "images", chapter.title, "${index}-${MD5Utils.md5Encode16(src)}.jpg")
.writeBytes(vfile.readBytes())
}
}
}
}
}
}
} }
private fun getAllContents(book: Book): String { private fun getAllContents(book: Book): String {

Loading…
Cancel
Save