@@ -28,6 +28,7 @@ import org.nypl.simplified.books.api.BookFormat
28
28
import org.nypl.simplified.books.book_registry.BookPreviewRegistryType
29
29
import org.nypl.simplified.books.book_registry.BookRegistryReadableType
30
30
import org.nypl.simplified.books.book_registry.BookStatus
31
+ import org.nypl.simplified.books.book_registry.BookStatusEvent
31
32
import org.nypl.simplified.books.controller.api.BooksControllerType
32
33
import org.nypl.simplified.books.covers.BookCoverProviderType
33
34
import org.nypl.simplified.buildconfig.api.BuildConfigurationServiceType
@@ -68,6 +69,7 @@ import org.thepalaceproject.opds.client.OPDSClientRequest.HistoryBehavior.ADD_TO
68
69
import org.thepalaceproject.opds.client.OPDSClientRequest.HistoryBehavior.CLEAR_HISTORY
69
70
import org.thepalaceproject.opds.client.OPDSClientRequest.HistoryBehavior.REPLACE_TIP
70
71
import org.thepalaceproject.opds.client.OPDSClientType
72
+ import org.thepalaceproject.opds.client.OPDSFeedHandleWithoutGroupsType
71
73
import org.thepalaceproject.opds.client.OPDSState
72
74
import org.thepalaceproject.opds.client.OPDSState.Initial
73
75
import org.thepalaceproject.opds.client.OPDSState.LoadedFeedEntry
@@ -106,6 +108,7 @@ sealed class CatalogFragment : Fragment(), MainBackButtonConsumerType {
106
108
private lateinit var bookPreviewRegistry: BookPreviewRegistryType
107
109
private lateinit var bookRegistry: BookRegistryReadableType
108
110
private lateinit var buttonCreator: CatalogButtons
111
+ private lateinit var catalogBookEvents: CatalogBookRegistryEvents
109
112
private lateinit var contentContainer: FrameLayout
110
113
private lateinit var covers: BookCoverProviderType
111
114
private lateinit var feedLoader: FeedLoaderType
@@ -162,6 +165,8 @@ sealed class CatalogFragment : Fragment(), MainBackButtonConsumerType {
162
165
services.requireService(ImageLoaderType ::class .java)
163
166
this .buttonCreator =
164
167
CatalogButtons (this .requireContext(), this .screenSize)
168
+ this .catalogBookEvents =
169
+ services.requireService(CatalogBookRegistryEvents ::class .java)
165
170
166
171
this .opdsClient =
167
172
opdsClients.clientFor(this .catalogPart)
@@ -917,6 +922,38 @@ sealed class CatalogFragment : Fragment(), MainBackButtonConsumerType {
917
922
}
918
923
view.listView.scrollToPosition(feedPosition)
919
924
}
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
+ }
920
957
}
921
958
922
959
private fun onCatalogLogoClicked (
0 commit comments