Skip to content

Commit

Permalink
Improved Search
Browse files Browse the repository at this point in the history
- Uncommented out fetchOpenConversations
- Added fetchUsers to conversationList
- Made the messages appear first

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
  • Loading branch information
rapterjet2004 committed Feb 3, 2025
1 parent 42005a3 commit 355eec9
Showing 1 changed file with 87 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ import com.nextcloud.talk.account.WebViewLoginActivity
import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.activities.CallActivity
import com.nextcloud.talk.activities.MainActivity
import com.nextcloud.talk.adapters.items.ContactItem
import com.nextcloud.talk.adapters.items.ConversationItem
import com.nextcloud.talk.adapters.items.GenericTextHeaderItem
import com.nextcloud.talk.adapters.items.LoadMoreResultsItem
Expand All @@ -80,6 +81,8 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.contacts.ContactsActivityCompose
import com.nextcloud.talk.contacts.ContactsUiState
import com.nextcloud.talk.contacts.ContactsViewModel
import com.nextcloud.talk.conversationlist.viewmodels.ConversationsListViewModel
import com.nextcloud.talk.data.network.NetworkMonitor
import com.nextcloud.talk.data.user.model.User
Expand All @@ -95,6 +98,9 @@ import com.nextcloud.talk.messagesearch.MessageSearchHelper
import com.nextcloud.talk.messagesearch.MessageSearchHelper.MessageSearchResults
import com.nextcloud.talk.models.domain.ConversationModel
import com.nextcloud.talk.models.json.conversations.ConversationEnums
import com.nextcloud.talk.models.json.conversations.RoomsOverall
import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter
import com.nextcloud.talk.models.json.participants.Participant
import com.nextcloud.talk.repositories.unifiedsearch.UnifiedSearchRepository
import com.nextcloud.talk.settings.SettingsActivity
import com.nextcloud.talk.ui.dialog.ChooseAccountDialogFragment
Expand Down Expand Up @@ -178,6 +184,9 @@ class ConversationsListActivity :
@Inject
lateinit var networkMonitor: NetworkMonitor

@Inject
lateinit var contactsViewModel: ContactsViewModel

lateinit var conversationsListViewModel: ConversationsListViewModel

override val appBarLayoutType: AppBarLayoutType
Expand Down Expand Up @@ -387,6 +396,45 @@ class ConversationsListActivity :
setConversationList(list)
}.collect()
}

lifecycleScope.launch {
contactsViewModel.contactsViewState.onEach { state ->
when (state) {
is ContactsUiState.Success -> {
if (state.contacts.isNullOrEmpty()) return@onEach

val userItems: MutableList<AbstractFlexibleItem<*>> = ArrayList()
val actorTypeConverter = EnumActorTypeConverter()
var genericTextHeaderItem: GenericTextHeaderItem
for (autocompleteUser in state.contacts) {
val headerTitle = resources!!.getString(R.string.nc_user)
if (!callHeaderItems.containsKey(headerTitle)) {
genericTextHeaderItem = GenericTextHeaderItem(headerTitle, viewThemeUtils)
callHeaderItems[headerTitle] = genericTextHeaderItem
}

val participant = Participant()
participant.actorId = autocompleteUser.id
participant.actorType = actorTypeConverter.getFromString(autocompleteUser.source)
participant.displayName = autocompleteUser.label

val contactItem = ContactItem(
participant,
currentUser!!,
callHeaderItems[headerTitle],
viewThemeUtils
)

userItems.add(contactItem)
}

searchableConversationItems.addAll(userItems)
}

else -> {}
}
}.collect()
}
}

private fun setConversationList(list: List<ConversationModel>) {
Expand All @@ -411,6 +459,9 @@ class ConversationsListActivity :
intArrayOf(ApiUtils.API_V4, ApiUtils.API_V3, 1)
)
fetchOpenConversations(apiVersion)

// Get users
fetchUsers()
}

private fun hasFilterEnabled(): Boolean {
Expand Down Expand Up @@ -944,40 +995,45 @@ class ConversationsListActivity :
)
) {
val openConversationItems: MutableList<AbstractFlexibleItem<*>> = ArrayList()
// openConversationsQueryDisposable = ncApi.getOpenConversations(
// credentials,
// ApiUtils.getUrlForOpenConversations(apiVersion, currentUser!!.baseUrl!!)
// )
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe({ (ocs): RoomsOverall ->
// for (conversation in ocs!!.data!!) {
// val headerTitle = resources!!.getString(R.string.openConversations)
// var genericTextHeaderItem: GenericTextHeaderItem
// if (!callHeaderItems.containsKey(headerTitle)) {
// genericTextHeaderItem = GenericTextHeaderItem(headerTitle, viewThemeUtils)
// callHeaderItems[headerTitle] = genericTextHeaderItem
// }
// val conversationItem = ConversationItem(
// conversation,
// currentUser!!,
// this,
// callHeaderItems[headerTitle],
// viewThemeUtils
// )
// openConversationItems.add(conversationItem)
// }
// searchableConversationItems.addAll(openConversationItems)
// }, { throwable: Throwable ->
// Log.e(TAG, "fetchData - getRooms - ERROR", throwable)
// handleHttpExceptions(throwable)
// dispose(openConversationsQueryDisposable)
// }) { dispose(openConversationsQueryDisposable) }
openConversationsQueryDisposable = ncApi.getOpenConversations(
credentials,
ApiUtils.getUrlForOpenConversations(apiVersion, currentUser!!.baseUrl!!),
""
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ (ocs): RoomsOverall ->
for (conversation in ocs!!.data!!) {
val headerTitle = resources!!.getString(R.string.openConversations)
var genericTextHeaderItem: GenericTextHeaderItem
if (!callHeaderItems.containsKey(headerTitle)) {
genericTextHeaderItem = GenericTextHeaderItem(headerTitle, viewThemeUtils)
callHeaderItems[headerTitle] = genericTextHeaderItem
}
val conversationItem = ConversationItem(
ConversationModel.mapToConversationModel(conversation, currentUser!!),
currentUser!!,
this,
callHeaderItems[headerTitle],
viewThemeUtils
)
openConversationItems.add(conversationItem)
}
searchableConversationItems.addAll(openConversationItems)
}, { throwable: Throwable ->
Log.e(TAG, "fetchData - getRooms - ERROR", throwable)
handleHttpExceptions(throwable)
dispose(openConversationsQueryDisposable)
}) { dispose(openConversationsQueryDisposable) }
} else {
Log.d(TAG, "no open conversations fetched because of missing capability")
}
}

private fun fetchUsers() {
contactsViewModel.getContactsFromSearchParams()
}

private fun handleHttpExceptions(throwable: Throwable) {
if (throwable is HttpException) {
when (throwable.code()) {
Expand Down Expand Up @@ -1923,8 +1979,8 @@ class ConversationsListActivity :
if (results.hasMore) {
adapterItems.add(LoadMoreResultsItem)
}
// add unified search result at the end of the list
adapter!!.addItems(adapter!!.mainItemCount + adapter!!.scrollableHeaders.size, adapterItems)

adapter!!.addItems(0, adapterItems)
binding.recyclerView?.scrollToPosition(0)
}
}
Expand Down

0 comments on commit 355eec9

Please sign in to comment.