Skip to content

Commit

Permalink
[i222] allow connect user with user_id only (#5107)
Browse files Browse the repository at this point in the history
* [i222] allow connect user with user_id only

* [i222] add CHANGELOG
  • Loading branch information
kanat authored Dec 11, 2023
1 parent 8c369de commit 7406f85
Show file tree
Hide file tree
Showing 10 changed files with 57 additions and 29 deletions.
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,21 @@

### ❌ Removed

## stream-chat-android-core
### 🐞 Fixed

### ⬆️ Improved

### ✅ Added

### ⚠️ Changed
- 🚨Breaking change: The following properties in `User` class are now **nullable**: `banned`, `invisible`. [#5107](https://github.com/GetStream/stream-chat-android/pull/5107)
* Please use `User.isBanned` as non-nullable version.
* Please use `User.isInvisible` as non-nullable version.
* Properties such as `invisible`, `banned`, `teams` and `role` are not being used to establish WS connection flow if not specified.

### ❌ Removed

## stream-chat-android-client
### 🐞 Fixed

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ import io.getstream.chat.android.models.User

internal fun User.toDto(): UpstreamUserDto =
UpstreamUserDto(
banned = banned,
banned = isBanned,
id = id,
name = name,
image = image,
invisible = invisible,
invisible = isInvisible,
language = language,
role = role,
devices = devices.map(Device::toDto),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,10 @@ internal class SocketFactory(
private fun ConnectionConf.reduceUserDetails(): Map<String, Any> = mutableMapOf<String, Any>("id" to id)
.apply {
if (!isReconnection) {
put("role", user.role)
put("banned", user.banned)
put("invisible", user.invisible)
put("teams", user.teams)
if (user.role.isNotBlank()) put("role", user.role)
user.banned?.also { put("banned", it) }
user.invisible?.also { put("invisible", it) }
if (user.teams.isNotEmpty()) put("teams", user.teams)
if (user.language.isNotBlank()) put("language", user.language)
if (user.image.isNotBlank()) put("image", user.image)
if (user.name.isNotBlank()) put("name", user.name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ internal object EventArguments {
private val user = User(
id = "bender",
role = "user",
invisible = false,
banned = false,
online = true,
createdAt = date,
updatedAt = date,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,8 @@ internal class SocketFactoryTest {
mapOf(
"id" to userId,
"role" to user.role,
"banned" to user.banned,
"invisible" to user.invisible,
"teams" to user.teams,
"banned" to user.isBanned,
"invisible" to user.isInvisible,
"language" to user.language,
"image" to user.image,
"name" to user.name,
Expand Down
22 changes: 12 additions & 10 deletions stream-chat-android-core/api/stream-chat-android-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -1513,8 +1513,8 @@ public final class io/getstream/chat/android/models/UploadedImage {

public final class io/getstream/chat/android/models/User : io/getstream/chat/android/models/CustomObject, io/getstream/chat/android/models/querysort/ComparableFieldProvider {
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;ZLjava/util/List;ZLjava/util/Date;Ljava/util/Date;Ljava/util/Date;IILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Date;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;ZLjava/util/List;ZLjava/util/Date;Ljava/util/Date;Ljava/util/Date;IILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Date;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/List;ZLjava/util/Date;Ljava/util/Date;Ljava/util/Date;IILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Date;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/List;ZLjava/util/Date;Ljava/util/Date;Ljava/util/Date;IILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Date;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component10 ()Ljava/util/Date;
public final fun component11 ()Ljava/util/Date;
Expand All @@ -1529,15 +1529,15 @@ public final class io/getstream/chat/android/models/User : io/getstream/chat/and
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/String;
public final fun component4 ()Ljava/lang/String;
public final fun component5 ()Z
public final fun component5 ()Ljava/lang/Boolean;
public final fun component6 ()Ljava/lang/String;
public final fun component7 ()Z
public final fun component7 ()Ljava/lang/Boolean;
public final fun component8 ()Ljava/util/List;
public final fun component9 ()Z
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;ZLjava/util/List;ZLjava/util/Date;Ljava/util/Date;Ljava/util/Date;IILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Date;)Lio/getstream/chat/android/models/User;
public static synthetic fun copy$default (Lio/getstream/chat/android/models/User;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;ZLjava/util/List;ZLjava/util/Date;Ljava/util/Date;Ljava/util/Date;IILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Date;ILjava/lang/Object;)Lio/getstream/chat/android/models/User;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/List;ZLjava/util/Date;Ljava/util/Date;Ljava/util/Date;IILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Date;)Lio/getstream/chat/android/models/User;
public static synthetic fun copy$default (Lio/getstream/chat/android/models/User;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/List;ZLjava/util/Date;Ljava/util/Date;Ljava/util/Date;IILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Ljava/util/Date;ILjava/lang/Object;)Lio/getstream/chat/android/models/User;
public fun equals (Ljava/lang/Object;)Z
public final fun getBanned ()Z
public final fun getBanned ()Ljava/lang/Boolean;
public final fun getChannelMutes ()Ljava/util/List;
public fun getComparableField (Ljava/lang/String;)Ljava/lang/Comparable;
public final fun getCreatedAt ()Ljava/util/Date;
Expand All @@ -1547,7 +1547,7 @@ public final class io/getstream/chat/android/models/User : io/getstream/chat/and
public fun getExtraValue (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
public final fun getId ()Ljava/lang/String;
public final fun getImage ()Ljava/lang/String;
public final fun getInvisible ()Z
public final fun getInvisible ()Ljava/lang/Boolean;
public final fun getLanguage ()Ljava/lang/String;
public final fun getLastActive ()Ljava/util/Date;
public final fun getMutes ()Ljava/util/List;
Expand All @@ -1559,6 +1559,8 @@ public final class io/getstream/chat/android/models/User : io/getstream/chat/and
public final fun getUnreadChannels ()I
public final fun getUpdatedAt ()Ljava/util/Date;
public fun hashCode ()I
public final fun isBanned ()Z
public final fun isInvisible ()Z
public final fun newBuilder ()Lio/getstream/chat/android/models/User$Builder;
public fun toString ()Ljava/lang/String;
}
Expand All @@ -1567,15 +1569,15 @@ public final class io/getstream/chat/android/models/User$Builder {
public fun <init> ()V
public fun <init> (Lio/getstream/chat/android/models/User;)V
public final fun build ()Lio/getstream/chat/android/models/User;
public final fun withBanned (Z)Lio/getstream/chat/android/models/User$Builder;
public final fun withBanned (Ljava/lang/Boolean;)Lio/getstream/chat/android/models/User$Builder;
public final fun withChannelMutes (Ljava/util/List;)Lio/getstream/chat/android/models/User$Builder;
public final fun withCreatedAt (Ljava/util/Date;)Lio/getstream/chat/android/models/User$Builder;
public final fun withDeactivatedAt (Ljava/util/Date;)Lio/getstream/chat/android/models/User$Builder;
public final fun withDevices (Ljava/util/List;)Lio/getstream/chat/android/models/User$Builder;
public final fun withExtraData (Ljava/util/Map;)Lio/getstream/chat/android/models/User$Builder;
public final fun withId (Ljava/lang/String;)Lio/getstream/chat/android/models/User$Builder;
public final fun withImage (Ljava/lang/String;)Lio/getstream/chat/android/models/User$Builder;
public final fun withInvisible (Z)Lio/getstream/chat/android/models/User$Builder;
public final fun withInvisible (Ljava/lang/Boolean;)Lio/getstream/chat/android/models/User$Builder;
public final fun withLanguage (Ljava/lang/String;)Lio/getstream/chat/android/models/User$Builder;
public final fun withLastActive (Ljava/util/Date;)Lio/getstream/chat/android/models/User$Builder;
public final fun withMutes (Ljava/util/List;)Lio/getstream/chat/android/models/User$Builder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ public data class User(
val role: String = "",
val name: String = "",
val image: String = "",
val invisible: Boolean = false,
val invisible: Boolean? = null,
val language: String = "",
val banned: Boolean = false,
val banned: Boolean? = null,
val devices: List<Device> = listOf(),
val online: Boolean = false,
val createdAt: Date? = null,
Expand All @@ -66,6 +66,16 @@ public data class User(
val deactivatedAt: Date? = null,
) : CustomObject, ComparableFieldProvider {

/**
* Determines if the user is banned or not.
*/
val isBanned: Boolean get() = banned == true

/**
* Determines if the user should share its online status.
*/
val isInvisible: Boolean get() = invisible == true

override fun getComparableField(fieldName: String): Comparable<*>? {
return when (fieldName) {
"id" -> id
Expand Down Expand Up @@ -95,9 +105,9 @@ public data class User(
private var role: String = ""
private var name: String = ""
private var image: String = ""
private var invisible: Boolean = false
private var invisible: Boolean? = null
private var language: String = ""
private var banned: Boolean = false
private var banned: Boolean? = null
private var devices: List<Device> = listOf()
private var online: Boolean = false
private var createdAt: Date? = null
Expand Down Expand Up @@ -136,9 +146,9 @@ public data class User(
public fun withRole(role: String): Builder = apply { this.role = role }
public fun withName(name: String): Builder = apply { this.name = name }
public fun withImage(image: String): Builder = apply { this.image = image }
public fun withInvisible(invisible: Boolean): Builder = apply { this.invisible = invisible }
public fun withInvisible(invisible: Boolean?): Builder = apply { this.invisible = invisible }
public fun withLanguage(language: String): Builder = apply { this.language = language }
public fun withBanned(banned: Boolean): Builder = apply { this.banned = banned }
public fun withBanned(banned: Boolean?): Builder = apply { this.banned = banned }
public fun withDevices(devices: List<Device>): Builder = apply { this.devices = devices }
public fun withOnline(online: Boolean): Builder = apply { this.online = online }
public fun withCreatedAt(createdAt: Date?): Builder = apply { this.createdAt = createdAt }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ internal class DatabaseUserRepository(
createdAt = createdAt,
updatedAt = updatedAt,
lastActive = lastActive,
invisible = invisible,
banned = banned,
invisible = isInvisible,
banned = isBanned,
extraData = extraData,
mutes = mutes.map { mute -> mute.target.id },
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ internal class EventHandlerSequential(
}

me?.let {
mutableGlobalState.setBanned(it.banned)
mutableGlobalState.setBanned(it.isBanned)
mutableGlobalState.setMutedUsers(it.mutes)
mutableGlobalState.setChannelMutes(it.channelMutes)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ internal fun MutableGlobalState.updateCurrentUser(currentUser: User?, receivedUs
is SelfUserPart -> currentUser?.mergePartially(receivedUser.me) ?: receivedUser.me
}

setBanned(me.banned)
setBanned(me.isBanned)
setMutedUsers(me.mutes)
setChannelMutes(me.channelMutes)
setTotalUnreadCount(me.totalUnreadCount)
Expand Down

0 comments on commit 7406f85

Please sign in to comment.