mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
Add "Group Members" section to ConversationList search results.
This commit is contained in:
committed by
Greyson Parrelli
parent
e84c6187b9
commit
09902e5d11
@@ -69,6 +69,7 @@ class GroupTable(context: Context?, databaseHelper: SignalDatabase?) : DatabaseT
|
||||
private val TAG = Log.tag(GroupTable::class.java)
|
||||
|
||||
const val MEMBER_GROUP_CONCAT = "member_group_concat"
|
||||
const val THREAD_DATE = "thread_date"
|
||||
|
||||
const val TABLE_NAME = "groups"
|
||||
const val ID = "_id"
|
||||
@@ -346,6 +347,24 @@ class GroupTable(context: Context?, databaseHelper: SignalDatabase?) : DatabaseT
|
||||
return noMetadata && noMembers
|
||||
}
|
||||
|
||||
fun queryGroupsByMemberName(inputQuery: String): Cursor {
|
||||
val subquery = recipients.getAllContactsSubquery(inputQuery)
|
||||
val statement = """
|
||||
SELECT
|
||||
DISTINCT $TABLE_NAME.*,
|
||||
GROUP_CONCAT(${MembershipTable.TABLE_NAME}.${MembershipTable.RECIPIENT_ID}) as $MEMBER_GROUP_CONCAT,
|
||||
${ThreadTable.TABLE_NAME}.${ThreadTable.DATE} as $THREAD_DATE
|
||||
FROM $TABLE_NAME
|
||||
INNER JOIN ${MembershipTable.TABLE_NAME} ON ${MembershipTable.TABLE_NAME}.${MembershipTable.GROUP_ID} = $TABLE_NAME.$GROUP_ID
|
||||
INNER JOIN ${ThreadTable.TABLE_NAME} ON ${ThreadTable.TABLE_NAME}.${ThreadTable.RECIPIENT_ID} = $TABLE_NAME.$RECIPIENT_ID
|
||||
WHERE $ACTIVE = 1 AND ${MembershipTable.TABLE_NAME}.${MembershipTable.RECIPIENT_ID} IN (${subquery.where})
|
||||
GROUP BY ${MembershipTable.TABLE_NAME}.${MembershipTable.GROUP_ID}
|
||||
ORDER BY $TITLE COLLATE NOCASE ASC
|
||||
""".toSingleLine()
|
||||
|
||||
return databaseHelper.signalReadableDatabase.query(statement, subquery.whereArgs)
|
||||
}
|
||||
|
||||
fun queryGroupsByTitle(inputQuery: String, includeInactive: Boolean, excludeV1: Boolean, excludeMms: Boolean): Reader {
|
||||
val query = getGroupQueryWhereStatement(inputQuery, includeInactive, excludeV1, excludeMms)
|
||||
//language=sql
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.signal.core.util.requireLong
|
||||
import org.signal.core.util.requireNonNullString
|
||||
import org.signal.core.util.requireString
|
||||
import org.signal.core.util.select
|
||||
import org.signal.core.util.toSingleLine
|
||||
import org.signal.core.util.update
|
||||
import org.signal.core.util.withinTransaction
|
||||
import org.signal.libsignal.protocol.IdentityKey
|
||||
@@ -3179,6 +3180,27 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da
|
||||
return readableDatabase.query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, null)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the query used for performing the all contacts search so that it can be injected as a subquery.
|
||||
*/
|
||||
fun getAllContactsSubquery(inputQuery: String): SqlUtil.Query {
|
||||
val query = SqlUtil.buildCaseInsensitiveGlobPattern(inputQuery)
|
||||
|
||||
//language=sql
|
||||
val subquery = """SELECT $ID FROM (
|
||||
SELECT ${SEARCH_PROJECTION.joinToString(",")} FROM $TABLE_NAME
|
||||
WHERE $BLOCKED = ? AND $HIDDEN = ? AND
|
||||
(
|
||||
$SORT_NAME GLOB ? OR
|
||||
$USERNAME GLOB ? OR
|
||||
$PHONE GLOB ? OR
|
||||
$EMAIL GLOB ?
|
||||
))
|
||||
""".toSingleLine()
|
||||
|
||||
return SqlUtil.Query(subquery, SqlUtil.buildArgs(0, 0, query, query, query, query))
|
||||
}
|
||||
|
||||
@JvmOverloads
|
||||
fun queryRecipientsForMentions(inputQuery: String, recipientIds: List<RecipientId>? = null): List<Recipient> {
|
||||
val query = SqlUtil.buildCaseInsensitiveGlobPattern(inputQuery)
|
||||
|
||||
Reference in New Issue
Block a user