mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-04 11:24:35 -05:00
Emit update to clients after adding all mangas to the queue (#521)
Emitting updates before all the mangas were added to the queue could lead to e.g. wrong progress calculation.
This commit is contained in:
@@ -93,14 +93,13 @@ object UpdateController {
|
|||||||
if (clear) {
|
if (clear) {
|
||||||
updater.reset()
|
updater.reset()
|
||||||
}
|
}
|
||||||
categories
|
updater.addMangasToQueue(
|
||||||
.flatMap { CategoryManga.getCategoryMangaList(it.id) }
|
categories
|
||||||
.distinctBy { it.id }
|
.flatMap { CategoryManga.getCategoryMangaList(it.id) }
|
||||||
.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, MangaDataClass::title))
|
.distinctBy { it.id }
|
||||||
.filter { it.updateStrategy == UpdateStrategy.ALWAYS_UPDATE }
|
.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, MangaDataClass::title))
|
||||||
.forEach { manga ->
|
.filter { it.updateStrategy == UpdateStrategy.ALWAYS_UPDATE }
|
||||||
updater.addMangaToQueue(manga)
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun categoryUpdateWS(ws: WsConfig) {
|
fun categoryUpdateWS(ws: WsConfig) {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import kotlinx.coroutines.flow.StateFlow
|
|||||||
import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass
|
import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass
|
||||||
|
|
||||||
interface IUpdater {
|
interface IUpdater {
|
||||||
fun addMangaToQueue(manga: MangaDataClass)
|
fun addMangasToQueue(mangas: List<MangaDataClass>)
|
||||||
val status: StateFlow<UpdateStatus>
|
val status: StateFlow<UpdateStatus>
|
||||||
fun reset()
|
fun reset()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,13 +74,17 @@ class Updater : IUpdater {
|
|||||||
return tracker.values.toList()
|
return tracker.values.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addMangaToQueue(manga: MangaDataClass) {
|
override fun addMangasToQueue(mangas: List<MangaDataClass>) {
|
||||||
|
mangas.forEach { tracker[it.id] = UpdateJob(it) }
|
||||||
|
_status.update { UpdateStatus(tracker.values.toList(), true) }
|
||||||
|
mangas.forEach { addMangaToQueue(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addMangaToQueue(manga: MangaDataClass) {
|
||||||
val updateChannel = getOrCreateUpdateChannelFor(manga.sourceId)
|
val updateChannel = getOrCreateUpdateChannelFor(manga.sourceId)
|
||||||
scope.launch {
|
scope.launch {
|
||||||
updateChannel.send(UpdateJob(manga))
|
updateChannel.send(UpdateJob(manga))
|
||||||
}
|
}
|
||||||
tracker[manga.id] = UpdateJob(manga)
|
|
||||||
_status.update { UpdateStatus(tracker.values.toList(), true) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun reset() {
|
override fun reset() {
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ class TestUpdater : IUpdater {
|
|||||||
private val _status = MutableStateFlow(UpdateStatus())
|
private val _status = MutableStateFlow(UpdateStatus())
|
||||||
override val status: StateFlow<UpdateStatus> = _status.asStateFlow()
|
override val status: StateFlow<UpdateStatus> = _status.asStateFlow()
|
||||||
|
|
||||||
override fun addMangaToQueue(manga: MangaDataClass) {
|
override fun addMangasToQueue(mangas: List<MangaDataClass>) {
|
||||||
updateQueue.add(UpdateJob(manga))
|
mangas.forEach { updateQueue.add(UpdateJob(it)) }
|
||||||
isRunning = true
|
isRunning = true
|
||||||
updateStatus()
|
updateStatus()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user