|
|
@ -308,36 +308,46 @@ class LibraryUpdateService(
|
|
|
|
|
|
|
|
|
|
|
|
// Emit each manga and update it sequentially.
|
|
|
|
// Emit each manga and update it sequentially.
|
|
|
|
return Observable.from(mangaToUpdate)
|
|
|
|
return Observable.from(mangaToUpdate)
|
|
|
|
// Notify manga that will update.
|
|
|
|
// Update the chapters of the manga concurrently from 5 different sources
|
|
|
|
.doOnNext { showProgressNotification(it, count.andIncrement, mangaToUpdate.size) }
|
|
|
|
.groupBy { it.source }
|
|
|
|
// Update the chapters of the manga.
|
|
|
|
.flatMap(
|
|
|
|
.concatMap { manga ->
|
|
|
|
{ bySource ->
|
|
|
|
updateManga(manga)
|
|
|
|
bySource
|
|
|
|
// If there's any error, return empty update and continue.
|
|
|
|
// Notify manga that will update.
|
|
|
|
.onErrorReturn {
|
|
|
|
.doOnNext { showProgressNotification(it, count.andIncrement, mangaToUpdate.size) }
|
|
|
|
failedUpdates.add(manga)
|
|
|
|
.concatMap { manga ->
|
|
|
|
Pair(emptyList(), emptyList())
|
|
|
|
updateManga(manga)
|
|
|
|
}
|
|
|
|
// If there's any error, return empty update and continue.
|
|
|
|
// Filter out mangas without new chapters (or failed).
|
|
|
|
.onErrorReturn {
|
|
|
|
.filter { pair -> pair.first.isNotEmpty() }
|
|
|
|
failedUpdates.add(manga)
|
|
|
|
.doOnNext {
|
|
|
|
Pair(emptyList(), emptyList())
|
|
|
|
if (downloadNew && (
|
|
|
|
}
|
|
|
|
categoriesToDownload.isEmpty() ||
|
|
|
|
// Filter out mangas without new chapters (or failed).
|
|
|
|
manga.category in categoriesToDownload
|
|
|
|
.filter { pair -> pair.first.isNotEmpty() }
|
|
|
|
)
|
|
|
|
.doOnNext {
|
|
|
|
) {
|
|
|
|
if (downloadNew && (
|
|
|
|
downloadChapters(manga, it.first)
|
|
|
|
categoriesToDownload.isEmpty() ||
|
|
|
|
hasDownloads = true
|
|
|
|
manga.category in categoriesToDownload
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
downloadChapters(manga, it.first)
|
|
|
|
|
|
|
|
hasDownloads = true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// Convert to the manga that contains new chapters.
|
|
|
|
|
|
|
|
.map {
|
|
|
|
|
|
|
|
Pair(
|
|
|
|
|
|
|
|
manga,
|
|
|
|
|
|
|
|
(
|
|
|
|
|
|
|
|
it.first.sortedByDescending { ch -> ch.source_order }
|
|
|
|
|
|
|
|
.toTypedArray()
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// Convert to the manga that contains new chapters.
|
|
|
|
5
|
|
|
|
.map {
|
|
|
|
)
|
|
|
|
Pair(
|
|
|
|
|
|
|
|
manga,
|
|
|
|
|
|
|
|
(it.first.sortedByDescending { ch -> ch.source_order }.toTypedArray())
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add manga with new chapters to the list.
|
|
|
|
// Add manga with new chapters to the list.
|
|
|
|
.doOnNext { manga ->
|
|
|
|
.doOnNext { manga ->
|
|
|
|
// Add to the list
|
|
|
|
// Add to the list
|
|
|
@ -397,21 +407,28 @@ class LibraryUpdateService(
|
|
|
|
|
|
|
|
|
|
|
|
// Emit each manga and update it sequentially.
|
|
|
|
// Emit each manga and update it sequentially.
|
|
|
|
return Observable.from(mangaToUpdate)
|
|
|
|
return Observable.from(mangaToUpdate)
|
|
|
|
// Notify manga that will update.
|
|
|
|
// Update the details of the manga concurrently from 5 different sources
|
|
|
|
.doOnNext { showProgressNotification(it, count.andIncrement, mangaToUpdate.size) }
|
|
|
|
.groupBy { it.source }
|
|
|
|
// Update the details of the manga.
|
|
|
|
.flatMap(
|
|
|
|
.concatMap { manga ->
|
|
|
|
{ bySource ->
|
|
|
|
val source = sourceManager.get(manga.source) as? HttpSource
|
|
|
|
bySource
|
|
|
|
?: return@concatMap Observable.empty<LibraryManga>()
|
|
|
|
// Notify manga that will update.
|
|
|
|
|
|
|
|
.doOnNext { showProgressNotification(it, count.andIncrement, mangaToUpdate.size) }
|
|
|
|
source.fetchMangaDetails(manga)
|
|
|
|
.concatMap { manga ->
|
|
|
|
.map { networkManga ->
|
|
|
|
val source = sourceManager.get(manga.source) as? HttpSource
|
|
|
|
manga.copyFrom(networkManga)
|
|
|
|
?: return@concatMap Observable.empty<LibraryManga>()
|
|
|
|
db.insertManga(manga).executeAsBlocking()
|
|
|
|
|
|
|
|
manga
|
|
|
|
source.fetchMangaDetails(manga)
|
|
|
|
}
|
|
|
|
.map { networkManga ->
|
|
|
|
.onErrorReturn { manga }
|
|
|
|
manga.copyFrom(networkManga)
|
|
|
|
}
|
|
|
|
db.insertManga(manga).executeAsBlocking()
|
|
|
|
|
|
|
|
manga
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
.onErrorReturn { manga }
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
|
)
|
|
|
|
.doOnCompleted {
|
|
|
|
.doOnCompleted {
|
|
|
|
cancelProgressNotification()
|
|
|
|
cancelProgressNotification()
|
|
|
|
}
|
|
|
|
}
|
|
|
|