Skip to content
Draft
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 @@ -661,7 +661,17 @@ public fun randomQueryChannelsSpec(
filter: FilterObject = NeutralFilterObject,
sort: QuerySorter<Channel> = QuerySortByField(),
cids: Set<String> = emptySet(),
): QueryChannelsSpec = QueryChannelsSpec(filter, sort).apply { this.cids = cids }
predefinedFilterName: String? = null,
predefinedFilterValues: Map<String, Any>? = null,
predefinedSortValues: Map<String, Any>? = null,
): QueryChannelsSpec = QueryChannelsSpec(
filter = filter,
querySort = sort,
cids = cids,
predefinedFilterName = predefinedFilterName,
predefinedFilterValues = predefinedFilterValues,
predefinedSortValues = predefinedSortValues,
)

public fun randomNotificationRemovedFromChannelEvent(
cid: String = randomCID(),
Expand Down
67 changes: 62 additions & 5 deletions stream-chat-android-client/api/stream-chat-android-client.api
Original file line number Diff line number Diff line change
Expand Up @@ -484,25 +484,39 @@ public class io/getstream/chat/android/client/api/models/QueryChannelRequest : i
}

public final class io/getstream/chat/android/client/api/models/QueryChannelsRequest : io/getstream/chat/android/client/api/models/ChannelRequest {
public fun <init> (I)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;I)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;II)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;)V
public synthetic fun <init> (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/util/Map;)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)V
public synthetic fun <init> (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lio/getstream/chat/android/models/FilterObject;
public final fun component2 ()I
public final fun component3 ()I
public final fun component4 ()Lio/getstream/chat/android/models/querysort/QuerySorter;
public final fun component5 ()Ljava/lang/Integer;
public final fun component6 ()Ljava/lang/Integer;
public final fun copy (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;)Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;
public final fun component7 ()Ljava/lang/String;
public final fun component8 ()Ljava/util/Map;
public final fun component9 ()Ljava/util/Map;
public final fun copy (Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lio/getstream/chat/android/models/FilterObject;IILio/getstream/chat/android/models/querysort/QuerySorter;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;
public fun equals (Ljava/lang/Object;)Z
public final fun getFilter ()Lio/getstream/chat/android/models/FilterObject;
public final fun getFilterValues ()Ljava/util/Map;
public final fun getLimit ()I
public final fun getMemberLimit ()Ljava/lang/Integer;
public final fun getMessageLimit ()Ljava/lang/Integer;
public final fun getOffset ()I
public final fun getPredefinedFilter ()Ljava/lang/String;
public fun getPresence ()Z
public final fun getQuerySort ()Lio/getstream/chat/android/models/querysort/QuerySorter;
public final fun getSort ()Ljava/util/List;
public final fun getSortValues ()Ljava/util/Map;
public fun getState ()Z
public fun getWatch ()Z
public fun hashCode ()I
Expand Down Expand Up @@ -2799,6 +2813,34 @@ public abstract interface class io/getstream/chat/android/client/interceptor/mes
public abstract fun prepareMessage (Lio/getstream/chat/android/models/Message;Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/User;)Lio/getstream/chat/android/models/Message;
}

public final class io/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier$Predefined : io/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier {
public fun <init> (Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/util/Map;
public final fun component3 ()Ljava/util/Map;
public final fun copy (Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)Lio/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier$Predefined;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier$Predefined;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier$Predefined;
public fun equals (Ljava/lang/Object;)Z
public final fun getFilterValues ()Ljava/util/Map;
public final fun getName ()Ljava/lang/String;
public final fun getSortValues ()Ljava/util/Map;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier$Standard : io/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier {
public fun <init> (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;)V
public final fun component1 ()Lio/getstream/chat/android/models/FilterObject;
public final fun component2 ()Lio/getstream/chat/android/models/querysort/QuerySorter;
public final fun copy (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;)Lio/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier$Standard;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier$Standard;Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;ILjava/lang/Object;)Lio/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier$Standard;
public fun equals (Ljava/lang/Object;)Z
public final fun getFilter ()Lio/getstream/chat/android/models/FilterObject;
public final fun getSort ()Lio/getstream/chat/android/models/querysort/QuerySorter;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/getstream/chat/android/client/logger/ChatLogLevel : java/lang/Enum {
public static final field ALL Lio/getstream/chat/android/client/logger/ChatLogLevel;
public static final field DEBUG Lio/getstream/chat/android/client/logger/ChatLogLevel;
Expand Down Expand Up @@ -3043,7 +3085,10 @@ public abstract interface class io/getstream/chat/android/client/persistance/rep
public abstract interface class io/getstream/chat/android/client/persistance/repository/QueryChannelsRepository {
public abstract fun clear (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun insertQueryChannels (Lio/getstream/chat/android/client/query/QueryChannelsSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun selectBy (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun selectBy (Lio/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun selectBy (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun selectBy$suspendImpl (Lio/getstream/chat/android/client/persistance/repository/QueryChannelsRepository;Lio/getstream/chat/android/client/internal/state/plugin/QueryChannelsIdentifier;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun selectBy$suspendImpl (Lio/getstream/chat/android/client/persistance/repository/QueryChannelsRepository;Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public abstract interface class io/getstream/chat/android/client/persistance/repository/ReactionRepository {
Expand Down Expand Up @@ -3341,6 +3386,8 @@ public abstract interface class io/getstream/chat/android/client/plugin/listener
public static synthetic fun onQueryChannelsRequest$suspendImpl (Lio/getstream/chat/android/client/plugin/listeners/QueryChannelsListener;Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun onQueryChannelsResult (Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun onQueryChannelsResult$suspendImpl (Lio/getstream/chat/android/client/plugin/listeners/QueryChannelsListener;Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun onQueryChannelsResultWithPredefinedFilter (Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun onQueryChannelsResultWithPredefinedFilter$suspendImpl (Lio/getstream/chat/android/client/plugin/listeners/QueryChannelsListener;Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public abstract interface class io/getstream/chat/android/client/plugin/listeners/QueryMembersListener {
Expand Down Expand Up @@ -3452,16 +3499,26 @@ public final class io/getstream/chat/android/client/query/CreateChannelParams {

public final class io/getstream/chat/android/client/query/QueryChannelsSpec {
public fun <init> (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;)V
public fun <init> (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Ljava/util/Set;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)V
public synthetic fun <init> (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Ljava/util/Set;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lio/getstream/chat/android/models/FilterObject;
public final fun component2 ()Lio/getstream/chat/android/models/querysort/QuerySorter;
public final fun component3 ()Ljava/util/Set;
public final fun component4 ()Ljava/lang/String;
public final fun component5 ()Ljava/util/Map;
public final fun component6 ()Ljava/util/Map;
public final fun copy (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;)Lio/getstream/chat/android/client/query/QueryChannelsSpec;
public final fun copy (Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Ljava/util/Set;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)Lio/getstream/chat/android/client/query/QueryChannelsSpec;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/query/QueryChannelsSpec;Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;ILjava/lang/Object;)Lio/getstream/chat/android/client/query/QueryChannelsSpec;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/query/QueryChannelsSpec;Lio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Ljava/util/Set;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/getstream/chat/android/client/query/QueryChannelsSpec;
public fun equals (Ljava/lang/Object;)Z
public final fun getCids ()Ljava/util/Set;
public final fun getFilter ()Lio/getstream/chat/android/models/FilterObject;
public final fun getPredefinedFilterName ()Ljava/lang/String;
public final fun getPredefinedFilterValues ()Ljava/util/Map;
public final fun getPredefinedSortValues ()Ljava/util/Map;
public final fun getQuerySort ()Lio/getstream/chat/android/models/querysort/QuerySorter;
public fun hashCode ()I
public final fun setCids (Ljava/util/Set;)V
public fun toString ()Ljava/lang/String;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2990,7 +2990,7 @@ internal constructor(
@CheckResult
@InternalStreamChatApi
public fun queryChannelsInternal(request: QueryChannelsRequest): Call<List<Channel>> {
return api.queryChannels(request)
return api.queryChannels(request).map { it.channels }
}

/**
Expand All @@ -3017,7 +3017,7 @@ internal constructor(
this.watch = false
this.state = state
}
when (val result = api.queryChannels(request).await()) {
when (val result = api.queryChannels(request).map { it.channels }.await()) {
is Result.Success -> {
val channels = result.value
if (channels.isEmpty()) {
Expand Down Expand Up @@ -3128,18 +3128,20 @@ internal constructor(
@CheckResult
public fun queryChannels(request: QueryChannelsRequest): Call<List<Channel>> {
logger.d { "[queryChannels] offset: ${request.offset}, limit: ${request.limit}" }
return queryChannelsInternal(request = request).doOnStart(userScope) {
return api.queryChannels(request).doOnStart(userScope) {
plugins.forEach { listener ->
logger.v { "[queryChannels] #doOnStart; plugin: ${listener::class.qualifiedName}" }
listener.onQueryChannelsRequest(request)
}
}.doOnResult(userScope) { result ->
plugins.forEach { listener ->
logger.v { "[queryChannels] #doOnResult; plugin: ${listener::class.qualifiedName}" }
listener.onQueryChannelsResult(result, request)
listener.onQueryChannelsResultWithPredefinedFilter(result, request)
}
}.precondition(plugins) {
onQueryChannelsPrecondition(request)
}.map {
it.channels
}.share(userScope) {
QueryChannelsIdentifier(request)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import io.getstream.chat.android.client.api.models.GetThreadOptions
import io.getstream.chat.android.client.api.models.PinnedMessagesPagination
import io.getstream.chat.android.client.api.models.QueryChannelRequest
import io.getstream.chat.android.client.api.models.QueryChannelsRequest
import io.getstream.chat.android.client.api.models.QueryChannelsResult
import io.getstream.chat.android.client.api.models.QueryThreadsRequest
import io.getstream.chat.android.client.api.models.QueryUsersRequest
import io.getstream.chat.android.client.api.models.SendActionRequest
Expand Down Expand Up @@ -286,7 +287,7 @@ internal interface ChatApi {
): Call<List<Message>>

@CheckResult
fun queryChannels(query: QueryChannelsRequest): Call<List<Channel>>
fun queryChannels(query: QueryChannelsRequest): Call<QueryChannelsResult>

@CheckResult
fun updateUsers(users: List<User>): Call<List<User>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import io.getstream.chat.android.client.api.ChatApi
import io.getstream.chat.android.client.api.models.PinnedMessagesPagination
import io.getstream.chat.android.client.api.models.QueryChannelRequest
import io.getstream.chat.android.client.api.models.QueryChannelsRequest
import io.getstream.chat.android.client.api.models.QueryChannelsResult
import io.getstream.chat.android.client.api2.optimisation.hash.ChannelQueryKey
import io.getstream.chat.android.client.api2.optimisation.hash.GetNewerRepliesHash
import io.getstream.chat.android.client.api2.optimisation.hash.GetPinnedMessagesHash
Expand Down Expand Up @@ -133,7 +134,7 @@ internal class DistinctChatApi(
}
}

override fun queryChannels(query: QueryChannelsRequest): Call<List<Channel>> {
override fun queryChannels(query: QueryChannelsRequest): Call<QueryChannelsResult> {
val uniqueKey = query.hashCode()
StreamLog.d(TAG) { "[queryChannels] query: $query, uniqueKey: $uniqueKey" }
return getOrCreate(uniqueKey) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import io.getstream.chat.android.client.api.ChatApi
import io.getstream.chat.android.client.api.models.PinnedMessagesPagination
import io.getstream.chat.android.client.api.models.QueryChannelRequest
import io.getstream.chat.android.client.api.models.QueryChannelsRequest
import io.getstream.chat.android.client.api.models.QueryChannelsResult
import io.getstream.chat.android.models.BannedUser
import io.getstream.chat.android.models.BannedUsersSort
import io.getstream.chat.android.models.Channel
Expand Down Expand Up @@ -77,7 +78,7 @@ internal class DistinctChatApiEnabler(
return getApi().getPinnedMessages(channelType, channelId, limit, sort, pagination)
}

override fun queryChannels(query: QueryChannelsRequest): Call<List<Channel>> {
override fun queryChannels(query: QueryChannelsRequest): Call<QueryChannelsResult> {
return getApi().queryChannels(query)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2014-2026 Stream.io Inc. All rights reserved.
*
* Licensed under the Stream License;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://github.com/GetStream/stream-chat-android/blob/main/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.getstream.chat.android.client.api.models

import io.getstream.chat.android.core.internal.InternalStreamChatApi
import io.getstream.chat.android.models.Channel
import io.getstream.chat.android.models.FilterObject
import io.getstream.chat.android.models.querysort.QuerySorter

/**
* Represents a predefined filter parsed by the backend.
*
* @param name The name/identifier of the predefined filter.
* @param filter The parsed filter specification.
* @param sort The parsed sort specification, or null if no sort was provided.
*/
@InternalStreamChatApi
public data class PredefinedFilter(
val name: String,
val filter: FilterObject,
val sort: QuerySorter<Channel>?,
)
Loading
Loading