Implement pinned events
This commit is contained in:
parent
ed262c0d51
commit
2afd0bb3a8
|
@ -27,6 +27,7 @@ abstract class EventTypes {
|
||||||
static const String RoomMember = 'm.room.member';
|
static const String RoomMember = 'm.room.member';
|
||||||
static const String RoomPowerLevels = 'm.room.power_levels';
|
static const String RoomPowerLevels = 'm.room.power_levels';
|
||||||
static const String RoomName = 'm.room.name';
|
static const String RoomName = 'm.room.name';
|
||||||
|
static const String RoomPinnedEvents = 'm.room.pinned_events';
|
||||||
static const String RoomTopic = 'm.room.topic';
|
static const String RoomTopic = 'm.room.topic';
|
||||||
static const String RoomAvatar = 'm.room.avatar';
|
static const String RoomAvatar = 'm.room.avatar';
|
||||||
static const String RoomTombstone = 'm.room.tombsone';
|
static const String RoomTombstone = 'm.room.tombsone';
|
||||||
|
|
|
@ -152,6 +152,14 @@ class Room {
|
||||||
? states[EventTypes.RoomName].content['name']
|
? states[EventTypes.RoomName].content['name']
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
|
/// The pinned events for this room. If there are no this returns an empty
|
||||||
|
/// list.
|
||||||
|
List<String> get pinnedEventIds => states[EventTypes.RoomPinnedEvents] != null
|
||||||
|
? (states[EventTypes.RoomPinnedEvents].content['pinned'] is List<String>
|
||||||
|
? states[EventTypes.RoomPinnedEvents].content['pinned']
|
||||||
|
: <String>[])
|
||||||
|
: <String>[];
|
||||||
|
|
||||||
/// Returns a localized displayname for this server. If the room is a groupchat
|
/// Returns a localized displayname for this server. If the room is a groupchat
|
||||||
/// without a name, then it will return the localized version of 'Group with Alice' instead
|
/// without a name, then it will return the localized version of 'Group with Alice' instead
|
||||||
/// of just 'Alice' to make it different to a direct chat.
|
/// of just 'Alice' to make it different to a direct chat.
|
||||||
|
@ -353,6 +361,14 @@ class Room {
|
||||||
{'topic': newName},
|
{'topic': newName},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/// Call the Matrix API to change the pinned events of this room.
|
||||||
|
Future<String> setPinnedEvents(List<String> pinnedEventIds) =>
|
||||||
|
client.api.sendState(
|
||||||
|
id,
|
||||||
|
EventTypes.RoomPinnedEvents,
|
||||||
|
{'pinned': pinnedEventIds},
|
||||||
|
);
|
||||||
|
|
||||||
/// return all current emote packs for this room
|
/// return all current emote packs for this room
|
||||||
Map<String, Map<String, String>> get emotePacks {
|
Map<String, Map<String, String>> get emotePacks {
|
||||||
final packs = <String, Map<String, String>>{};
|
final packs = <String, Map<String, String>>{};
|
||||||
|
|
|
@ -258,7 +258,7 @@ void main() {
|
||||||
|
|
||||||
var eventUpdateList = await eventUpdateListFuture;
|
var eventUpdateList = await eventUpdateListFuture;
|
||||||
|
|
||||||
expect(eventUpdateList.length, 13);
|
expect(eventUpdateList.length, 14);
|
||||||
|
|
||||||
expect(eventUpdateList[0].eventType, 'm.room.member');
|
expect(eventUpdateList[0].eventType, 'm.room.member');
|
||||||
expect(eventUpdateList[0].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[0].roomID, '!726s6s6q:example.com');
|
||||||
|
@ -272,41 +272,45 @@ void main() {
|
||||||
expect(eventUpdateList[2].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[2].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[2].type, 'state');
|
expect(eventUpdateList[2].type, 'state');
|
||||||
|
|
||||||
expect(eventUpdateList[3].eventType, 'm.room.member');
|
expect(eventUpdateList[3].eventType, 'm.room.pinned_events');
|
||||||
expect(eventUpdateList[3].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[3].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[3].type, 'timeline');
|
expect(eventUpdateList[3].type, 'state');
|
||||||
|
|
||||||
expect(eventUpdateList[4].eventType, 'm.room.message');
|
expect(eventUpdateList[4].eventType, 'm.room.member');
|
||||||
expect(eventUpdateList[4].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[4].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[4].type, 'timeline');
|
expect(eventUpdateList[4].type, 'timeline');
|
||||||
|
|
||||||
expect(eventUpdateList[5].eventType, 'm.typing');
|
expect(eventUpdateList[5].eventType, 'm.room.message');
|
||||||
expect(eventUpdateList[5].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[5].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[5].type, 'ephemeral');
|
expect(eventUpdateList[5].type, 'timeline');
|
||||||
|
|
||||||
expect(eventUpdateList[6].eventType, 'm.receipt');
|
expect(eventUpdateList[6].eventType, 'm.typing');
|
||||||
expect(eventUpdateList[6].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[6].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[6].type, 'ephemeral');
|
expect(eventUpdateList[6].type, 'ephemeral');
|
||||||
|
|
||||||
expect(eventUpdateList[7].eventType, 'm.receipt');
|
expect(eventUpdateList[7].eventType, 'm.receipt');
|
||||||
expect(eventUpdateList[7].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[7].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[7].type, 'account_data');
|
expect(eventUpdateList[7].type, 'ephemeral');
|
||||||
|
|
||||||
expect(eventUpdateList[8].eventType, 'm.tag');
|
expect(eventUpdateList[8].eventType, 'm.receipt');
|
||||||
expect(eventUpdateList[8].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[8].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[8].type, 'account_data');
|
expect(eventUpdateList[8].type, 'account_data');
|
||||||
|
|
||||||
expect(eventUpdateList[9].eventType, 'org.example.custom.room.config');
|
expect(eventUpdateList[9].eventType, 'm.tag');
|
||||||
expect(eventUpdateList[9].roomID, '!726s6s6q:example.com');
|
expect(eventUpdateList[9].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[9].type, 'account_data');
|
expect(eventUpdateList[9].type, 'account_data');
|
||||||
|
|
||||||
expect(eventUpdateList[10].eventType, 'm.room.name');
|
expect(eventUpdateList[10].eventType, 'org.example.custom.room.config');
|
||||||
expect(eventUpdateList[10].roomID, '!696r7674:example.com');
|
expect(eventUpdateList[10].roomID, '!726s6s6q:example.com');
|
||||||
expect(eventUpdateList[10].type, 'invite_state');
|
expect(eventUpdateList[10].type, 'account_data');
|
||||||
|
|
||||||
expect(eventUpdateList[11].eventType, 'm.room.member');
|
expect(eventUpdateList[11].eventType, 'm.room.name');
|
||||||
expect(eventUpdateList[11].roomID, '!696r7674:example.com');
|
expect(eventUpdateList[11].roomID, '!696r7674:example.com');
|
||||||
expect(eventUpdateList[11].type, 'invite_state');
|
expect(eventUpdateList[11].type, 'invite_state');
|
||||||
|
|
||||||
|
expect(eventUpdateList[12].eventType, 'm.room.member');
|
||||||
|
expect(eventUpdateList[12].roomID, '!696r7674:example.com');
|
||||||
|
expect(eventUpdateList[12].type, 'invite_state');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('To Device Update Test', () async {
|
test('To Device Update Test', () async {
|
||||||
|
|
|
@ -194,6 +194,18 @@ class FakeMatrixApi extends MockClient {
|
||||||
'origin_server_ts': 1417731086795,
|
'origin_server_ts': 1417731086795,
|
||||||
'event_id': '666972737430353:example.com'
|
'event_id': '666972737430353:example.com'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'content': {
|
||||||
|
'pinned': ['1234:bla']
|
||||||
|
},
|
||||||
|
'type': 'm.room.pinned_events',
|
||||||
|
'event_id': '21432735824443PhrSn:example.org',
|
||||||
|
'room_id': '!1234:example.com',
|
||||||
|
'sender': '@example:example.org',
|
||||||
|
'origin_server_ts': 1432735824653,
|
||||||
|
'unsigned': {'age': 1234},
|
||||||
|
'state_key': ''
|
||||||
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'timeline': {
|
'timeline': {
|
||||||
|
@ -1805,6 +1817,10 @@ class FakeMatrixApi extends MockClient {
|
||||||
(var reqI) => {
|
(var reqI) => {
|
||||||
'event_id': '42',
|
'event_id': '42',
|
||||||
},
|
},
|
||||||
|
'/client/r0/rooms/%21localpart%3Aserver.abc/state/m.room.pinned_events':
|
||||||
|
(var reqI) => {
|
||||||
|
'event_id': '42',
|
||||||
|
},
|
||||||
'/client/r0/rooms/%21localpart%3Aserver.abc/state/m.room.power_levels':
|
'/client/r0/rooms/%21localpart%3Aserver.abc/state/m.room.power_levels':
|
||||||
(var reqI) => {
|
(var reqI) => {
|
||||||
'event_id': '42',
|
'event_id': '42',
|
||||||
|
|
|
@ -150,6 +150,19 @@ void main() {
|
||||||
content: {'url': 'mxc://testurl'},
|
content: {'url': 'mxc://testurl'},
|
||||||
stateKey: '');
|
stateKey: '');
|
||||||
expect(room.avatar.toString(), 'mxc://testurl');
|
expect(room.avatar.toString(), 'mxc://testurl');
|
||||||
|
|
||||||
|
expect(room.pinnedEventIds, <String>[]);
|
||||||
|
room.states['m.room.pinned_events'] = Event(
|
||||||
|
senderId: '@test:example.com',
|
||||||
|
type: 'm.room.pinned_events',
|
||||||
|
roomId: room.id,
|
||||||
|
room: room,
|
||||||
|
eventId: '123',
|
||||||
|
content: {
|
||||||
|
'pinned': ['1234']
|
||||||
|
},
|
||||||
|
stateKey: '');
|
||||||
|
expect(room.pinnedEventIds.first, '1234');
|
||||||
room.states['m.room.message'] = Event(
|
room.states['m.room.message'] = Event(
|
||||||
senderId: '@test:example.com',
|
senderId: '@test:example.com',
|
||||||
type: 'm.room.message',
|
type: 'm.room.message',
|
||||||
|
|
Loading…
Reference in a new issue