Skip to content

Commit

Permalink
Sync bookmarks on WearOS instead of merging them (#295)
Browse files Browse the repository at this point in the history
  • Loading branch information
martinbonnin authored Apr 21, 2024
1 parent a3bad30 commit a614cdc
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
Expand All @@ -33,7 +32,6 @@ import com.google.firebase.messaging.FirebaseMessaging
import dev.gitlive.firebase.Firebase
import dev.gitlive.firebase.auth.GoogleAuthProvider
import dev.gitlive.firebase.auth.auth
import fr.androidmakers.store.firebase.toUser
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -134,7 +132,7 @@ class MainActivity : AppCompatActivity() {
userRepository.setUser(result.user)
val uid = result.user?.uid
if (uid != null) {
syncBookmarksUseCase(uid)
mergeBookmarksUseCase(uid)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ class BookmarksDataStoreRepository(
save()
}

override suspend fun setBookmarks(bookmarks: Set<String>) {
bookmarkedSessions.clear()
bookmarkedSessions.addAll(bookmarks)
selectedSessionIds.value = mutableSetOf<String>().apply { addAll(bookmarkedSessions) }
save()
}

override fun getFavoriteSessions(): Flow<Set<String>> {
return selectedSessionIds
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,12 @@ import fr.androidmakers.domain.interactor.GetPartnersUseCase
import fr.androidmakers.domain.interactor.OpenCocUseCase
import fr.androidmakers.domain.interactor.OpenFaqUseCase
import fr.androidmakers.domain.interactor.OpenLinkUseCase
import fr.androidmakers.domain.interactor.OpenMapUseCase
import fr.androidmakers.domain.interactor.OpenPartnerLinkUseCase
import fr.androidmakers.domain.interactor.OpenXAccountUseCase
import fr.androidmakers.domain.interactor.OpenXHashtagUseCase
import fr.androidmakers.domain.interactor.OpenYoutubeUseCase
import fr.androidmakers.domain.interactor.SetSessionBookmarkUseCase
import fr.androidmakers.domain.interactor.ShareSessionUseCase
import fr.androidmakers.domain.interactor.SyncBookmarksUseCase
import fr.androidmakers.domain.interactor.MergeBookmarksUseCase
import org.koin.core.module.Module
import org.koin.dsl.module

Expand All @@ -26,7 +24,7 @@ val domainModule = module {
factory { GetAgendaUseCase(get(), get(), get()) }
factory { GetConferenceVenueUseCase(get()) }
factory { GetAfterpartyVenueUseCase(get()) }
factory { SyncBookmarksUseCase(get(), get()) }
factory { MergeBookmarksUseCase(get(), get()) }
factory { OpenFaqUseCase(get()) }
factory { OpenCocUseCase(get()) }
factory { OpenYoutubeUseCase(get()) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import fr.androidmakers.domain.repo.BookmarksRepository
import fr.androidmakers.domain.repo.SessionsRepository
import kotlinx.coroutines.flow.firstOrNull

class SyncBookmarksUseCase(
class MergeBookmarksUseCase(
private val bookmarksRepository: BookmarksRepository,
private val sessionsRepository: SessionsRepository
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ interface BookmarksRepository {
fun isBookmarked(id: String): Flow<Boolean>

suspend fun merge(bookmarks: Set<String>)
suspend fun setBookmarks(bookmarks: Set<String>)

// TODO Temporary for iOS
fun getFavoriteSessions(): Flow<Set<String>>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.androidmakers.ui.common.navigation

import fr.androidmakers.domain.interactor.SyncBookmarksUseCase
import fr.androidmakers.domain.interactor.MergeBookmarksUseCase
import fr.androidmakers.domain.repo.UserRepository
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject

class UserData: KoinComponent {
val userRepository: UserRepository by inject()
val syncBookmarksUseCase: SyncBookmarksUseCase by inject()
val mergeBookmarksUseCase: MergeBookmarksUseCase by inject()
}


Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module

val androidViewModelModule = module {
viewModel { MainViewModel(get(), get(), get(), get(), get(), get()) }
viewModel { MainViewModel(get(), get(), get(), get(), get(), get(), get()) }
viewModel { SettingsViewModel(get(), get()) }
viewModel { SessionDetailViewModel(get(), get(), get(), get(), get(), get()) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ import dev.gitlive.firebase.Firebase
import dev.gitlive.firebase.auth.auth
import fr.androidmakers.domain.interactor.GetAgendaUseCase
import fr.androidmakers.domain.interactor.GetFavoriteSessionsUseCase
import fr.androidmakers.domain.interactor.SyncBookmarksUseCase
import fr.androidmakers.domain.interactor.MergeBookmarksUseCase
import fr.androidmakers.domain.model.Agenda
import fr.androidmakers.domain.model.User
import fr.androidmakers.domain.repo.BookmarksRepository
import fr.androidmakers.domain.repo.SessionsRepository
import fr.androidmakers.domain.repo.UserRepository
import fr.paug.androidmakers.wear.applicationContext
import fr.paug.androidmakers.wear.data.LocalPreferencesRepository
Expand All @@ -28,6 +30,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.consumeAsFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
Expand All @@ -50,7 +53,8 @@ class MainViewModel(
private val userRepository: UserRepository,
localPreferencesRepository: LocalPreferencesRepository,
getAgendaUseCase: GetAgendaUseCase,
private val syncBookmarksUseCase: SyncBookmarksUseCase,
private val bookmarksRepository: BookmarksRepository,
private val sessionsRepository: SessionsRepository,
getFavoriteSessionsUseCase: GetFavoriteSessionsUseCase,
) : AndroidViewModel(application) {
private val _user = MutableStateFlow<User?>(null)
Expand All @@ -71,7 +75,10 @@ class MainViewModel(
val currentUser = _user.value
if (currentUser != null) {
Log.d(TAG, "Syncing bookmarks")
syncBookmarksUseCase(currentUser.id)
val bookmarks = sessionsRepository.getBookmarks(currentUser.id).first()
if (bookmarks.isSuccess) {
bookmarksRepository.setBookmarks(bookmarks.getOrThrow())
}
Log.d(TAG, "Bookmarks synced")
}
}
Expand Down

0 comments on commit a614cdc

Please sign in to comment.