mirror of
https://github.com/mihonapp/mihon.git
synced 2024-11-07 19:27:25 +01:00
Update details metadata along with chapters list
This commit is contained in:
parent
63f3180dff
commit
29feee0095
@ -110,7 +110,6 @@ class LibraryUpdateService(
|
|||||||
*/
|
*/
|
||||||
enum class Target {
|
enum class Target {
|
||||||
CHAPTERS, // Manga chapters
|
CHAPTERS, // Manga chapters
|
||||||
DETAILS, // Manga metadata
|
|
||||||
TRACKING // Tracking metadata
|
TRACKING // Tracking metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +233,6 @@ class LibraryUpdateService(
|
|||||||
// Update either chapter list or manga details.
|
// Update either chapter list or manga details.
|
||||||
when (target) {
|
when (target) {
|
||||||
Target.CHAPTERS -> updateChapterList(mangaList)
|
Target.CHAPTERS -> updateChapterList(mangaList)
|
||||||
Target.DETAILS -> updateDetails(mangaList)
|
|
||||||
Target.TRACKING -> updateTrackings(mangaList)
|
Target.TRACKING -> updateTrackings(mangaList)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -390,48 +388,20 @@ class LibraryUpdateService(
|
|||||||
*/
|
*/
|
||||||
fun updateManga(manga: Manga): Observable<Pair<List<Chapter>, List<Chapter>>> {
|
fun updateManga(manga: Manga): Observable<Pair<List<Chapter>, List<Chapter>>> {
|
||||||
val source = sourceManager.get(manga.source) as? HttpSource ?: return Observable.empty()
|
val source = sourceManager.get(manga.source) as? HttpSource ?: return Observable.empty()
|
||||||
return source.fetchChapterList(manga)
|
|
||||||
.map { syncChaptersWithSource(db, it, manga, source) }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method that updates the details of the given list of manga. It's called in a background
|
|
||||||
* thread, so it's safe to do heavy operations or network calls here.
|
|
||||||
*
|
|
||||||
* @param mangaToUpdate the list to update
|
|
||||||
* @return an observable delivering the progress of each update.
|
|
||||||
*/
|
|
||||||
fun updateDetails(mangaToUpdate: List<LibraryManga>): Observable<LibraryManga> {
|
|
||||||
// Initialize the variables holding the progress of the updates.
|
|
||||||
val count = AtomicInteger(0)
|
|
||||||
|
|
||||||
// Emit each manga and update it sequentially.
|
|
||||||
return Observable.from(mangaToUpdate)
|
|
||||||
// Update the details of the manga concurrently from 5 different sources
|
|
||||||
.groupBy { it.source }
|
|
||||||
.flatMap(
|
|
||||||
{ bySource ->
|
|
||||||
bySource
|
|
||||||
// Notify manga that will update.
|
|
||||||
.doOnNext { showProgressNotification(it, count.andIncrement, mangaToUpdate.size) }
|
|
||||||
.concatMap { manga ->
|
|
||||||
val source = sourceManager.get(manga.source) as? HttpSource
|
|
||||||
?: return@concatMap Observable.empty<LibraryManga>()
|
|
||||||
|
|
||||||
|
// Update manga details metadata in the background
|
||||||
source.fetchMangaDetails(manga)
|
source.fetchMangaDetails(manga)
|
||||||
.map { networkManga ->
|
.map { networkManga ->
|
||||||
manga.copyFrom(networkManga)
|
manga.copyFrom(networkManga)
|
||||||
db.insertManga(manga).executeAsBlocking()
|
db.insertManga(manga).executeAsBlocking()
|
||||||
manga
|
manga
|
||||||
}
|
}
|
||||||
.onErrorReturn { manga }
|
.onErrorResumeNext { Observable.just(manga) }
|
||||||
}
|
.subscribeOn(Schedulers.io())
|
||||||
},
|
.subscribe()
|
||||||
5
|
|
||||||
)
|
return source.fetchChapterList(manga)
|
||||||
.doOnCompleted {
|
.map { syncChaptersWithSource(db, it, manga, source) }
|
||||||
cancelProgressNotification()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -76,12 +76,6 @@ class SettingsAdvancedController : SettingsController() {
|
|||||||
ctrl.showDialog(router)
|
ctrl.showDialog(router)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
preference {
|
|
||||||
titleRes = R.string.pref_refresh_library_metadata
|
|
||||||
summaryRes = R.string.pref_refresh_library_metadata_summary
|
|
||||||
|
|
||||||
onClick { LibraryUpdateService.start(context, target = Target.DETAILS) }
|
|
||||||
}
|
|
||||||
preference {
|
preference {
|
||||||
titleRes = R.string.pref_refresh_library_tracking
|
titleRes = R.string.pref_refresh_library_tracking
|
||||||
summaryRes = R.string.pref_refresh_library_tracking_summary
|
summaryRes = R.string.pref_refresh_library_tracking_summary
|
||||||
|
@ -353,9 +353,7 @@
|
|||||||
<string name="pref_clear_database_summary">Delete manga and chapters that are not in your library</string>
|
<string name="pref_clear_database_summary">Delete manga and chapters that are not in your library</string>
|
||||||
<string name="clear_database_confirmation">Are you sure? Read chapters and progress of non-library manga will be lost</string>
|
<string name="clear_database_confirmation">Are you sure? Read chapters and progress of non-library manga will be lost</string>
|
||||||
<string name="clear_database_completed">Entries deleted</string>
|
<string name="clear_database_completed">Entries deleted</string>
|
||||||
<string name="pref_refresh_library_metadata">Refresh library metadata</string>
|
<string name="pref_refresh_library_tracking">Refresh tracking</string>
|
||||||
<string name="pref_refresh_library_metadata_summary">Updates covers, genres, description and manga status information</string>
|
|
||||||
<string name="pref_refresh_library_tracking">Refresh tracking metadata</string>
|
|
||||||
<string name="pref_refresh_library_tracking_summary">Updates status, score and last chapter read from the tracking services</string>
|
<string name="pref_refresh_library_tracking_summary">Updates status, score and last chapter read from the tracking services</string>
|
||||||
<string name="pref_disable_battery_optimization">Disable battery optimization</string>
|
<string name="pref_disable_battery_optimization">Disable battery optimization</string>
|
||||||
<string name="pref_disable_battery_optimization_summary">Helps with background library updates and backups</string>
|
<string name="pref_disable_battery_optimization_summary">Helps with background library updates and backups</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user