From 5a2fd50e8e628bc18d991a44df6fedcaf0332cf6 Mon Sep 17 00:00:00 2001 From: AndyBernie Date: Fri, 21 Aug 2020 14:10:03 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/help/BookHelp.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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..feb8aff95 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -7,7 +7,9 @@ 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.ui.book.read.page.provider.ChapterProvider.srcPattern import io.legado.app.utils.FileUtils import io.legado.app.utils.MD5Utils import io.legado.app.utils.externalFilesDir @@ -63,11 +65,30 @@ 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.forEachIndexed { index, text -> + val matcher = srcPattern.matcher(text) + if (matcher.find()) { + var src = matcher.group(1) + src = NetworkUtils.getAbsoluteURL(bookChapter.url, src) + src?.let { + val analyzeUrl = AnalyzeUrl(src, null, null, null, null) + analyzeUrl.getImageBytes(book.origin)?.let { + FileUtils.createFileIfNotExist( + downloadDir, + "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}", + "images", book.name + ).writeBytes(it) + } + } + } + } postEvent(EventBus.SAVE_CONTENT, bookChapter) } From c2ed976becd944f4abc5f78e8c8731b3eeb2fd32 Mon Sep 17 00:00:00 2001 From: AndyBernie Date: Fri, 21 Aug 2020 18:10:20 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/help/BookHelp.kt | 31 +++++++++++++------ .../book/read/page/provider/ImageProvider.kt | 15 ++------- 2 files changed, 25 insertions(+), 21 deletions(-) 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 5a0721620..5a30aba70 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -25,11 +25,12 @@ 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) } @@ -81,19 +82,31 @@ object BookHelp { var src = matcher.group(1) src = NetworkUtils.getAbsoluteURL(bookChapter.url, src) src?.let { - val analyzeUrl = AnalyzeUrl(src, null, null, null, null) - analyzeUrl.getImageBytes(book.origin)?.let { - FileUtils.createFileIfNotExist( - downloadDir, - "${MD5Utils.md5Encode16(src)}${src.substringAfterLast(".").substringBefore(",")}", - "images", book.name - ).writeBytes(it) - } + 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 { From 4409330d95cddfa8e37cf74b71c5e805d544322f Mon Sep 17 00:00:00 2001 From: AndyBernie Date: Fri, 21 Aug 2020 20:44:15 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 3 +++ 1 file changed, 3 insertions(+) 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 From 1f63f6835752db3f64fa3bdc05d46228e2bde1c3 Mon Sep 17 00:00:00 2001 From: Celeter <48249130+Celeter@users.noreply.github.com> Date: Sat, 22 Aug 2020 10:28:53 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=87=AA=E5=8A=A8fork=E5=8F=AA=E5=AF=B9for?= =?UTF-8?q?k=E4=BA=86=E8=AF=A5=E9=A1=B9=E7=9B=AE=E7=9A=84=E4=BA=BA?= =?UTF-8?q?=E6=9C=89=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/autoupdatefork.yml | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) 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