Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ sealed interface Address : Parcelable, Comparable<Address> {
/**
* A marker interface for addresses that represent a group-like entity.
*/
sealed interface GroupLike : Address
sealed interface GroupLike : Conversable

sealed interface WithAccountId {
val accountId: AccountId
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,6 @@ public void postKey(SQLiteConnection connection) {
);

this.jsonProvider = jsonProvider;

Log.d(TAG, "SQLCipherOpenHelper created with database secret: " + databaseSecret.asString());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ class HomeActivity : ScreenLockActionBarActivity(),
is GlobalSearchAdapter.Model.GroupConversation -> ConversationActivityV2
.createIntent(
this,
address = Address.fromSerialized(model.groupId) as Address.Conversable
address = model.address
)

else -> {
Expand Down Expand Up @@ -481,7 +481,7 @@ class HomeActivity : ScreenLockActionBarActivity(),
.map {
GlobalSearchAdapter.Model.Contact(
contact = it.value,
isSelf = it.value.address.address == publicKey,
isSelf = it.value.isSelf,
showProBadge = it.value.proStatus.shouldShowProBadge()
)
}
Expand All @@ -494,8 +494,9 @@ class HomeActivity : ScreenLockActionBarActivity(),
isSelf = it.isSelf,
showProBadge = it.proStatus.shouldShowProBadge()
) } +
threads.map {
GlobalSearchAdapter.Model.GroupConversation(it, showProBadge = recipientRepository.getRecipientSync(it.encodedId.toAddress()).proStatus.shouldShowProBadge())
threads.mapNotNull {
if(it.address is Address.GroupLike) GlobalSearchAdapter.Model.GroupConversation(it)
else null
}

private val GlobalSearchResult.messageResults: List<GlobalSearchAdapter.Model> get() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,11 @@ import org.session.libsession.messaging.MessagingModuleConfiguration
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.GroupRecord
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsession.utilities.recipients.RecipientData
import org.session.libsession.utilities.recipients.displayName
import org.session.libsession.utilities.recipients.shouldShowProBadge
import org.session.libsignal.utilities.AccountId
import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.search.model.MessageResult
import org.thoughtcrime.securesms.ui.GetString
import org.thoughtcrime.securesms.util.DateUtils
Expand Down Expand Up @@ -147,6 +150,8 @@ class GlobalSearchAdapter(
onContactLongPressed(model)
true
}
} else {
binding.root.setOnLongClickListener(null)
}
}
}
Expand All @@ -167,26 +172,39 @@ class GlobalSearchAdapter(
this(contact.address as Address.Conversable, contact.displayName(false), isSelf, showProBadge)
}
data class GroupConversation(
val isLegacy: Boolean,
val groupId: String,
val address: Address.GroupLike,
val title: String,
val legacyMembersString: String?,
val showProBadge: Boolean
) : Model {
constructor(groupRecord: GroupRecord, showProBadge: Boolean):
constructor(recipient: Recipient):
this(
isLegacy = groupRecord.isLegacyGroup,
groupId = groupRecord.encodedId,
title = groupRecord.title,
legacyMembersString = if (groupRecord.isLegacyGroup) {
val recipients = groupRecord.members.map {
MessagingModuleConfiguration.shared.recipientRepository.getRecipientSync(it)
address = recipient.address as Address.GroupLike,
title = recipient.displayName(),
legacyMembersString = when (recipient.address) {
is Address.LegacyGroup -> {
val data = (recipient.data as? RecipientData.LegacyGroup)
if(data == null) null
else {
if(data.secondMember != null) "${data.firstMember.displayName()}, ${data.secondMember.displayName()}".plus(
if(data.members.size > 2) ", ..." else ""
)
else data.firstMember.displayName().plus(
if(data.members.size > 1) ", ..." else ""
)
}
}

is Address.Group -> {
val data = (recipient.data as? RecipientData.Group)
data?.partial?.members?.joinToString(", ") { it.name }
}

else -> {
null
}
recipients.joinToString(transform = { it.searchName })
} else {
null
},
showProBadge = showProBadge
showProBadge = recipient.proStatus.shouldShowProBadge()
)
}
data class Message(val messageResult: MessageResult, val unread: Int, val isSelf: Boolean, val showProBadge: Boolean) : Model
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.recyclerview.widget.DiffUtil
import network.loki.messenger.R
import org.session.libsession.messaging.MessagingModuleConfiguration
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.isLegacyGroup
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsession.utilities.recipients.displayName
import org.session.libsession.utilities.truncateIdForDisplay
Expand Down Expand Up @@ -111,10 +112,9 @@ private fun ComposeView.setupTitleWithBadge(title: String, showProBadge: Boolean

fun ContentView.bindModel(query: String?, model: GroupConversation) {
binding.searchResultProfilePicture.isVisible = true
binding.searchResultSubtitle.isVisible = model.isLegacy
binding.searchResultTimestamp.isVisible = false
val threadRecipient = MessagingModuleConfiguration.shared.recipientRepository.getRecipientSync(
Address.fromSerialized(model.groupId)
model.address
)

binding.searchResultProfilePicture.setThemedContent {
Expand All @@ -130,7 +130,10 @@ fun ContentView.bindModel(query: String?, model: GroupConversation) {
)

if (model.legacyMembersString != null) {
binding.searchResultSubtitle.isVisible = true
binding.searchResultSubtitle.text = getHighlight(query, model.legacyMembersString)
} else {
binding.searchResultSubtitle.isVisible = false
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.search.model.SearchResult
data class GlobalSearchResult(
val query: String,
val contacts: List<Recipient> = emptyList(),
val threads: List<GroupRecord> = emptyList(),
val threads: List<Recipient> = emptyList(),
val messages: List<MessageResult> = emptyList(),
val showNoteToSelf: Boolean = false
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,20 @@ package org.thoughtcrime.securesms.search
import android.content.Context
import android.database.Cursor
import dagger.hilt.android.qualifiers.ApplicationContext
import network.loki.messenger.libsession_util.util.GroupInfo
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.Address.Companion.fromSerialized
import org.session.libsession.utilities.Address.Companion.toAddress
import org.session.libsession.utilities.ConfigFactoryProtocol
import org.session.libsession.utilities.GroupRecord
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.concurrent.SignalExecutors
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsession.utilities.recipients.RecipientData
import org.session.libsession.utilities.toGroupString
import org.session.libsession.utilities.recipients.displayName
import org.session.libsignal.utilities.AccountId
import org.thoughtcrime.securesms.contacts.ContactAccessor
import org.thoughtcrime.securesms.database.CursorList
import org.thoughtcrime.securesms.database.GroupDatabase
import org.thoughtcrime.securesms.database.MmsSmsColumns
import org.thoughtcrime.securesms.database.RecipientRepository
import org.thoughtcrime.securesms.database.SearchDatabase
import org.thoughtcrime.securesms.database.ThreadDatabase
import org.thoughtcrime.securesms.repository.ConversationRepository
import org.thoughtcrime.securesms.search.model.MessageResult
import org.thoughtcrime.securesms.search.model.SearchResult
Expand All @@ -33,13 +29,9 @@ import javax.inject.Singleton
class SearchRepository @Inject constructor(
@param:ApplicationContext private val context: Context,
private val searchDatabase: SearchDatabase,
private val threadDatabase: ThreadDatabase,
private val groupDatabase: GroupDatabase,
private val contactAccessor: ContactAccessor,
private val recipientRepository: RecipientRepository,
private val conversationRepository: ConversationRepository,
private val configFactory: ConfigFactoryProtocol,
private val prefs: TextSecurePreferences,
) {
private val executor = SignalExecutors.SERIAL

Expand Down Expand Up @@ -128,12 +120,41 @@ class SearchRepository @Inject constructor(

private fun queryConversations(
query: String,
): List<GroupRecord> {
val numbers = contactAccessor.getNumbersForThreadSearchFilter(context, query)
val addresses = numbers.map { fromSerialized(it) }
) : List<Recipient> {
if(query.isEmpty()) return emptyList()

return threadDatabase.getThreads(addresses)
.map { groupDatabase.getGroup(it.recipient.address.toGroupString()).get() }
return configFactory.withUserConfigs { configs ->
configs.userGroups.all()
}.asSequence()
.mapNotNull { group ->
when (group) {
is GroupInfo.ClosedGroupInfo -> {
if(group.invited) null // do not show groups V2 we have not yet accepted
else recipientRepository.getRecipientSync(
Address.Group(AccountId(group.groupAccountId))
)
}

is GroupInfo.LegacyGroupInfo -> {
recipientRepository.getRecipientSync(
Address.LegacyGroup(group.accountId)
)
}

is GroupInfo.CommunityGroupInfo -> {
recipientRepository.getRecipientSync(
Address.Community(
serverUrl = group.community.baseUrl,
room = group.community.room
)
)
}
}
}
.filter { group ->
group.displayName().contains(query, ignoreCase = true)
}
.toList()
}

private fun queryMessages(query: String): CursorList<MessageResult> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.database.CursorList
class SearchResult(
val query: String = "",
val contacts: List<Recipient> = emptyList(),
val conversations: List<GroupRecord> = emptyList(),
val conversations: List<Recipient> = emptyList(),
val messages: CursorList<MessageResult> = CursorList.emptyList<MessageResult>()
) {
fun size(): Int {
Expand Down