Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.deeper.orchestra.common.paginator.new
- import com.google.firebase.firestore.DocumentSnapshot
- import com.google.firebase.firestore.MetadataChanges
- import com.google.firebase.firestore.Query
- import timber.log.Timber
- import java.util.concurrent.Semaphore
- class NewPaginator(
- private val queryDesc: Query,
- private val initialPageSize: Int,
- private val pageSize: Int
- ) {
- private var isOlderPageLoading = false
- private var isLastOlderPageLoaded = false
- private var lastOlderDocument: DocumentSnapshot? = null
- private var olderSemaphore = Semaphore(0)
- var callback: ((List<DocumentSnapshot>) -> Unit)? = null
- fun init() {
- loadOlderPage(initialPageSize)
- }
- fun loadOlderPage(size: Int = pageSize) {
- if (isOlderPageLoading || isLastOlderPageLoaded) {
- return
- }
- isOlderPageLoading = true
- var query = queryDesc
- if (lastOlderDocument != null) {
- query = query.startAfter(lastOlderDocument)
- println(lastOlderDocument!!["_uid"])
- }
- query
- .limit(size.toLong())
- .addSnapshotListener(MetadataChanges.INCLUDE) { value, error ->
- if (error != null) {
- Timber.e(error)
- return@addSnapshotListener
- }
- if (!value!!.metadata.isFromCache) {
- lastOlderDocument = value.documents.last()
- isLastOlderPageLoaded = value.documents.size < size
- callback!!(value.documents)
- isOlderPageLoading = false
- olderSemaphore.release()
- }
- }
- olderSemaphore.acquire()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement