open-ar-samples/cloud-anchors/app/src/main/java/it/norangeb/cloudanchors/CloudAnchorsHelper.kt

77 lines
2.4 KiB
Kotlin

/*
* Copyright (c) 2019, norangebit
*
* This file is part of cloud-anchors.
*
* cloud-anchors is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* cloud-anchors is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with cloud-anchors. If not, see <http://www.gnu.org/licenses/>
*
*/
package it.norangeb.cloudanchors
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.firestore.SetOptions
class CloudAnchorsHelper {
private val fireStoreDb = FirebaseFirestore.getInstance()
private var nextCode = 0
init {
fireStoreDb.collection(COLLECTION)
.document(DOCUMENT)
.get()
.addOnSuccessListener {
val nCode = it.data?.get(NEXT_CODE) ?: return@addOnSuccessListener
nextCode = nCode.toString().toInt()
}
}
fun getShortCode(cloudAnchorId: String): Int {
fireStoreDb.collection(COLLECTION)
.document(DOCUMENT)
.set(
mapOf(Pair(nextCode.toString(), cloudAnchorId)),
SetOptions.merge())
uploadNextCode(nextCode+1)
return nextCode++
}
private fun uploadNextCode(nextCode: Int) {
fireStoreDb.collection(COLLECTION)
.document(DOCUMENT)
.set(
mapOf(Pair(NEXT_CODE, nextCode)),
SetOptions.merge()
)
}
fun getCloudAnchorId(
shortCode: Int,
onSuccess: (String) -> Unit
) {
fireStoreDb.collection(COLLECTION)
.document(DOCUMENT)
.get()
.addOnSuccessListener {
val x = it.data?.get(shortCode.toString()) as String
onSuccess(x)
}
}
companion object {
private const val COLLECTION = "short_codes"
private const val DOCUMENT = "short_codes_doc"
private const val NEXT_CODE = "next_short_code"
}
}