Skip to content

Commit 2012d08

Browse files
committed
Refresh My Books and Reservations on book additions/removals
Affects: https://ebce-lyrasis.atlassian.net/browse/PP-2630 Affects: https://ebce-lyrasis.atlassian.net/browse/PP-2629
1 parent 0a38807 commit 2012d08

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

simplified-ui/src/main/java/org/nypl/simplified/ui/catalog/CatalogFragment.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import org.nypl.simplified.books.api.BookFormat
2828
import org.nypl.simplified.books.book_registry.BookPreviewRegistryType
2929
import org.nypl.simplified.books.book_registry.BookRegistryReadableType
3030
import org.nypl.simplified.books.book_registry.BookStatus
31+
import org.nypl.simplified.books.book_registry.BookStatusEvent
3132
import org.nypl.simplified.books.controller.api.BooksControllerType
3233
import org.nypl.simplified.books.covers.BookCoverProviderType
3334
import org.nypl.simplified.buildconfig.api.BuildConfigurationServiceType
@@ -68,6 +69,7 @@ import org.thepalaceproject.opds.client.OPDSClientRequest.HistoryBehavior.ADD_TO
6869
import org.thepalaceproject.opds.client.OPDSClientRequest.HistoryBehavior.CLEAR_HISTORY
6970
import org.thepalaceproject.opds.client.OPDSClientRequest.HistoryBehavior.REPLACE_TIP
7071
import org.thepalaceproject.opds.client.OPDSClientType
72+
import org.thepalaceproject.opds.client.OPDSFeedHandleWithoutGroupsType
7173
import org.thepalaceproject.opds.client.OPDSState
7274
import org.thepalaceproject.opds.client.OPDSState.Initial
7375
import org.thepalaceproject.opds.client.OPDSState.LoadedFeedEntry
@@ -106,6 +108,7 @@ sealed class CatalogFragment : Fragment(), MainBackButtonConsumerType {
106108
private lateinit var bookPreviewRegistry: BookPreviewRegistryType
107109
private lateinit var bookRegistry: BookRegistryReadableType
108110
private lateinit var buttonCreator: CatalogButtons
111+
private lateinit var catalogBookEvents: CatalogBookRegistryEvents
109112
private lateinit var contentContainer: FrameLayout
110113
private lateinit var covers: BookCoverProviderType
111114
private lateinit var feedLoader: FeedLoaderType
@@ -162,6 +165,8 @@ sealed class CatalogFragment : Fragment(), MainBackButtonConsumerType {
162165
services.requireService(ImageLoaderType::class.java)
163166
this.buttonCreator =
164167
CatalogButtons(this.requireContext(), this.screenSize)
168+
this.catalogBookEvents =
169+
services.requireService(CatalogBookRegistryEvents::class.java)
165170

166171
this.opdsClient =
167172
opdsClients.clientFor(this.catalogPart)
@@ -917,6 +922,38 @@ sealed class CatalogFragment : Fragment(), MainBackButtonConsumerType {
917922
}
918923
view.listView.scrollToPosition(feedPosition)
919924
}
925+
926+
this.setupRefreshForLocalFeeds(feedHandle)
927+
}
928+
929+
/**
930+
* For local feeds (such as My Books, Reservations, etc), we want to refresh the feed when
931+
* a significant event occurs such as a book being added to or deleted from the registry.
932+
*/
933+
934+
private fun setupRefreshForLocalFeeds(
935+
feedHandle: OPDSFeedHandleWithoutGroupsType
936+
) {
937+
when (this.catalogPart) {
938+
CATALOG -> {
939+
// Nothing to do.
940+
}
941+
BOOKS, HOLDS -> {
942+
val subscription =
943+
this.catalogBookEvents.events.subscribe { event ->
944+
when (event) {
945+
is BookStatusEvent.BookStatusEventChanged -> {
946+
// Nothing to do.
947+
}
948+
is BookStatusEvent.BookStatusEventAdded,
949+
is BookStatusEvent.BookStatusEventRemoved -> {
950+
feedHandle.refresh()
951+
}
952+
}
953+
}
954+
this.perViewSubscriptions.add(AutoCloseable { subscription.dispose() })
955+
}
956+
}
920957
}
921958

922959
private fun onCatalogLogoClicked(

0 commit comments

Comments
 (0)