Skip to content

Instantly share code, notes, and snippets.

View TorkelV's full-sized avatar

Torkel Velure TorkelV

View GitHub Profile
fun addPhrase(phrase: String, translation: String, groupId: String){
if(phrase.isNotEmpty() && translation.isNotEmpty()){
viewmodelScope.launch(Dispatchers.IO){
db.addAll(Phrase(newPhrase, newTranslation))
}
}
}
<Button
android:onClick="@{() -> viewModel.addPhrase(viewModel.phrase, viewModel.translation, viewModel.groupId)}" />
@Database(entities = [Phrase::class, Group::class])
abstract class PhraseDatabase : RoomDatabase() {
abstract fun phraseDao(): PhraseDao
}
@Dao
interface PhraseDao {
@Query("SELECT * FROM phrases WHERE `group` = :groupId")
fun getAll(groupId: String): Flow<List<Phrase>>
val activeGroup = prefs.activeGroup.asLiveData(viewModelScope.coroutineContext)
val phrases: LiveData<List<Phrase>> = activeGroup.switchMap { group ->
db.getAll(group)
.asLiveData(viewModelScope.coroutineContext)
}
val phraseModule = module {
viewModel { PhraseViewModel(get()) }
single<PhraseDatabase> {
Room.databaseBuilder(
get(),
PhraseDatabase::class.java, "database-name"
).build()
}
single { PreferenceService(get()) }
fun provideDao(db: PhraseDatabase): PhraseDao = db.phraseDao()
val canAddNewPhrase: LiveData<Boolean> = Lives.combineLatest(phrase, translation){
phrase, translation -> phrase.isNotEmpty() && translation.isNotEmpty()
}
<Button
android:onClick="@{() -> viewModel.addWord(viewModel.phrase, viewModel.translation, viewModel.groupId)}"
@TorkelV
TorkelV / SnapshotFlow.kt
Last active February 24, 2021 12:05
snapshot_flow
fun collection(path: String) = Firebase.firestore.collection(path)
override fun getLeaders(): Flow<List<User>> {
return collection("users")
.whereGreaterThan("points", 0)
.orderBy("points", Query.Direction.DESCENDING)
.limit(50)
.asFlow().map { snapshots ->
snapshots.map { it.toUserDto().toUser() }
}
fun Query.asFlow(): Flow<QuerySnapshot> {
return callbackFlow {
val callback = addSnapshotListener { querySnapshot, ex ->
if (ex != null) {
close(ex)
} else {
offer(querySnapshot!!)
}
}
awaitClose {
override fun getLeaders(lastVisibleItem: Flow<Int>): Flow<List<User>> =
flow {
val users = mutableListOf<DocumentSnapshot>()
users.addAll(
suspendCoroutine<List<DocumentSnapshot>> { c ->
collection("users")
.whereGreaterThan("points", 0)
.orderBy("points", Query.Direction.DESCENDING)
.limit(25)
.get().addOnSuccessListener {