Skip to content

Commit 391d609

Browse files
committed
store user groups and circles in room database
Signed-off-by: sowjanyakch <[email protected]>
1 parent 9a6965b commit 391d609

File tree

14 files changed

+221
-64
lines changed

14 files changed

+221
-64
lines changed

app/schemas/com.nextcloud.talk.data.source.local.TalkDatabase/13.json

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"formatVersion": 1,
33
"database": {
44
"version": 13,
5-
"identityHash": "a521f027909f69f4c7d1855f84a2e67f",
5+
"identityHash": "f58d9b51b48ddc5c6f4dc4c742eb5f3f",
66
"entities": [
77
{
88
"tableName": "User",
@@ -738,12 +738,52 @@
738738
]
739739
}
740740
]
741+
},
742+
{
743+
"tableName": "user_circles",
744+
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`displayName` TEXT NOT NULL, PRIMARY KEY(`displayName`))",
745+
"fields": [
746+
{
747+
"fieldPath": "displayName",
748+
"columnName": "displayName",
749+
"affinity": "TEXT",
750+
"notNull": true
751+
}
752+
],
753+
"primaryKey": {
754+
"autoGenerate": false,
755+
"columnNames": [
756+
"displayName"
757+
]
758+
},
759+
"indices": [],
760+
"foreignKeys": []
761+
},
762+
{
763+
"tableName": "user_groups",
764+
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`groups` TEXT NOT NULL, PRIMARY KEY(`groups`))",
765+
"fields": [
766+
{
767+
"fieldPath": "groups",
768+
"columnName": "groups",
769+
"affinity": "TEXT",
770+
"notNull": true
771+
}
772+
],
773+
"primaryKey": {
774+
"autoGenerate": false,
775+
"columnNames": [
776+
"groups"
777+
]
778+
},
779+
"indices": [],
780+
"foreignKeys": []
741781
}
742782
],
743783
"views": [],
744784
"setupQueries": [
745785
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
746-
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'a521f027909f69f4c7d1855f84a2e67f')"
786+
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f58d9b51b48ddc5c6f4dc4c742eb5f3f')"
747787
]
748788
}
749789
}

app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import androidx.activity.OnBackPressedCallback
2121
import androidx.lifecycle.DefaultLifecycleObserver
2222
import androidx.lifecycle.LifecycleOwner
2323
import androidx.lifecycle.ProcessLifecycleOwner
24+
import androidx.lifecycle.lifecycleScope
2425
import autodagger.AutoInjector
2526
import com.google.android.material.snackbar.Snackbar
2627
import com.nextcloud.talk.R
@@ -30,6 +31,7 @@ import com.nextcloud.talk.api.NcApi
3031
import com.nextcloud.talk.application.NextcloudTalkApplication
3132
import com.nextcloud.talk.chat.ChatActivity
3233
import com.nextcloud.talk.conversationlist.ConversationsListActivity
34+
import com.nextcloud.talk.data.database.model.UserGroupsCirclesRepository
3335
import com.nextcloud.talk.data.user.model.User
3436
import com.nextcloud.talk.databinding.ActivityMainBinding
3537
import com.nextcloud.talk.invitation.InvitationsActivity
@@ -46,6 +48,7 @@ import io.reactivex.SingleObserver
4648
import io.reactivex.android.schedulers.AndroidSchedulers
4749
import io.reactivex.disposables.Disposable
4850
import io.reactivex.schedulers.Schedulers
51+
import kotlinx.coroutines.launch
4952
import javax.inject.Inject
5053

5154
@AutoInjector(NextcloudTalkApplication::class)
@@ -58,6 +61,9 @@ class MainActivity : BaseActivity(), ActionBarProvider {
5861
@Inject
5962
lateinit var userManager: UserManager
6063

64+
@Inject
65+
lateinit var userGroupsOrCirclesRepository: UserGroupsCirclesRepository
66+
6167
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
6268
override fun handleOnBackPressed() {
6369
finish()
@@ -146,6 +152,10 @@ class MainActivity : BaseActivity(), ActionBarProvider {
146152
}
147153

148154
private fun handleActionFromContact(intent: Intent) {
155+
lifecycleScope.launch {
156+
val initialized = userGroupsOrCirclesRepository.initialize()
157+
Log.d("MainActivity", "$initialized")
158+
}
149159
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
150160
val cursor = contentResolver.query(intent.data!!, null, null, null, null)
151161

app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -605,10 +605,6 @@ class ChatActivity :
605605
}
606606
}
607607

608-
conversationUser?.let { user ->
609-
chatViewModel.fetchUserData(user)
610-
}
611-
612608
updateRoomTimerHandler(MILLIS_250)
613609

614610
val urlForChatting =
@@ -1068,17 +1064,6 @@ class ChatActivity :
10681064
}
10691065
}
10701066
}
1071-
1072-
lifecycleScope.launch {
1073-
chatViewModel.userGroups.collect { userGroups ->
1074-
messageUtils.setUserGroups(userGroups)
1075-
}
1076-
}
1077-
lifecycleScope.launch {
1078-
chatViewModel.userCircles.collect { userCircles ->
1079-
messageUtils.setUserCircles(userCircles)
1080-
}
1081-
}
10821067
}
10831068

10841069
private fun removeUnreadMessagesMarker() {

app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,4 @@ interface ChatNetworkDataSource {
6666
fun setChatReadMarker(credentials: String, url: String, previousMessageId: Int): Observable<GenericOverall>
6767
suspend fun editChatMessage(credentials: String, url: String, text: String): ChatOverallSingleMessage
6868
suspend fun getOutOfOfficeStatusForUser(credentials: String, baseUrl: String, userId: String): UserAbsenceOverall
69-
suspend fun getUserGroups(user: User): Set<String>
70-
suspend fun getUserCircles(user: User): Set<String>
7169
}

app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -195,25 +195,4 @@ class RetrofitChatNetwork(
195195
ApiUtils.getUrlForOutOfOffice(baseUrl, userId)
196196
)
197197
}
198-
199-
override suspend fun getUserGroups(user: User): Set<String> {
200-
val credentials: String = ApiUtils.getCredentials(user.username, user.token)!!
201-
val response = ncApiCoroutines.getUserGroups(
202-
credentials,
203-
ApiUtils.getUrlForUserGroups(
204-
user.baseUrl!!,
205-
user.userId!!
206-
)
207-
)
208-
return response.ocs?.data?.groups?.toSet() ?: emptySet()
209-
}
210-
211-
override suspend fun getUserCircles(user: User): Set<String> {
212-
val credentials: String = ApiUtils.getCredentials(user.username, user.token)!!
213-
val response = ncApiCoroutines.getUserCircles(
214-
credentials,
215-
ApiUtils.getUrlForUserCircles(user.baseUrl!!)
216-
)
217-
return response.ocs?.data?.map { it.displayName!! }?.toSet() ?: emptySet()
218-
}
219198
}

app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,6 @@ import io.reactivex.schedulers.Schedulers
5050
import kotlinx.coroutines.CoroutineScope
5151
import kotlinx.coroutines.Dispatchers
5252
import kotlinx.coroutines.flow.Flow
53-
import kotlinx.coroutines.flow.MutableStateFlow
54-
import kotlinx.coroutines.flow.StateFlow
55-
import kotlinx.coroutines.flow.asStateFlow
5653
import kotlinx.coroutines.flow.MutableSharedFlow
5754
import kotlinx.coroutines.flow.catch
5855
import kotlinx.coroutines.flow.first
@@ -227,12 +224,6 @@ class ChatViewModel @Inject constructor(
227224
val leaveRoomViewState: LiveData<ViewState>
228225
get() = _leaveRoomViewState
229226

230-
private val _userGroups = MutableStateFlow<Set<String>>(emptySet())
231-
val userGroups: StateFlow<Set<String>> = _userGroups.asStateFlow()
232-
233-
private val _userCircles = MutableStateFlow<Set<String>>(emptySet())
234-
val userCircles: StateFlow<Set<String>> = _userCircles.asStateFlow()
235-
236227
object ChatMessageInitialState : ViewState
237228
object ChatMessageStartState : ViewState
238229
object ChatMessageUpdateState : ViewState
@@ -351,13 +342,6 @@ class ChatViewModel @Inject constructor(
351342
_getReminderExistState.value = GetReminderStateSet
352343
}
353344

354-
fun fetchUserData(user: User) {
355-
viewModelScope.launch {
356-
_userGroups.value = chatNetworkDataSource.getUserGroups(user)
357-
_userCircles.value = chatNetworkDataSource.getUserCircles(user)
358-
}
359-
}
360-
361345
fun deleteReminder(user: User, roomToken: String, messageId: String, chatApiVersion: Int) {
362346
chatNetworkDataSource.deleteReminder(user, roomToken, messageId, chatApiVersion)
363347
.subscribeOn(Schedulers.io())

app/src/main/java/com/nextcloud/talk/dagger/modules/DaosModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package com.nextcloud.talk.dagger.modules
1010
import com.nextcloud.talk.data.database.dao.ChatBlocksDao
1111
import com.nextcloud.talk.data.database.dao.ChatMessagesDao
1212
import com.nextcloud.talk.data.database.dao.ConversationsDao
13+
import com.nextcloud.talk.data.database.dao.UserCirclesOrGroupsDao
1314
import com.nextcloud.talk.data.source.local.TalkDatabase
1415
import dagger.Module
1516
import dagger.Provides
@@ -24,4 +25,7 @@ internal object DaosModule {
2425

2526
@Provides
2627
fun providesChatBlocksDao(database: TalkDatabase): ChatBlocksDao = database.chatBlocksDao()
28+
29+
@Provides
30+
fun providesUserCirclesOrGroups(database: TalkDatabase): UserCirclesOrGroupsDao = database.userCirclesOrGroupsDao()
2731
}

app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import com.nextcloud.talk.conversationlist.data.network.RetrofitConversationsNet
3030
import com.nextcloud.talk.data.database.dao.ChatBlocksDao
3131
import com.nextcloud.talk.data.database.dao.ChatMessagesDao
3232
import com.nextcloud.talk.data.database.dao.ConversationsDao
33+
import com.nextcloud.talk.data.database.dao.UserCirclesOrGroupsDao
34+
import com.nextcloud.talk.data.database.model.UserGroupsCirclesRepository
3335
import com.nextcloud.talk.data.network.NetworkMonitor
3436
import com.nextcloud.talk.data.source.local.TalkDatabase
3537
import com.nextcloud.talk.data.storage.ArbitraryStoragesRepository
@@ -192,4 +194,13 @@ class RepositoryModule {
192194
ncApiCoroutines: NcApiCoroutines,
193195
currentUserProviderNew: CurrentUserProviderNew
194196
): ConversationCreationRepository = ConversationCreationRepositoryImpl(ncApiCoroutines, currentUserProviderNew)
197+
198+
@Provides
199+
fun provideUserGroupsCirclesRepository(
200+
userCirclesOrGroupsDao: UserCirclesOrGroupsDao,
201+
ncApiCoroutines: NcApiCoroutines,
202+
userProvider: CurrentUserProviderNew
203+
): UserGroupsCirclesRepository {
204+
return UserGroupsCirclesRepository(userCirclesOrGroupsDao, ncApiCoroutines, userProvider)
205+
}
195206
}

app/src/main/java/com/nextcloud/talk/dagger/modules/UtilsModule.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ package com.nextcloud.talk.dagger.modules
99

1010
import android.content.Context
1111
import com.nextcloud.talk.utils.DateUtils
12-
import com.nextcloud.talk.utils.message.MessageUtils
1312
import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
1413
import com.nextcloud.talk.utils.permissions.PlatformPermissionUtilImpl
1514
import dagger.Module
@@ -29,10 +28,4 @@ class UtilsModule {
2928
fun provideDateUtils(context: Context): DateUtils {
3029
return DateUtils(context)
3130
}
32-
33-
@Provides
34-
@Reusable
35-
fun provideMessageUtils(context: Context): MessageUtils {
36-
return MessageUtils(context)
37-
}
3831
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Nextcloud Talk - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2025 Your Name <[email protected]>
5+
* SPDX-License-Identifier: GPL-3.0-or-later
6+
*/
7+
8+
package com.nextcloud.talk.data.database.dao
9+
10+
import androidx.room.Dao
11+
import androidx.room.Insert
12+
import androidx.room.OnConflictStrategy
13+
import androidx.room.Query
14+
import com.nextcloud.talk.data.database.model.UserCirclesEntity
15+
import com.nextcloud.talk.data.database.model.UserGroupsEntity
16+
17+
@Dao
18+
interface UserCirclesOrGroupsDao {
19+
20+
@Query("SELECT groups FROM user_groups")
21+
fun getUserGroups(): List<UserGroupsEntity>
22+
23+
@Insert(onConflict = OnConflictStrategy.REPLACE)
24+
suspend fun insertUserGroups(groups:List<UserGroupsEntity>)
25+
26+
@Query("SELECT displayName FROM user_circles")
27+
fun getUserCircles(): List<UserCirclesEntity>
28+
29+
@Insert(onConflict = OnConflictStrategy.REPLACE)
30+
suspend fun insertUserCircles(circles: List<UserCirclesEntity>)
31+
32+
}

0 commit comments

Comments
 (0)