@@ -38,7 +38,6 @@ import com.nextcloud.talk.account.ServerSelectionActivity
3838import com.nextcloud.talk.activities.BaseActivity
3939import com.nextcloud.talk.activities.CallActivity
4040import com.nextcloud.talk.activities.MainActivity
41- import com.nextcloud.talk.api.NcApi
4241import com.nextcloud.talk.api.NcApiCoroutines
4342import com.nextcloud.talk.application.NextcloudTalkApplication
4443import com.nextcloud.talk.conversation.RenameConversationDialogFragment
@@ -63,7 +62,6 @@ import com.nextcloud.talk.jobs.LeaveConversationWorker
6362import com.nextcloud.talk.jobs.UploadAndShareFilesWorker
6463import com.nextcloud.talk.models.domain.ConversationModel
6564import com.nextcloud.talk.models.domain.SearchMessageEntry
66- import com.nextcloud.talk.models.json.generic.GenericOverall
6765import com.nextcloud.talk.models.json.conversations.ConversationEnums
6866import com.nextcloud.talk.settings.SettingsActivity
6967import com.nextcloud.talk.threadsoverview.ThreadsOverviewActivity
@@ -106,10 +104,6 @@ import kotlinx.coroutines.flow.collect
106104import kotlinx.coroutines.flow.onEach
107105import kotlinx.coroutines.launch
108106import kotlinx.coroutines.withContext
109- import io.reactivex.Observer
110- import io.reactivex.android.schedulers.AndroidSchedulers
111- import io.reactivex.disposables.Disposable
112- import io.reactivex.schedulers.Schedulers
113107import org.greenrobot.eventbus.Subscribe
114108import org.greenrobot.eventbus.ThreadMode
115109import retrofit2.HttpException
@@ -124,9 +118,6 @@ class ConversationsListActivity : BaseActivity() {
124118 @Inject
125119 lateinit var userManager: UserManager
126120
127- @Inject
128- lateinit var ncApi: NcApi
129-
130121 @Inject
131122 lateinit var ncApiCoroutines: NcApiCoroutines
132123
@@ -424,6 +415,24 @@ class ConversationsListActivity : BaseActivity() {
424415 if (filterState[ARCHIVE ] == true ) showUnreadBubbleState.value = false
425416 }
426417 }
418+
419+ lifecycleScope.launch {
420+ conversationsListViewModel.readUnreadState.collect { state ->
421+ when (state) {
422+ is ConversationsListViewModel .ConversationReadUnreadUiState .Success -> {
423+ fetchRooms()
424+ val resId = if (state.isMarkedRead) R .string.marked_as_read else R .string.marked_as_unread
425+ showSnackbar(String .format(resources.getString(resId), state.conversationDisplayName))
426+ conversationsListViewModel.resetReadUnreadState()
427+ }
428+ is ConversationsListViewModel .ConversationReadUnreadUiState .Error -> {
429+ showSnackbar(resources.getString(R .string.nc_common_error_sorry))
430+ conversationsListViewModel.resetReadUnreadState()
431+ }
432+ ConversationsListViewModel .ConversationReadUnreadUiState .None -> { /* no-op */ }
433+ }
434+ }
435+ }
427436 }
428437
429438 private fun handleNoteToSelfShortcut (noteToSelfAvailable : Boolean , noteToSelfToken : String ) {
@@ -1000,57 +1009,11 @@ class ConversationsListActivity : BaseActivity() {
10001009 }
10011010
10021011 private fun markConversationAsUnread (conversation : ConversationModel ) {
1003- val apiVersion = ApiUtils .getChatApiVersion(
1004- currentUser?.capabilities!! .spreedCapability!! ,
1005- intArrayOf(ApiUtils .API_V1 )
1006- )
1007- ncApi.markRoomAsUnread(
1008- credentials!! ,
1009- ApiUtils .getUrlForChatReadMarker(apiVersion, currentUser?.baseUrl!! , conversation.token!! )
1010- )
1011- .subscribeOn(Schedulers .io())
1012- .observeOn(AndroidSchedulers .mainThread())
1013- .retry(1 )
1014- .subscribe(object : Observer <GenericOverall > {
1015- override fun onSubscribe (d : Disposable ) { /* unused */ }
1016- override fun onNext (t : GenericOverall ) {
1017- fetchRooms()
1018- showSnackbar(
1019- String .format(resources.getString(R .string.marked_as_unread), conversation.displayName)
1020- )
1021- }
1022- override fun onError (e : Throwable ) {
1023- showSnackbar(resources.getString(R .string.nc_common_error_sorry))
1024- }
1025- override fun onComplete () { /* unused */ }
1026- })
1012+ conversationsListViewModel.markConversationAsUnread(conversation)
10271013 }
10281014
10291015 private fun markConversationAsRead (conversation : ConversationModel ) {
1030- val messageId = if (conversation.remoteServer.isNullOrEmpty()) conversation.lastMessage?.id else null
1031- val apiVersion = ApiUtils .getChatApiVersion(
1032- currentUser?.capabilities!! .spreedCapability!! ,
1033- intArrayOf(ApiUtils .API_V1 )
1034- )
1035- ncApi.setChatReadMarker(
1036- credentials!! ,
1037- ApiUtils .getUrlForChatReadMarker(apiVersion, currentUser?.baseUrl!! , conversation.token!! ),
1038- messageId?.toInt()
1039- )
1040- .subscribeOn(Schedulers .io())
1041- .observeOn(AndroidSchedulers .mainThread())
1042- .retry(1 )
1043- .subscribe(object : Observer <GenericOverall > {
1044- override fun onSubscribe (d : Disposable ) { /* unused */ }
1045- override fun onNext (t : GenericOverall ) {
1046- fetchRooms()
1047- showSnackbar(String .format(resources.getString(R .string.marked_as_read), conversation.displayName))
1048- }
1049- override fun onError (e : Throwable ) {
1050- showSnackbar(resources.getString(R .string.nc_common_error_sorry))
1051- }
1052- override fun onComplete () { /* unused */ }
1053- })
1016+ conversationsListViewModel.markConversationAsRead(conversation)
10541017 }
10551018
10561019 private fun renameConversation (conversation : ConversationModel ) {
0 commit comments