Skip to content
Closed
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 @@ -48,23 +48,17 @@ import io.getstream.chat.android.client.api2.mapping.DtoMapping
import io.getstream.chat.android.client.api2.mapping.EventMapping
import io.getstream.chat.android.client.api2.mapping.toFilterDomainWithFields
import io.getstream.chat.android.client.api2.model.dto.UpstreamPushPreferenceInputDto
import io.getstream.chat.android.client.api2.model.requests.AcceptInviteRequest
import io.getstream.chat.android.client.api2.model.requests.AddMembersRequest
import io.getstream.chat.android.client.api2.model.requests.BanUserRequest
import io.getstream.chat.android.client.api2.model.requests.FlagMessageRequest
import io.getstream.chat.android.client.api2.model.requests.FlagRequest
import io.getstream.chat.android.client.api2.model.requests.FlagUserRequest
import io.getstream.chat.android.client.api2.model.requests.InviteMembersRequest
import io.getstream.chat.android.client.api2.model.requests.MuteUserRequest
import io.getstream.chat.android.client.api2.model.requests.PinnedMessagesRequest
import io.getstream.chat.android.client.api2.model.requests.QueryBannedUsersRequest
import io.getstream.chat.android.client.api2.model.requests.QueryDraftMessagesRequest
import io.getstream.chat.android.client.api2.model.requests.RejectInviteRequest
import io.getstream.chat.android.client.api2.model.requests.RemoveMembersRequest
import io.getstream.chat.android.client.api2.model.requests.SendMessageRequest
import io.getstream.chat.android.client.api2.model.requests.SyncHistoryRequest
import io.getstream.chat.android.client.api2.model.requests.TruncateChannelRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateChannelRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateLiveLocationRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateMessageRequest
import io.getstream.chat.android.client.api2.model.requests.UpsertPushPreferencesRequest
Expand Down Expand Up @@ -134,6 +128,8 @@ import io.getstream.chat.android.network.models.AddUserGroupMembersRequest
import io.getstream.chat.android.network.models.AddUserGroupMembersResponse
import io.getstream.chat.android.network.models.BlockUsersRequest
import io.getstream.chat.android.network.models.CastPollVoteRequest
import io.getstream.chat.android.network.models.ChannelInputRequest
import io.getstream.chat.android.network.models.ChannelMemberRequest
import io.getstream.chat.android.network.models.CreateDeviceRequest
import io.getstream.chat.android.network.models.CreateGuestRequest
import io.getstream.chat.android.network.models.CreatePollOptionRequest
Expand All @@ -150,6 +146,7 @@ import io.getstream.chat.android.network.models.MarkDeliveredRequest
import io.getstream.chat.android.network.models.MarkReadRequest
import io.getstream.chat.android.network.models.MarkUnreadRequest
import io.getstream.chat.android.network.models.MessageActionRequest
import io.getstream.chat.android.network.models.MessageRequest
import io.getstream.chat.android.network.models.MuteChannelRequest
import io.getstream.chat.android.network.models.PollOptionInput
import io.getstream.chat.android.network.models.PollOptionRequest
Expand All @@ -166,6 +163,7 @@ import io.getstream.chat.android.network.models.SendReactionRequest
import io.getstream.chat.android.network.models.SortParamRequest
import io.getstream.chat.android.network.models.UnblockUsersRequest
import io.getstream.chat.android.network.models.UpdateChannelPartialRequest
import io.getstream.chat.android.network.models.UpdateChannelRequest
import io.getstream.chat.android.network.models.UpdateMemberPartialRequest
import io.getstream.chat.android.network.models.UpdateMessagePartialRequest
import io.getstream.chat.android.network.models.UpdatePollOptionRequest
Expand Down Expand Up @@ -1082,8 +1080,8 @@ constructor(
channelId = channelId,
body = with(dtoMapping) {
UpdateChannelRequest(
extraData,
updateMessage?.toDto(),
data = ChannelInputRequest(custom = extraData),
message = updateMessage?.toMessageRequest(),
)
},
).map(this::flattenChannel)
Expand Down Expand Up @@ -1141,7 +1139,7 @@ constructor(
return channelApi.rejectInvite(
channelType = channelType,
channelId = channelId,
body = RejectInviteRequest(),
body = UpdateChannelRequest(rejectInvite = true),
).map(this::flattenChannel)
}

Expand All @@ -1153,7 +1151,10 @@ constructor(
return channelApi.acceptInvite(
channelType = channelType,
channelId = channelId,
body = AcceptInviteRequest.create(userId = userId, message = message),
body = UpdateChannelRequest(
acceptInvite = true,
message = message?.let { MessageRequest(text = it) },
),
).map(this::flattenChannel)
}

Expand Down Expand Up @@ -1222,12 +1223,12 @@ constructor(
channelType = channelType,
channelId = channelId,
body = with(dtoMapping) {
AddMembersRequest(
add_members = members.map { it.toDto() },
message = systemMessage?.toDto(),
hide_history = hideHistory,
hide_history_before = hideHistoryBefore,
skip_push = skipPush,
UpdateChannelRequest(
addMembers = members.map { it.toChannelMemberRequest() },
message = systemMessage?.toMessageRequest(),
hideHistory = hideHistory,
hideHistoryBefore = hideHistoryBefore,
skipPush = skipPush,
)
},
).map(this::flattenChannel)
Expand All @@ -1244,10 +1245,10 @@ constructor(
channelType = channelType,
channelId = channelId,
body = with(dtoMapping) {
RemoveMembersRequest(
members,
systemMessage?.toDto(),
skipPush,
UpdateChannelRequest(
removeMembers = members,
message = systemMessage?.toMessageRequest(),
skipPush = skipPush,
)
},
).map(this::flattenChannel)
Expand All @@ -1264,10 +1265,10 @@ constructor(
channelType = channelType,
channelId = channelId,
body = with(dtoMapping) {
InviteMembersRequest(
members,
systemMessage?.toDto(),
skipPush,
UpdateChannelRequest(
invites = members.map { ChannelMemberRequest(userId = it) },
message = systemMessage?.toMessageRequest(),
skipPush = skipPush,
)
},
).map(this::flattenChannel)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,9 @@ package io.getstream.chat.android.client.api2.endpoint
import io.getstream.chat.android.client.api.AuthenticatedApi
import io.getstream.chat.android.client.api.QueryParams
import io.getstream.chat.android.client.api2.UrlQueryPayload
import io.getstream.chat.android.client.api2.model.requests.AcceptInviteRequest
import io.getstream.chat.android.client.api2.model.requests.AddMembersRequest
import io.getstream.chat.android.client.api2.model.requests.InviteMembersRequest
import io.getstream.chat.android.client.api2.model.requests.PinnedMessagesRequest
import io.getstream.chat.android.client.api2.model.requests.QueryChannelRequest
import io.getstream.chat.android.client.api2.model.requests.RejectInviteRequest
import io.getstream.chat.android.client.api2.model.requests.RemoveMembersRequest
import io.getstream.chat.android.client.api2.model.requests.TruncateChannelRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateChannelRequest
import io.getstream.chat.android.client.api2.model.requests.UpdateMemberPartialResponse
import io.getstream.chat.android.client.api2.model.response.ChannelResponse
import io.getstream.chat.android.client.api2.model.response.EventResponse
Expand All @@ -44,6 +38,7 @@ import io.getstream.chat.android.network.models.QueryChannelsRequest
import io.getstream.chat.android.network.models.Response
import io.getstream.chat.android.network.models.SendEventRequest
import io.getstream.chat.android.network.models.UpdateChannelPartialRequest
import io.getstream.chat.android.network.models.UpdateChannelRequest
import io.getstream.chat.android.network.models.UpdateMemberPartialRequest
import retrofit2.http.Body
import retrofit2.http.DELETE
Expand Down Expand Up @@ -115,35 +110,35 @@ internal interface ChannelApi {
fun acceptInvite(
@Path("type") channelType: String,
@Path("id") channelId: String,
@Body body: AcceptInviteRequest,
@Body body: UpdateChannelRequest,
): RetrofitCall<ChannelResponse>

@POST("/channels/{type}/{id}")
fun rejectInvite(
@Path("type") channelType: String,
@Path("id") channelId: String,
@Body body: RejectInviteRequest,
@Body body: UpdateChannelRequest,
): RetrofitCall<ChannelResponse>

@POST("/channels/{type}/{id}")
fun addMembers(
@Path("type") channelType: String,
@Path("id") channelId: String,
@Body body: AddMembersRequest,
@Body body: UpdateChannelRequest,
): RetrofitCall<ChannelResponse>

@POST("/channels/{type}/{id}")
fun removeMembers(
@Path("type") channelType: String,
@Path("id") channelId: String,
@Body body: RemoveMembersRequest,
@Body body: UpdateChannelRequest,
): RetrofitCall<ChannelResponse>

@POST("/channels/{type}/{id}")
fun inviteMembers(
@Path("type") channelType: String,
@Path("id") channelId: String,
@Body body: InviteMembersRequest,
@Body body: UpdateChannelRequest,
): RetrofitCall<ChannelResponse>

@PATCH("/channels/{type}/{id}/member/{user_id}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,17 @@ import io.getstream.chat.android.models.Reaction
import io.getstream.chat.android.models.User
import io.getstream.chat.android.models.UserGroup
import io.getstream.chat.android.models.UserTransformer
import io.getstream.chat.android.network.models.ChannelMemberRequest
import io.getstream.chat.android.network.models.DeliveryReceiptsResponse
import io.getstream.chat.android.network.models.MessageRequest
import io.getstream.chat.android.network.models.PrivacySettingsResponse
import io.getstream.chat.android.network.models.ReactionRequest
import io.getstream.chat.android.network.models.ReadReceiptsResponse
import io.getstream.chat.android.network.models.SharedLocation
import io.getstream.chat.android.network.models.TypingIndicatorsResponse
import io.getstream.chat.android.network.models.UserRequest

@Suppress("TooManyFunctions")
internal class DtoMapping(
private val messageTransformer: MessageTransformer,
private val userTransformer: UserTransformer,
Expand Down Expand Up @@ -170,6 +174,89 @@ internal class DtoMapping(
end_at = endAt,
)

/**
* Maps the domain [Attachment] to the generated network Attachment model.
*/
internal fun Attachment.toRequest(): io.getstream.chat.android.network.models.Attachment {
// OpenAPI Attachment doesn't declare file_size/image/mime_type/name; fold them into `custom`
// so the custom-flattening adapter writes them at the JSON root.
val custom = extraData.toMutableMap()
image?.let { custom["image"] = it }
name?.let { custom["name"] = it }
mimeType?.let { custom["mime_type"] = it }
custom["file_size"] = fileSize
return io.getstream.chat.android.network.models.Attachment(
assetUrl = assetUrl,
authorName = authorName,
fallback = fallback,
imageUrl = imageUrl,
ogScrapeUrl = ogUrl,
text = text,
thumbUrl = thumbUrl,
title = title,
titleLink = titleLink,
authorLink = authorLink,
type = type,
originalHeight = originalHeight,
originalWidth = originalWidth,
custom = custom,
actions = null,
fields = null,
)
}

/**
* Maps the domain [MemberData] to the generated network [ChannelMemberRequest] model.
*/
internal fun MemberData.toChannelMemberRequest(): ChannelMemberRequest = ChannelMemberRequest(
userId = userId,
channelRole = null,
user = null,
custom = extraData,
)

/**
* Maps the domain [Location] to the generated network [SharedLocation] model.
*/
internal fun Location.toSharedLocation(): SharedLocation = SharedLocation(
// The spec types these coordinates as a 32-bit float although the backend stores float64, so
// this narrows and loses sub-meter precision. Revert once the spec says double.
latitude = latitude.toFloat(),
longitude = longitude.toFloat(),
createdByDeviceId = deviceId,
endAt = endAt,
)

/**
* Transforms the domain [Message] to the generated network [MessageRequest] model.
*/
internal fun Message.toMessageRequest(): MessageRequest =
messageTransformer.transform(this)
.run {
val upstreamType = if (type in supportedUpstreamMessageTypes) type else ""
MessageRequest(
id = id,
text = text,
type = MessageRequest.Type.fromString(upstreamType),
attachments = attachments.map { it.toRequest() },
mentionedUsers = mentionedUsersIds,
mentionedHere = mentionedHere,
mentionedChannel = mentionedChannel,
mentionedGroupIds = mentionedGroups.map(UserGroup::id),
mentionedRoles = mentionedRoles,
parentId = parentId,
pinExpires = pinExpires,
pinned = pinned,
pinnedAt = pinnedAt,
quotedMessageId = replyMessageId,
showInChannel = showInChannel,
silent = silent,
restrictedVisibility = restrictedVisibility,
sharedLocation = sharedLocation?.toSharedLocation(),
custom = extraData,
)
}

internal fun DraftMessage.toDto(): UpstreamMessageDto = UpstreamMessageDto(
attachments = attachments.map { it.toDto() },
cid = cid,
Expand Down

This file was deleted.

This file was deleted.

Loading
Loading