From 26b6309813afddedaa871c1d9b28c96aeb7e21c1 Mon Sep 17 00:00:00 2001 From: wqfantexi Date: Sat, 7 Mar 2020 22:47:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8B=E8=BD=BD=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E6=8F=90=E7=A4=BA=20=20=E8=BF=9B=E5=BA=A620/100?= =?UTF-8?q?=EF=BC=8C=E6=88=90=E5=8A=9F18=EF=BC=8C=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E7=AB=A0=20=E5=86=B2=E5=A4=A9=E4=B8=80=E7=AC=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/service/DownloadService.kt | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/DownloadService.kt b/app/src/main/java/io/legado/app/service/DownloadService.kt index b5b983476..732506449 100644 --- a/app/src/main/java/io/legado/app/service/DownloadService.kt +++ b/app/src/main/java/io/legado/app/service/DownloadService.kt @@ -29,8 +29,10 @@ class DownloadService : BaseService() { private val handler = Handler() private var runnable: Runnable = Runnable { upDownload() } private val downloadMap = hashMapOf>() + private val downloadCount = hashMapOf(); private val finalMap = hashMapOf>() private var notificationContent = "正在启动下载" + private val notificationBuilder by lazy { val builder = NotificationCompat.Builder(this, AppConst.channelIdDownload) .setSmallIcon(R.drawable.ic_download) @@ -97,6 +99,11 @@ class DownloadService : BaseService() { finalMap.remove(bookUrl) } + private fun updateNotification(downloadCount:DownloadCount, totalCount: Int, content: String){ + notificationContent = + "进度:${downloadCount.downloadFinishedCount}/$totalCount,成功:${downloadCount.successCount},$content" + } + private fun download() { val task = Coroutine.async(this, context = searchPool) { downloadMap.forEach { entry -> @@ -106,6 +113,9 @@ class DownloadService : BaseService() { val bookSource = App.db.bookSourceDao().getBookSource(book.origin) ?: return@async val webBook = WebBook(bookSource) + + downloadCount[entry.key] = DownloadCount() + entry.value.forEach { chapter -> if (!isActive) return@async if (downloadMap.containsKey(book.bookUrl)) { @@ -116,16 +126,19 @@ class DownloadService : BaseService() { scope = this, context = searchPool ) - .onStart { - notificationContent = chapter.title - } + //.onStart { + // notificationContent = "启动:" + chapter.title + //} .onSuccess(IO) { content -> content?.let { + downloadCount[entry.key]?.increaseSuccess() BookHelp.saveContent(book, chapter, content) } } .onFinally(IO) { synchronized(this@DownloadService) { + downloadCount[entry.key]?.increaseFinished() + downloadCount[entry.key]?.let { updateNotification(it, entry.value.size, chapter.title) } val chapterMap = finalMap[book.bookUrl] ?: linkedSetOf().apply { @@ -135,9 +148,14 @@ class DownloadService : BaseService() { if (chapterMap.size == entry.value.size) { downloadMap.remove(book.bookUrl) finalMap.remove(book.bookUrl) + downloadCount.remove(entry.key) } } } + } else{ + //无需下载的,设置为增加成功 + downloadCount[entry.key]?.increaseSuccess() + downloadCount[entry.key]?.increaseFinished() } } } @@ -176,4 +194,17 @@ class DownloadService : BaseService() { val notification = builder.build() startForeground(AppConst.notificationIdDownload, notification) } +} + +class DownloadCount{ + @Volatile public var downloadFinishedCount = 0 // 下载完成的条目数量 + @Volatile public var successCount = 0 //下载成功的条目数量 + + fun increaseSuccess(){ + ++successCount; + } + + fun increaseFinished(){ + ++downloadFinishedCount; + } } \ No newline at end of file