Last Commit Merged: f03a834136
This commit is contained in:
LuftVerbot 2023-06-06 21:19:09 +02:00
parent 7834b18298
commit aeeecad486
17 changed files with 74 additions and 45 deletions

View file

@ -31,30 +31,33 @@ class DelayedAnimeTrackingUpdateJob(context: Context, workerParams: WorkerParame
val trackManager = Injekt.get<TrackManager>() val trackManager = Injekt.get<TrackManager>()
val delayedTrackingStore = Injekt.get<DelayedAnimeTrackingStore>() val delayedTrackingStore = Injekt.get<DelayedAnimeTrackingStore>()
withIOContext { val results = withIOContext {
val tracks = delayedTrackingStore.getAnimeItems().mapNotNull { delayedTrackingStore.getAnimeItems()
val track = getTracks.awaitOne(it.trackId) .mapNotNull {
if (track == null) { val track = getTracks.awaitOne(it.trackId)
delayedTrackingStore.removeAnimeItem(it.trackId) if (track == null) {
} delayedTrackingStore.removeAnimeItem(it.trackId)
track }
} track?.copy(lastEpisodeSeen = it.lastEpisodeSeen.toDouble())
}
tracks.forEach { animeTrack -> .mapNotNull { animeTrack ->
try { try {
val service = trackManager.getService(animeTrack.syncId) val service = trackManager.getService(animeTrack.syncId)
if (service != null && service.isLogged) { if (service != null && service.isLogged) {
service.animeService.update(animeTrack.toDbTrack(), true) logcat(LogPriority.DEBUG) { "Updating delayed track item: ${animeTrack.id}, last episode seen: ${animeTrack.lastEpisodeSeen}" }
insertTrack.await(animeTrack) service.animeService.update(animeTrack.toDbTrack(), true)
insertTrack.await(animeTrack)
}
delayedTrackingStore.removeAnimeItem(animeTrack.id)
null
} catch (e: Exception) {
logcat(LogPriority.ERROR, e)
false
} }
delayedTrackingStore.removeAnimeItem(animeTrack.id)
} catch (e: Exception) {
logcat(LogPriority.ERROR, e)
} }
}
} }
return Result.success() return if (results.isNotEmpty()) Result.failure() else Result.success()
} }
companion object { companion object {

View file

@ -31,30 +31,33 @@ class DelayedMangaTrackingUpdateJob(context: Context, workerParams: WorkerParame
val trackManager = Injekt.get<TrackManager>() val trackManager = Injekt.get<TrackManager>()
val delayedTrackingStore = Injekt.get<DelayedMangaTrackingStore>() val delayedTrackingStore = Injekt.get<DelayedMangaTrackingStore>()
withIOContext { val results = withIOContext {
val tracks = delayedTrackingStore.getMangaItems().mapNotNull { delayedTrackingStore.getMangaItems()
val track = getTracks.awaitOne(it.trackId) .mapNotNull {
if (track == null) { val track = getTracks.awaitOne(it.trackId)
delayedTrackingStore.removeMangaItem(it.trackId) if (track == null) {
} delayedTrackingStore.removeMangaItem(it.trackId)
track }
} track?.copy(lastChapterRead = it.lastChapterRead.toDouble())
}
tracks.forEach { track -> .mapNotNull { track ->
try { try {
val service = trackManager.getService(track.syncId) val service = trackManager.getService(track.syncId)
if (service != null && service.isLogged) { if (service != null && service.isLogged) {
service.mangaService.update(track.toDbTrack(), true) logcat(LogPriority.DEBUG) { "Updating delayed track item: ${track.id}, last chapter read: ${track.lastChapterRead}" }
insertTrack.await(track) service.mangaService.update(track.toDbTrack(), true)
insertTrack.await(track)
}
delayedTrackingStore.removeMangaItem(track.id)
null
} catch (e: Exception) {
logcat(LogPriority.ERROR, e)
false
} }
delayedTrackingStore.removeMangaItem(track.id)
} catch (e: Exception) {
logcat(LogPriority.ERROR, e)
} }
}
} }
return Result.success() return if (results.isNotEmpty()) Result.failure() else Result.success()
} }
companion object { companion object {

View file

@ -43,6 +43,7 @@ fun EntryToolbar(
onClickShare: (() -> Unit)?, onClickShare: (() -> Unit)?,
onClickDownload: ((DownloadAction) -> Unit)?, onClickDownload: ((DownloadAction) -> Unit)?,
onClickEditCategory: (() -> Unit)?, onClickEditCategory: (() -> Unit)?,
onClickRefresh: () -> Unit,
onClickMigrate: (() -> Unit)?, onClickMigrate: (() -> Unit)?,
// Anime only // Anime only
changeAnimeSkipIntro: (() -> Unit)?, changeAnimeSkipIntro: (() -> Unit)?,
@ -112,8 +113,14 @@ fun EntryToolbar(
Icon(Icons.Outlined.FilterList, contentDescription = stringResource(R.string.action_filter), tint = filterTint) Icon(Icons.Outlined.FilterList, contentDescription = stringResource(R.string.action_filter), tint = filterTint)
} }
if (onClickEditCategory != null || onClickMigrate != null || onClickShare != null || changeAnimeSkipIntro != null) { OverflowMenu { closeMenu ->
OverflowMenu { closeMenu -> DropdownMenuItem(
text = { Text(text = stringResource(R.string.action_webview_refresh)) },
onClick = {
onClickRefresh()
closeMenu()
},
)
if (onClickEditCategory != null) { if (onClickEditCategory != null) {
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = stringResource(R.string.action_edit_categories)) }, text = { Text(text = stringResource(R.string.action_edit_categories)) },
@ -150,7 +157,6 @@ fun EntryToolbar(
}, },
) )
} }
}
} }
} }
}, },

View file

@ -286,6 +286,7 @@ private fun AnimeScreenSmallImpl(
onClickShare = onShareClicked, onClickShare = onShareClicked,
onClickDownload = onDownloadActionClicked, onClickDownload = onDownloadActionClicked,
onClickEditCategory = onEditCategoryClicked, onClickEditCategory = onEditCategoryClicked,
onClickRefresh = onRefresh,
onClickMigrate = onMigrateClicked, onClickMigrate = onMigrateClicked,
changeAnimeSkipIntro = changeAnimeSkipIntro, changeAnimeSkipIntro = changeAnimeSkipIntro,
actionModeCounter = episodes.count { it.selected }, actionModeCounter = episodes.count { it.selected },
@ -518,6 +519,7 @@ fun AnimeScreenLargeImpl(
onClickShare = onShareClicked, onClickShare = onShareClicked,
onClickDownload = onDownloadActionClicked, onClickDownload = onDownloadActionClicked,
onClickEditCategory = onEditCategoryClicked, onClickEditCategory = onEditCategoryClicked,
onClickRefresh = onRefresh,
onClickMigrate = onMigrateClicked, onClickMigrate = onMigrateClicked,
changeAnimeSkipIntro = changeAnimeSkipIntro, changeAnimeSkipIntro = changeAnimeSkipIntro,
actionModeCounter = episodes.count { it.selected }, actionModeCounter = episodes.count { it.selected },

View file

@ -277,6 +277,7 @@ private fun MangaScreenSmallImpl(
onClickShare = onShareClicked, onClickShare = onShareClicked,
onClickDownload = onDownloadActionClicked, onClickDownload = onDownloadActionClicked,
onClickEditCategory = onEditCategoryClicked, onClickEditCategory = onEditCategoryClicked,
onClickRefresh = onRefresh,
onClickMigrate = onMigrateClicked, onClickMigrate = onMigrateClicked,
changeAnimeSkipIntro = null, changeAnimeSkipIntro = null,
actionModeCounter = chapters.count { it.selected }, actionModeCounter = chapters.count { it.selected },
@ -500,6 +501,7 @@ fun MangaScreenLargeImpl(
onClickShare = onShareClicked, onClickShare = onShareClicked,
onClickDownload = onDownloadActionClicked, onClickDownload = onDownloadActionClicked,
onClickEditCategory = onEditCategoryClicked, onClickEditCategory = onEditCategoryClicked,
onClickRefresh = onRefresh,
onClickMigrate = onMigrateClicked, onClickMigrate = onMigrateClicked,
changeAnimeSkipIntro = null, changeAnimeSkipIntro = null,
actionModeCounter = chapters.count { it.selected }, actionModeCounter = chapters.count { it.selected },

View file

@ -37,6 +37,7 @@ fun LibraryToolbar(
onClickInvertSelection: () -> Unit, onClickInvertSelection: () -> Unit,
onClickFilter: () -> Unit, onClickFilter: () -> Unit,
onClickRefresh: () -> Unit, onClickRefresh: () -> Unit,
onClickGlobalUpdate: () -> Unit,
onClickOpenRandomEntry: () -> Unit, onClickOpenRandomEntry: () -> Unit,
searchQuery: String?, searchQuery: String?,
onSearchQueryChange: (String?) -> Unit, onSearchQueryChange: (String?) -> Unit,
@ -57,6 +58,7 @@ fun LibraryToolbar(
onSearchQueryChange = onSearchQueryChange, onSearchQueryChange = onSearchQueryChange,
onClickFilter = onClickFilter, onClickFilter = onClickFilter,
onClickRefresh = onClickRefresh, onClickRefresh = onClickRefresh,
onClickGlobalUpdate = onClickGlobalUpdate,
onClickOpenRandomEntry = onClickOpenRandomEntry, onClickOpenRandomEntry = onClickOpenRandomEntry,
scrollBehavior = scrollBehavior, scrollBehavior = scrollBehavior,
navigateUp = navigateUp, navigateUp = navigateUp,
@ -71,6 +73,7 @@ fun LibraryRegularToolbar(
onSearchQueryChange: (String?) -> Unit, onSearchQueryChange: (String?) -> Unit,
onClickFilter: () -> Unit, onClickFilter: () -> Unit,
onClickRefresh: () -> Unit, onClickRefresh: () -> Unit,
onClickGlobalUpdate: () -> Unit,
onClickOpenRandomEntry: () -> Unit, onClickOpenRandomEntry: () -> Unit,
scrollBehavior: TopAppBarScrollBehavior?, scrollBehavior: TopAppBarScrollBehavior?,
navigateUp: (() -> Unit)? = null, navigateUp: (() -> Unit)? = null,
@ -105,6 +108,13 @@ fun LibraryRegularToolbar(
OverflowMenu { closeMenu -> OverflowMenu { closeMenu ->
DropdownMenuItem( DropdownMenuItem(
text = { Text(text = stringResource(R.string.pref_category_library_update)) }, text = { Text(text = stringResource(R.string.pref_category_library_update)) },
onClick = {
onClickGlobalUpdate()
closeMenu()
},
)
DropdownMenuItem(
text = { Text(text = stringResource(R.string.action_update_category)) },
onClick = { onClick = {
onClickRefresh() onClickRefresh()
closeMenu() closeMenu()

View file

@ -151,7 +151,8 @@ object AnimeLibraryTab : Tab {
onClickSelectAll = { screenModel.selectAll(screenModel.activeCategoryIndex) }, onClickSelectAll = { screenModel.selectAll(screenModel.activeCategoryIndex) },
onClickInvertSelection = { screenModel.invertSelection(screenModel.activeCategoryIndex) }, onClickInvertSelection = { screenModel.invertSelection(screenModel.activeCategoryIndex) },
onClickFilter = { screenModel.showSettingsDialog() }, onClickFilter = { screenModel.showSettingsDialog() },
onClickRefresh = { onClickRefresh(null) }, onClickRefresh = { onClickRefresh(state.categories[screenModel.activeCategoryIndex]) },
onClickGlobalUpdate = { onClickRefresh(null) },
onClickOpenRandomEntry = { onClickOpenRandomEntry = {
scope.launch { scope.launch {
val randomItem = screenModel.getRandomAnimelibItemForCurrentCategory() val randomItem = screenModel.getRandomAnimelibItemForCurrentCategory()

View file

@ -133,7 +133,8 @@ object MangaLibraryTab : Tab {
onClickSelectAll = { screenModel.selectAll(screenModel.activeCategoryIndex) }, onClickSelectAll = { screenModel.selectAll(screenModel.activeCategoryIndex) },
onClickInvertSelection = { screenModel.invertSelection(screenModel.activeCategoryIndex) }, onClickInvertSelection = { screenModel.invertSelection(screenModel.activeCategoryIndex) },
onClickFilter = { screenModel.showSettingsDialog() }, onClickFilter = { screenModel.showSettingsDialog() },
onClickRefresh = { onClickRefresh(null) }, onClickRefresh = { onClickRefresh(state.categories[screenModel.activeCategoryIndex]) },
onClickGlobalUpdate = { onClickRefresh(null) },
onClickOpenRandomEntry = { onClickOpenRandomEntry = {
scope.launch { scope.launch {
val randomItem = screenModel.getRandomLibraryItemForCurrentCategory() val randomItem = screenModel.getRandomLibraryItemForCurrentCategory()

View file

@ -74,6 +74,7 @@
<string name="action_disable_all">Disable all</string> <string name="action_disable_all">Disable all</string>
<string name="action_edit">Edit</string> <string name="action_edit">Edit</string>
<string name="action_add">Add</string> <string name="action_add">Add</string>
<string name="action_update_category">Update category</string>
<string name="action_open_random_manga">Open random entry</string> <string name="action_open_random_manga">Open random entry</string>
<string name="action_add_category">Add category</string> <string name="action_add_category">Add category</string>
<string name="action_edit_categories">Edit categories</string> <string name="action_edit_categories">Edit categories</string>