mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-22 16:21:49 +01:00
Fixed splitting logic and CBZ compression logic (#7098)
* Fixes: - spliiting fails when the page was already been split and processed before - Moved CBZ logic a little earlier to avoid marking a download as complete before the CBZ compression was completed * Added a single space for readablity * Added 2 spaces for readability * Moved the splitting logic to happen inside getOrDownloadImage() * Minor cleanup * - Improved error handling when splitting fails due to OOM exception caused by BitmapFactory.decodeFile. - Changed logic from throwing error to only notify to allow the download to complete even if splitting failed. * reverted auto formatting changes * removed an extra loop * Merged to Upstream, cleaned up * Removed unused localized string * Minor cleanup
This commit is contained in:
parent
b26daf8824
commit
f75d632740
@ -274,7 +274,7 @@ class Downloader(
|
|||||||
|
|
||||||
// Start downloader if needed
|
// Start downloader if needed
|
||||||
if (autoStart && wasEmpty) {
|
if (autoStart && wasEmpty) {
|
||||||
val queuedDownloads = queue.filter { it.source !is UnmeteredSource }.count()
|
val queuedDownloads = queue.count { it.source !is UnmeteredSource }
|
||||||
val maxDownloadsFromSource = queue
|
val maxDownloadsFromSource = queue
|
||||||
.groupBy { it.source }
|
.groupBy { it.source }
|
||||||
.filterKeys { it !is UnmeteredSource }
|
.filterKeys { it !is UnmeteredSource }
|
||||||
@ -345,10 +345,7 @@ class Downloader(
|
|||||||
.flatMap({ page -> getOrDownloadImage(page, download, tmpDir) }, 5)
|
.flatMap({ page -> getOrDownloadImage(page, download, tmpDir) }, 5)
|
||||||
.onBackpressureLatest()
|
.onBackpressureLatest()
|
||||||
// Do when page is downloaded.
|
// Do when page is downloaded.
|
||||||
.doOnNext { page ->
|
.doOnNext { notifier.onProgressChange(download) }
|
||||||
splitTallImageIfNeeded(page, tmpDir)
|
|
||||||
notifier.onProgressChange(download)
|
|
||||||
}
|
|
||||||
.toList()
|
.toList()
|
||||||
.map { download }
|
.map { download }
|
||||||
// Do after download completes
|
// Do after download completes
|
||||||
@ -393,8 +390,9 @@ class Downloader(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return pageObservable
|
return pageObservable
|
||||||
// When the image is ready, set image path, progress (just in case) and status
|
// When the page is ready, set page path, progress (just in case) and status
|
||||||
.doOnNext { file ->
|
.doOnNext { file ->
|
||||||
|
splitTallImageIfNeeded(page, tmpDir)
|
||||||
page.uri = file.uri
|
page.uri = file.uri
|
||||||
page.progress = 100
|
page.progress = 100
|
||||||
download.downloadedImages++
|
download.downloadedImages++
|
||||||
@ -483,11 +481,13 @@ class Downloader(
|
|||||||
if (!preferences.splitTallImages().get()) return
|
if (!preferences.splitTallImages().get()) return
|
||||||
|
|
||||||
val filename = String.format("%03d", page.number)
|
val filename = String.format("%03d", page.number)
|
||||||
val imageFile = tmpDir.listFiles()?.find { it.name!!.startsWith("$filename.") }
|
val imageFile = tmpDir.listFiles()?.find { it.name!!.startsWith(filename) }
|
||||||
?: throw Error(context.getString(R.string.download_notifier_split_page_not_found, page.number))
|
?: throw Error(context.getString(R.string.download_notifier_split_page_not_found, page.number))
|
||||||
val imageFilePath = imageFile.filePath
|
val imageFilePath = imageFile.filePath
|
||||||
?: throw Error(context.getString(R.string.download_notifier_split_page_path_not_found, page.number))
|
?: throw Error(context.getString(R.string.download_notifier_split_page_path_not_found, page.number))
|
||||||
|
|
||||||
|
// check if the original page was previously splitted before then skip.
|
||||||
|
if (imageFile.name!!.contains("__")) return
|
||||||
ImageUtil.splitTallImage(imageFile, imageFilePath)
|
ImageUtil.splitTallImage(imageFile, imageFilePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,13 +509,7 @@ class Downloader(
|
|||||||
val downloadedImages = tmpDir.listFiles().orEmpty().filterNot { it.name!!.endsWith(".tmp") || (it.name!!.contains("__") && !it.name!!.contains("__001.jpg")) }
|
val downloadedImages = tmpDir.listFiles().orEmpty().filterNot { it.name!!.endsWith(".tmp") || (it.name!!.contains("__") && !it.name!!.contains("__001.jpg")) }
|
||||||
|
|
||||||
download.status = if (downloadedImages.size == download.pages!!.size) {
|
download.status = if (downloadedImages.size == download.pages!!.size) {
|
||||||
Download.State.DOWNLOADED
|
|
||||||
} else {
|
|
||||||
Download.State.ERROR
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only rename the directory if it's downloaded.
|
// Only rename the directory if it's downloaded.
|
||||||
if (download.status == Download.State.DOWNLOADED) {
|
|
||||||
if (preferences.saveChaptersAsCBZ().get()) {
|
if (preferences.saveChaptersAsCBZ().get()) {
|
||||||
archiveChapter(mangaDir, dirname, tmpDir)
|
archiveChapter(mangaDir, dirname, tmpDir)
|
||||||
} else {
|
} else {
|
||||||
@ -524,6 +518,10 @@ class Downloader(
|
|||||||
cache.addChapter(dirname, mangaDir, download.manga)
|
cache.addChapter(dirname, mangaDir, download.manga)
|
||||||
|
|
||||||
DiskUtil.createNoMediaFile(tmpDir, context)
|
DiskUtil.createNoMediaFile(tmpDir, context)
|
||||||
|
|
||||||
|
Download.State.DOWNLOADED
|
||||||
|
} else {
|
||||||
|
Download.State.ERROR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user