diff --git a/lib/src/Room.dart b/lib/src/Room.dart index a05e161c..93bf3669 100644 --- a/lib/src/Room.dart +++ b/lib/src/Room.dart @@ -106,7 +106,7 @@ class Room { this.avatar, this.notificationCount, this.highlightCount, - this.prev_batch, + this.prev_batch = "", this.draft, this.unread, this.fullyRead, @@ -295,8 +295,8 @@ class Room { Future requestHistory({int historyCount = 100}) async { final dynamic resp = await client.connection.jsonRequest( type: "GET", - action: "/client/r0/rooms/$id/messages", - data: {"from": prev_batch, "dir": "b", "limit": historyCount}); + action: + "/client/r0/rooms/$id/messages?from=${prev_batch}&dir=b&limit=$historyCount"); if (resp is ErrorResponse) return; diff --git a/test/FakeMatrixApi.dart b/test/FakeMatrixApi.dart index cd6b1e72..98a37eac 100644 --- a/test/FakeMatrixApi.dart +++ b/test/FakeMatrixApi.dart @@ -31,8 +31,11 @@ class FakeMatrixApi extends MockClient { FakeMatrixApi() : super((request) async { // Collect data from Request - final String action = request.url.path.split("/_matrix")[1]; + String action = + request.url.path.split("/_matrix")[1] + "?" + request.url.query; + if (action.endsWith("?")) action = action.replaceAll("?", ""); final String method = request.method; + print("Got action: $action"); final dynamic data = method == "GET" ? request.url.queryParameters : request.body; var res = {}; @@ -76,64 +79,65 @@ class FakeMatrixApi extends MockClient { "origin_server_ts": 1432735824653, "unsigned": {"age": 1234} }, - "/client/r0/rooms/!1234:example.com/messages": (var req) => { - "start": "t47429-4392820_219380_26003_2265", - "end": "t47409-4357353_219380_26003_2265", - "chunk": [ - { - "content": { - "body": "This is an example text message", - "msgtype": "m.text", - "format": "org.matrix.custom.html", - "formatted_body": "This is an example text message" - }, - "type": "m.room.message", - "event_id": "3143273582443PhrSn:example.org", - "room_id": "!1234:example.com", - "sender": "@example:example.org", - "origin_server_ts": 1432735824653, - "unsigned": {"age": 1234} - }, - { - "content": {"name": "The room name"}, - "type": "m.room.name", - "event_id": "2143273582443PhrSn:example.org", - "room_id": "!1234:example.com", - "sender": "@example:example.org", - "origin_server_ts": 1432735824653, - "unsigned": {"age": 1234}, - "state_key": "" - }, - { - "content": { - "body": "Gangnam Style", - "url": "mxc://example.org/a526eYUSFFxlgbQYZmo442", - "info": { - "thumbnail_url": - "mxc://example.org/FHyPlCeYUSFFxlgbQYZmoEoe", - "thumbnail_info": { - "mimetype": "image/jpeg", - "size": 46144, - "w": 300, - "h": 300 + "/client/r0/rooms/!1234:example.com/messages?from=1234&dir=b&limit=100": + (var req) => { + "start": "t47429-4392820_219380_26003_2265", + "end": "t47409-4357353_219380_26003_2265", + "chunk": [ + { + "content": { + "body": "This is an example text message", + "msgtype": "m.text", + "format": "org.matrix.custom.html", + "formatted_body": "This is an example text message" }, - "w": 480, - "h": 320, - "duration": 2140786, - "size": 1563685, - "mimetype": "video/mp4" + "type": "m.room.message", + "event_id": "3143273582443PhrSn:example.org", + "room_id": "!1234:example.com", + "sender": "@example:example.org", + "origin_server_ts": 1432735824653, + "unsigned": {"age": 1234} }, - "msgtype": "m.video" - }, - "type": "m.room.message", - "event_id": "1143273582443PhrSn:example.org", - "room_id": "!1234:example.com", - "sender": "@example:example.org", - "origin_server_ts": 1432735824653, - "unsigned": {"age": 1234} - } - ] - }, + { + "content": {"name": "The room name"}, + "type": "m.room.name", + "event_id": "2143273582443PhrSn:example.org", + "room_id": "!1234:example.com", + "sender": "@example:example.org", + "origin_server_ts": 1432735824653, + "unsigned": {"age": 1234}, + "state_key": "" + }, + { + "content": { + "body": "Gangnam Style", + "url": "mxc://example.org/a526eYUSFFxlgbQYZmo442", + "info": { + "thumbnail_url": + "mxc://example.org/FHyPlCeYUSFFxlgbQYZmoEoe", + "thumbnail_info": { + "mimetype": "image/jpeg", + "size": 46144, + "w": 300, + "h": 300 + }, + "w": 480, + "h": 320, + "duration": 2140786, + "size": 1563685, + "mimetype": "video/mp4" + }, + "msgtype": "m.video" + }, + "type": "m.room.message", + "event_id": "1143273582443PhrSn:example.org", + "room_id": "!1234:example.com", + "sender": "@example:example.org", + "origin_server_ts": 1432735824653, + "unsigned": {"age": 1234} + } + ] + }, "/client/versions": (var req) => { "versions": ["r0.0.1", "r0.1.0", "r0.2.0", "r0.3.0", "r0.4.0"], "unstable_features": {"m.lazy_load_members": true}, @@ -306,134 +310,140 @@ class FakeMatrixApi extends MockClient { ] } }, - "/client/r0/sync": (var req) => { - "next_batch": Random().nextDouble().toString(), - "presence": { - "events": [ - { - "sender": "@alice:example.com", - "type": "m.presence", - "content": {"presence": "online"} - } - ] - }, - "account_data": { - "events": [ - { - "type": "org.example.custom.config", - "content": {"custom_config_key": "custom_config_value"} - } - ] - }, - "to_device": { - "events": [ - { - "sender": "@alice:example.com", - "type": "m.new_device", - "content": { - "device_id": "XYZABCDE", - "rooms": ["!726s6s6q:example.com"] - } - } - ] - }, - "rooms": { - "join": { - "!726s6s6q:example.com": { - "unread_notifications": { - "highlight_count": 2, - "notification_count": 2, - }, - "state": { - "events": [ - { - "sender": "@alice:example.com", - "type": "m.room.member", - "state_key": "@alice:example.com", - "content": {"membership": "join"}, - "origin_server_ts": 1417731086795, - "event_id": "66697273743031:example.com" - } - ] - }, - "timeline": { - "events": [ - { - "sender": "@bob:example.com", - "type": "m.room.member", - "state_key": "@bob:example.com", - "content": {"membership": "join"}, - "prev_content": {"membership": "invite"}, - "origin_server_ts": 1417731086795, - "event_id": "7365636s6r6432:example.com" - }, - { - "sender": "@alice:example.com", - "type": "m.room.message", - "txn_id": "1234", - "content": {"body": "I am a fish", "msgtype": "m.text"}, - "origin_server_ts": 1417731086797, - "event_id": "74686972643033:example.com" - } - ], - "limited": true, - "prev_batch": "t34-23535_0_0" - }, - "ephemeral": { - "events": [ - { - "type": "m.typing", - "content": { - "user_ids": ["@alice:example.com"] - } - } - ] - }, - "account_data": { - "events": [ - { - "type": "m.tag", - "content": { - "tags": { - "work": {"order": 1} - } - } - }, - { - "type": "org.example.custom.room.config", - "content": {"custom_config_key": "custom_config_value"} - } - ] - } - } - }, - "invite": { - "!696r7674:example.com": { - "invite_state": { - "events": [ - { - "sender": "@alice:example.com", - "type": "m.room.name", - "state_key": "", - "content": {"name": "My Room Name"} - }, - { - "sender": "@alice:example.com", - "type": "m.room.member", - "state_key": "@bob:example.com", - "content": {"membership": "invite"} - } - ] - } - } - }, - "leave": { - "!5345234234:example.com": { - "timeline": {"events": []} + "/client/r0/sync?filters=%7B%22room%22:%7B%22include_leave%22:true,%22state%22:%7B%22lazy_load_members%22:1%7D%7D": + (var req) => { + "next_batch": Random().nextDouble().toString(), + "presence": { + "events": [ + { + "sender": "@alice:example.com", + "type": "m.presence", + "content": {"presence": "online"} + } + ] }, + "account_data": { + "events": [ + { + "type": "org.example.custom.config", + "content": {"custom_config_key": "custom_config_value"} + } + ] + }, + "to_device": { + "events": [ + { + "sender": "@alice:example.com", + "type": "m.new_device", + "content": { + "device_id": "XYZABCDE", + "rooms": ["!726s6s6q:example.com"] + } + } + ] + }, + "rooms": { + "join": { + "!726s6s6q:example.com": { + "unread_notifications": { + "highlight_count": 2, + "notification_count": 2, + }, + "state": { + "events": [ + { + "sender": "@alice:example.com", + "type": "m.room.member", + "state_key": "@alice:example.com", + "content": {"membership": "join"}, + "origin_server_ts": 1417731086795, + "event_id": "66697273743031:example.com" + } + ] + }, + "timeline": { + "events": [ + { + "sender": "@bob:example.com", + "type": "m.room.member", + "state_key": "@bob:example.com", + "content": {"membership": "join"}, + "prev_content": {"membership": "invite"}, + "origin_server_ts": 1417731086795, + "event_id": "7365636s6r6432:example.com" + }, + { + "sender": "@alice:example.com", + "type": "m.room.message", + "txn_id": "1234", + "content": { + "body": "I am a fish", + "msgtype": "m.text" + }, + "origin_server_ts": 1417731086797, + "event_id": "74686972643033:example.com" + } + ], + "limited": true, + "prev_batch": "t34-23535_0_0" + }, + "ephemeral": { + "events": [ + { + "type": "m.typing", + "content": { + "user_ids": ["@alice:example.com"] + } + } + ] + }, + "account_data": { + "events": [ + { + "type": "m.tag", + "content": { + "tags": { + "work": {"order": 1} + } + } + }, + { + "type": "org.example.custom.room.config", + "content": { + "custom_config_key": "custom_config_value" + } + } + ] + } + } + }, + "invite": { + "!696r7674:example.com": { + "invite_state": { + "events": [ + { + "sender": "@alice:example.com", + "type": "m.room.name", + "state_key": "", + "content": {"name": "My Room Name"} + }, + { + "sender": "@alice:example.com", + "type": "m.room.member", + "state_key": "@bob:example.com", + "content": {"membership": "invite"} + } + ] + } + } + }, + "leave": { + "!5345234234:example.com": { + "timeline": {"events": []} + }, + }, + } }, - } - }, }, "POST": { "/client/r0/login": (var req) => { diff --git a/test/Timeline_test.dart b/test/Timeline_test.dart index b66ed69f..0af61dd9 100644 --- a/test/Timeline_test.dart +++ b/test/Timeline_test.dart @@ -41,7 +41,7 @@ void main() { client.connection.httpClient = FakeMatrixApi(); client.homeserver = "https://fakeServer.notExisting"; - Room room = Room(id: roomID, client: client); + Room room = Room(id: roomID, client: client, prev_batch: "1234"); Timeline timeline = Timeline( room: room, events: [],