Advertisement
Guest User

Untitled

a guest
Dec 6th, 2020
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. package com.deeper.orchestra.common.paginator.new
  2.  
  3. import com.google.firebase.firestore.DocumentSnapshot
  4. import com.google.firebase.firestore.MetadataChanges
  5. import com.google.firebase.firestore.Query
  6. import timber.log.Timber
  7. import java.util.concurrent.Semaphore
  8.  
  9. class NewPaginator(
  10. private val queryDesc: Query,
  11. private val initialPageSize: Int,
  12. private val pageSize: Int
  13. ) {
  14.  
  15. private var isOlderPageLoading = false
  16. private var isLastOlderPageLoaded = false
  17. private var lastOlderDocument: DocumentSnapshot? = null
  18. private var olderSemaphore = Semaphore(0)
  19.  
  20. var callback: ((List<DocumentSnapshot>) -> Unit)? = null
  21.  
  22. fun init() {
  23. loadOlderPage(initialPageSize)
  24. }
  25.  
  26. fun loadOlderPage(size: Int = pageSize) {
  27. if (isOlderPageLoading || isLastOlderPageLoaded) {
  28. return
  29. }
  30.  
  31. isOlderPageLoading = true
  32.  
  33. var query = queryDesc
  34.  
  35. if (lastOlderDocument != null) {
  36. query = query.startAfter(lastOlderDocument)
  37. println(lastOlderDocument!!["_uid"])
  38. }
  39.  
  40. query
  41. .limit(size.toLong())
  42. .addSnapshotListener(MetadataChanges.INCLUDE) { value, error ->
  43. if (error != null) {
  44. Timber.e(error)
  45. return@addSnapshotListener
  46. }
  47.  
  48. if (!value!!.metadata.isFromCache) {
  49. lastOlderDocument = value.documents.last()
  50. isLastOlderPageLoaded = value.documents.size < size
  51. callback!!(value.documents)
  52. isOlderPageLoading = false
  53. olderSemaphore.release()
  54. }
  55. }
  56.  
  57. olderSemaphore.acquire()
  58. }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement