diff --git a/.github/workflows/autoupdatefork.yml b/.github/workflows/autoupdatefork.yml
index 4e9a62855..9fa5d6425 100644
--- a/.github/workflows/autoupdatefork.yml
+++ b/.github/workflows/autoupdatefork.yml
@@ -2,20 +2,13 @@
name: update fork
on:
- release:
- types: [published]
- push:
- tags:
- - 'v*'
schedule:
- - cron: '50 3 * * *' #设置定时任务
- watch:
- types: [started]
-#1.设置secrets并命名为EMAIL,内容为邮箱地址,设置方法百度,不介意邮箱泄露,可以直接将${{ secrets.EMAIL }}替换为邮箱。2.设置用户名
+ - cron: '0 16 * * *' #设置定时任务
+
jobs:
build:
runs-on: ubuntu-latest
- if: github.event.repository.owner.id == github.event.sender.id
+ if: ${{ github.event.repository.owner.id == github.event.sender.id && github.actor != 'gedoor' }}
steps:
- name: Checkout
uses: actions/checkout@v2
@@ -27,11 +20,10 @@ jobs:
sudo apt-get -y install git
- name: Set env
run: |
- git config --global user.email "${{ secrets.EMAIL }}"
- git config --global user.name "[用户名]"
+ git config --global user.email "github-actions@github.com"
+ git config --global user.name "github-actions"
- name: Update fork
run: |
- cd /home/runner/work/legado/legado
git remote add upstream https://github.com/gedoor/legado.git
git remote -v
git fetch upstream
diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md
index 00e9f11ac..de7a200ad 100644
--- a/app/src/main/assets/updateLog.md
+++ b/app/src/main/assets/updateLog.md
@@ -3,6 +3,9 @@
* 关注合作公众号 **[小说拾遗]()** 获取好看的小说。
- 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。
+**2020/08/21**
+* 图片(漫画源)支持离线下载了
+
**2020/08/20**
* 正文图片(漫画源)链接支持修改headers
diff --git a/app/src/main/java/io/legado/app/help/BookHelp.kt b/app/src/main/java/io/legado/app/help/BookHelp.kt
index 7bbbbd001..5a30aba70 100644
--- a/app/src/main/java/io/legado/app/help/BookHelp.kt
+++ b/app/src/main/java/io/legado/app/help/BookHelp.kt
@@ -7,24 +7,30 @@ import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.ReplaceRule
import io.legado.app.help.coroutine.Coroutine
+import io.legado.app.model.analyzeRule.AnalyzeUrl
import io.legado.app.model.localBook.LocalBook
import io.legado.app.utils.FileUtils
import io.legado.app.utils.MD5Utils
import io.legado.app.utils.externalFilesDir
import io.legado.app.utils.postEvent
+import io.legado.app.utils.NetworkUtils
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.withContext
import org.apache.commons.text.similarity.JaccardSimilarity
import org.jetbrains.anko.toast
import java.io.File
+import java.util.regex.Pattern
import kotlin.math.min
object BookHelp {
private const val cacheFolderName = "book_cache"
+ private const val cacheImageFolderName = "images"
private val downloadDir: File = App.INSTANCE.externalFilesDir
+ private val srcPattern =
+ Pattern.compile("
", Pattern.CASE_INSENSITIVE)
- private fun bookFolderName(book: Book): String {
+ fun bookFolderName(book: Book): String {
return formatFolderName(book.name) + MD5Utils.md5Encode16(book.bookUrl)
}
@@ -63,13 +69,44 @@ object BookHelp {
@Synchronized
fun saveContent(book: Book, bookChapter: BookChapter, content: String) {
if (content.isEmpty()) return
+ //保存文本
FileUtils.createFileIfNotExist(
downloadDir,
formatChapterName(bookChapter),
subDirs = *arrayOf(cacheFolderName, bookFolderName(book))
).writeText(content)
+ //保存图片
+ content.split("\n").forEach {
+ val matcher = srcPattern.matcher(it)
+ if (matcher.find()) {
+ var src = matcher.group(1)
+ src = NetworkUtils.getAbsoluteURL(bookChapter.url, src)
+ src?.let {
+ saveImage(book, src)
+ }
+ }
+ }
postEvent(EventBus.SAVE_CONTENT, bookChapter)
}
+
+ fun saveImage(book: Book, src:String) {
+ val analyzeUrl = AnalyzeUrl(src, null, null, null, null)
+ analyzeUrl.getImageBytes(book.origin)?.let {
+ FileUtils.createFileIfNotExist(
+ downloadDir,
+ "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}",
+ subDirs = *arrayOf(cacheFolderName, bookFolderName(book), cacheImageFolderName)
+ ).writeBytes(it)
+ }
+ }
+
+ fun getImage(book:Book, src:String): File {
+ return FileUtils.getFile(
+ downloadDir,
+ "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}",
+ subDirs = *arrayOf(cacheFolderName, bookFolderName(book), cacheImageFolderName)
+ )
+ }
fun getChapterFiles(book: Book): List {
val fileNameList = arrayListOf()
diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt
index 3a6b80d8e..30ac0a613 100644
--- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt
+++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt
@@ -3,15 +3,13 @@ package io.legado.app.ui.book.read.page.provider
import android.graphics.Bitmap
import io.legado.app.App
import io.legado.app.data.entities.Book
-import io.legado.app.help.http.HttpHelper
+import io.legado.app.help.BookHelp
import io.legado.app.model.localBook.EPUBFile
import io.legado.app.utils.BitmapUtils
import io.legado.app.utils.FileUtils
-import io.legado.app.utils.MD5Utils
import io.legado.app.utils.externalFilesDir
import java.io.FileOutputStream
import java.util.concurrent.ConcurrentHashMap
-import io.legado.app.model.analyzeRule.AnalyzeUrl
object ImageProvider {
@@ -36,11 +34,7 @@ object ImageProvider {
getCache(chapterIndex, src)?.let {
return it
}
- val vFile = FileUtils.getFile(
- App.INSTANCE.externalFilesDir,
- "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}",
- "images", book.name
- )
+ val vFile = BookHelp.getImage(book, src)
if (!vFile.exists()) {
if (book.isEpub()) {
EPUBFile.getImage(book, src).use {
@@ -50,10 +44,7 @@ object ImageProvider {
out.close()
}
} else if (!onUi) {
- val analyzeUrl = AnalyzeUrl(src, null, null, null, null)
- analyzeUrl.getImageBytes(book.origin)?.let {
- FileUtils.createFileIfNotExist(vFile.absolutePath).writeBytes(it)
- }
+ BookHelp.saveImage(book, src)
}
}
return try {