meili-epfl/Meili

View on GitHub
app/src/main/java/com/github/epfl/meili/posts/feed/FeedViewModel.kt

Summary

Maintainability
A
0 mins
Test Coverage
A
92%
package com.github.epfl.meili.posts.feed

import com.github.epfl.meili.database.AtomicPostFirestoreDatabase
import com.github.epfl.meili.database.FirestoreDatabase.Companion.MAX_EQUALITY_CLAUSES
import com.github.epfl.meili.models.PointOfInterest
import com.github.epfl.meili.models.Post
import com.github.epfl.meili.poi.PoiService
import com.github.epfl.meili.posts.PostListViewModel
import com.github.epfl.meili.util.PoiServiceViewModel
import com.google.android.gms.maps.model.LatLng
import com.google.maps.android.SphericalUtil.computeDistanceBetween

class FeedViewModel: PostListViewModel(), PoiServiceViewModel {
    override var poiService: PoiService? = null
    override var nbCurrentRequests: Int = 0
    override var lastUserLocation: LatLng? = null

    private var databaseInitialized = false

    override fun onSuccessPoiReceived(poiList: List<PointOfInterest>) {
        super.onSuccessPoiReceived(poiList)

        val nearestPoiKeys = poiList.sortedBy {
            computeDistanceBetween(it.getLatLng(), lastUserLocation!!)
        }.take(MAX_EQUALITY_CLAUSES).map { it.uid }

        if (nearestPoiKeys.isNotEmpty()) {
            if (databaseInitialized) {
                super.database.onDestroy()
            }

            super.initDatabase(AtomicPostFirestoreDatabase("forum") {
                it.whereIn(Post.POI_KEY_FIELD, nearestPoiKeys)
            })
            databaseInitialized = true
        }
    }
}