* Add query to get chapter count by manga and chapter number * Add functions to get chapter count by manga and chapter number * Only count read chapters * Add interactor * Savepoint * Extract new chapter logic to separate function * Update javadocs * Add preference to toggle new functionality * Add todo * Add debug logcat * Use string resource instead of hardcoding title * Add temporary logcat for debugging * Fix detekt issues * Update javadocs * Update download unread chapters preference * Remove debug logcat calls * Update javadocs * Resolve issue where read chapters were still being downloaded during manual manga fetch * Apply code review changes * Apply code review changes * Revert "Apply code review changes" This reverts commit 1a2dce78acc66a7c529ce5b572bdaf94804b1a30. * Revert "Apply code review changes" This reverts commit ac2a77829313967ad39ce3cb0c0231083b9d640d. * Group download chapter logic inside the interactor GetChaptersToDownload * Update javadocs * Apply code review * Apply code review * Apply code review * Update CHANGELOG.md to include the new feature * Run spotless * Update domain/src/main/java/mihon/domain/chapter/interactor/FilterChaptersForDownload.kt --------- Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> (cherry picked from commit ca968f162ef7a61a9036b7ab9bea407a6334801d) # Conflicts: # CHANGELOG.md # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
66 lines
2.1 KiB
Kotlin
66 lines
2.1 KiB
Kotlin
package eu.kanade.tachiyomi.util
|
|
|
|
import eu.kanade.domain.manga.interactor.UpdateManga
|
|
import eu.kanade.domain.manga.model.hasCustomCover
|
|
import eu.kanade.domain.manga.model.toSManga
|
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
|
import eu.kanade.tachiyomi.source.model.SManga
|
|
import tachiyomi.domain.manga.model.Manga
|
|
import tachiyomi.source.local.image.LocalCoverManager
|
|
import tachiyomi.source.local.isLocal
|
|
import uy.kohesive.injekt.Injekt
|
|
import uy.kohesive.injekt.api.get
|
|
import java.io.InputStream
|
|
import java.time.Instant
|
|
|
|
/**
|
|
* Call before updating [Manga.thumbnail_url] to ensure old cover can be cleared from cache
|
|
*/
|
|
fun Manga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, refreshSameUrl: Boolean): Manga {
|
|
// Never refresh covers if the new url is null, as the current url has possibly become invalid
|
|
val newUrl = remoteManga.thumbnail_url ?: return this
|
|
|
|
// Never refresh covers if the url is empty to avoid "losing" existing covers
|
|
if (newUrl.isEmpty()) return this
|
|
|
|
if (!refreshSameUrl && thumbnailUrl == newUrl) return this
|
|
|
|
return when {
|
|
isLocal() -> {
|
|
this.copy(coverLastModified = Instant.now().toEpochMilli())
|
|
}
|
|
hasCustomCover(coverCache) -> {
|
|
coverCache.deleteFromCache(this, false)
|
|
this
|
|
}
|
|
else -> {
|
|
coverCache.deleteFromCache(this, false)
|
|
this.copy(coverLastModified = Instant.now().toEpochMilli())
|
|
}
|
|
}
|
|
}
|
|
|
|
fun Manga.removeCovers(coverCache: CoverCache = Injekt.get()): Manga {
|
|
if (isLocal()) return this
|
|
return if (coverCache.deleteFromCache(this, true) > 0) {
|
|
return copy(coverLastModified = Instant.now().toEpochMilli())
|
|
} else {
|
|
this
|
|
}
|
|
}
|
|
|
|
suspend fun Manga.editCover(
|
|
coverManager: LocalCoverManager,
|
|
stream: InputStream,
|
|
updateManga: UpdateManga = Injekt.get(),
|
|
coverCache: CoverCache = Injekt.get(),
|
|
) {
|
|
if (isLocal()) {
|
|
coverManager.update(toSManga(), stream)
|
|
updateManga.awaitUpdateCoverLastModified(id)
|
|
} else if (favorite) {
|
|
coverCache.setCustomCoverToCache(this, stream)
|
|
updateManga.awaitUpdateCoverLastModified(id)
|
|
}
|
|
}
|