mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-22 14:38:15 +08:00
Sync : add sync response model
This commit is contained in:
parent
d69b2ba930
commit
54fb54a695
@ -0,0 +1,15 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync
|
||||||
|
|
||||||
|
import im.vector.matrix.core.internal.network.NetworkConstants
|
||||||
|
import im.vector.matrix.core.internal.sync.data.SyncResponse
|
||||||
|
import kotlinx.coroutines.Deferred
|
||||||
|
import retrofit2.Response
|
||||||
|
import retrofit2.http.GET
|
||||||
|
import retrofit2.http.QueryMap
|
||||||
|
|
||||||
|
interface SyncAPI {
|
||||||
|
|
||||||
|
@GET(NetworkConstants.URI_API_PREFIX_PATH_R0 + "sync")
|
||||||
|
fun sync(@QueryMap params: Map<String, Any>): Deferred<Response<SyncResponse>>
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 OpenMarket Ltd
|
||||||
|
* Copyright 2017 Vector Creations Ltd
|
||||||
|
* Copyright 2018 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* 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 im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class describes the device information
|
||||||
|
*/
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class DeviceInfo(
|
||||||
|
/**
|
||||||
|
* The owner user id
|
||||||
|
*/
|
||||||
|
var user_id: String? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The device id
|
||||||
|
*/
|
||||||
|
var device_id: String? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The device display name
|
||||||
|
*/
|
||||||
|
var display_name: String? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The last time this device has been seen.
|
||||||
|
*/
|
||||||
|
var last_seen_ts: Long = 0,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The last ip address
|
||||||
|
*/
|
||||||
|
var last_seen_ip: String? = null
|
||||||
|
|
||||||
|
)
|
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2017 Vector Creations Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* 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 im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class describes the device list response from a sync request
|
||||||
|
*/
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class DeviceListResponse(
|
||||||
|
// user ids list which have new crypto devices
|
||||||
|
val changed: List<String>? = null,
|
||||||
|
// List of user ids who are no more tracked.
|
||||||
|
val left: List<String>? = null)
|
||||||
|
|
@ -0,0 +1,9 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class DeviceOneTimeKeysCountSyncResponse(
|
||||||
|
var signed_curve25519: Int? = null
|
||||||
|
|
||||||
|
)
|
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 OpenMarket Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* 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 im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class describes the
|
||||||
|
*/
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class DevicesListResponse(
|
||||||
|
var devices: List<DeviceInfo>? = null
|
||||||
|
)
|
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 OpenMarket Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* 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 im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
// InvitedRoomSync represents a room invitation during server sync v2.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class InvitedRoomSync(
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The state of a room that the user has been invited to. These state events may only have the 'sender', 'type', 'state_key'
|
||||||
|
* and 'content' keys present. These events do not replace any state that the client already has for the room, for example if
|
||||||
|
* the client has archived the room. Instead the client should keep two separate copies of the state: the one from the 'invite_state'
|
||||||
|
* and one from the archived 'state'. If the client joins the room then the current state will be given as a delta against the
|
||||||
|
* archived 'state' not the 'invite_state'.
|
||||||
|
*/
|
||||||
|
var inviteState: RoomInviteState? = null
|
||||||
|
)
|
@ -0,0 +1,14 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
// PresenceSyncResponse represents the updates to the presence status of other users during server sync v2.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class PresenceSyncResponse(
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of presence events (array of Event with type m.presence).
|
||||||
|
*/
|
||||||
|
var events: List<Event>? = null
|
||||||
|
)
|
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 OpenMarket Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* 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 im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
// RoomInviteState represents the state of a room that the user has been invited to.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomInviteState(
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of state events (array of MXEvent).
|
||||||
|
*/
|
||||||
|
var events: List<Event>? = null
|
||||||
|
)
|
@ -0,0 +1,41 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class representing a room from a JSON response from room or global initial sync.
|
||||||
|
*/
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomResponse(
|
||||||
|
// The room identifier.
|
||||||
|
var roomId: String? = null,
|
||||||
|
|
||||||
|
// The last recent messages of the room.
|
||||||
|
var messages: TokensChunkResponse<Event>? = null,
|
||||||
|
|
||||||
|
// The state events.
|
||||||
|
var state: List<Event>? = null,
|
||||||
|
|
||||||
|
// The private data that this user has attached to this room.
|
||||||
|
var accountData: List<Event>? = null,
|
||||||
|
|
||||||
|
// The current user membership in this room.
|
||||||
|
var membership: String? = null,
|
||||||
|
|
||||||
|
// The room visibility (public/private).
|
||||||
|
var visibility: String? = null,
|
||||||
|
|
||||||
|
// The matrix id of the inviter in case of pending invitation.
|
||||||
|
var inviter: String? = null,
|
||||||
|
|
||||||
|
// The invite event if membership is invite.
|
||||||
|
var invite: Event? = null,
|
||||||
|
|
||||||
|
// The presence status of other users (Provided in case of room initial sync @see http://matrix.org/docs/api/client-server/#!/-rooms/get_room_sync_data)).
|
||||||
|
var presence: List<Event>? = null,
|
||||||
|
|
||||||
|
// The read receipts (Provided in case of room initial sync).
|
||||||
|
var receipts: List<Event>? = null
|
||||||
|
)
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 OpenMarket Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* 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 im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
// RoomSync represents the response for a room during server sync v2.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomSync(
|
||||||
|
/**
|
||||||
|
* The state updates for the room.
|
||||||
|
*/
|
||||||
|
var state: RoomSyncState? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The timeline of messages and state changes in the room.
|
||||||
|
*/
|
||||||
|
var timeline: RoomSyncTimeline? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ephemeral events in the room that aren't recorded in the timeline or state of the room (e.g. typing, receipts).
|
||||||
|
*/
|
||||||
|
var ephemeral: RoomSyncEphemeral? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The account data events for the room (e.g. tags).
|
||||||
|
*/
|
||||||
|
var accountData: RoomSyncAccountData? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The notification counts for the room.
|
||||||
|
*/
|
||||||
|
var unreadNotifications: RoomSyncUnreadNotifications? = null
|
||||||
|
|
||||||
|
)
|
@ -0,0 +1,12 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomSyncAccountData(
|
||||||
|
/**
|
||||||
|
* List of account data events (array of Event).
|
||||||
|
*/
|
||||||
|
var events: List<Event>? = null
|
||||||
|
)
|
@ -0,0 +1,14 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
// RoomSyncEphemeral represents the ephemeral events in the room that aren't recorded in the timeline or state of the room (e.g. typing).
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomSyncEphemeral(
|
||||||
|
/**
|
||||||
|
* List of ephemeral events (array of Event).
|
||||||
|
*/
|
||||||
|
var events: List<Event>? = null
|
||||||
|
)
|
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 OpenMarket Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* 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 im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
// RoomSyncState represents the state updates for a room during server sync v2.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomSyncState(
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of state events (array of Event). The resulting state corresponds to the *start* of the timeline.
|
||||||
|
*/
|
||||||
|
val events: List<Event>? = null)
|
@ -0,0 +1,25 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
// RoomSyncTimeline represents the timeline of messages and state changes for a room during server sync v2.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomSyncTimeline(
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of events (array of Event).
|
||||||
|
*/
|
||||||
|
var events: List<Event>? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Boolean which tells whether there are more events on the server
|
||||||
|
*/
|
||||||
|
var limited: Boolean = false,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the batch was limited then this is a token that can be supplied to the server to retrieve more events
|
||||||
|
*/
|
||||||
|
var prevBatch: String? = null
|
||||||
|
)
|
@ -0,0 +1,25 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `MXRoomSyncUnreadNotifications` represents the unread counts for a room.
|
||||||
|
*/
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomSyncUnreadNotifications(
|
||||||
|
/**
|
||||||
|
* List of account data events (array of Event).
|
||||||
|
*/
|
||||||
|
val events: List<Event>? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of unread messages that match the push notification rules.
|
||||||
|
*/
|
||||||
|
val notificationCount: Int? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of highlighted unread messages (subset of notifications).
|
||||||
|
*/
|
||||||
|
val highlightCount: Int? = null)
|
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 OpenMarket Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* 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 im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
// RoomsSyncResponse represents the rooms list in server sync v2 response.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class RoomsSyncResponse(
|
||||||
|
/**
|
||||||
|
* Joined rooms: keys are rooms ids.
|
||||||
|
*/
|
||||||
|
var join: Map<String, RoomSync>? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invitations. The rooms that the user has been invited to: keys are rooms ids.
|
||||||
|
*/
|
||||||
|
var invite: Map<String, InvitedRoomSync>? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Left rooms. The rooms that the user has left or been banned from: keys are rooms ids.
|
||||||
|
*/
|
||||||
|
var leave: Map<String, RoomSync>? = null)
|
@ -0,0 +1,44 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
// SyncResponse represents the request response for server sync v2.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class SyncResponse(
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The user private data.
|
||||||
|
*/
|
||||||
|
var accountData: Map<String, Any>? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The opaque token for the end.
|
||||||
|
*/
|
||||||
|
var nextBatch: String? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The updates to the presence status of other users.
|
||||||
|
*/
|
||||||
|
var presence: PresenceSyncResponse? = null,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Data directly sent to one of user's devices.
|
||||||
|
*/
|
||||||
|
var toDevice: ToDeviceSyncResponse? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of rooms.
|
||||||
|
*/
|
||||||
|
var rooms: RoomsSyncResponse? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Devices list update
|
||||||
|
*/
|
||||||
|
var deviceLists: DeviceListResponse? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One time keys management
|
||||||
|
*/
|
||||||
|
var deviceOneTimeKeysCount: DeviceOneTimeKeysCountSyncResponse? = null
|
||||||
|
|
||||||
|
)
|
@ -0,0 +1,15 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.core.api.events.Event
|
||||||
|
|
||||||
|
// ToDeviceSyncResponse represents the data directly sent to one of user's devices.
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class ToDeviceSyncResponse(
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of direct-to-device events.
|
||||||
|
*/
|
||||||
|
var events: List<Event>? = null
|
||||||
|
)
|
@ -0,0 +1,9 @@
|
|||||||
|
package im.vector.matrix.core.internal.sync.data
|
||||||
|
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class TokensChunkResponse<T>(
|
||||||
|
var start: String? = null,
|
||||||
|
var end: String? = null,
|
||||||
|
var chunk: List<T>? = null)
|
Loading…
Reference in New Issue
Block a user