From 77f62f042d6b21b9c2e2cbc6bec6b2db9fc336bc Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Fri, 18 Oct 2019 11:05:07 +0000 Subject: [PATCH] [Files] Use MatrixFile --- lib/famedlysdk.dart | 1 + lib/src/Client.dart | 4 ++-- lib/src/Connection.dart | 10 +++++----- lib/src/Room.dart | 13 ++++++------- lib/src/utils/MatrixFile.dart | 7 +++++++ test/Client_test.dart | 8 +++++--- test/Room_test.dart | 9 +++++---- 7 files changed, 31 insertions(+), 21 deletions(-) create mode 100644 lib/src/utils/MatrixFile.dart diff --git a/lib/famedlysdk.dart b/lib/famedlysdk.dart index c33b8fa5..a365d6da 100644 --- a/lib/famedlysdk.dart +++ b/lib/famedlysdk.dart @@ -30,6 +30,7 @@ export 'package:famedlysdk/src/sync/RoomUpdate.dart'; export 'package:famedlysdk/src/sync/EventUpdate.dart'; export 'package:famedlysdk/src/sync/UserUpdate.dart'; export 'package:famedlysdk/src/utils/ChatTime.dart'; +export 'package:famedlysdk/src/utils/MatrixFile.dart'; export 'package:famedlysdk/src/utils/MxContent.dart'; export 'package:famedlysdk/src/AccountData.dart'; export 'package:famedlysdk/src/Client.dart'; diff --git a/lib/src/Client.dart b/lib/src/Client.dart index f2067cd1..f2422f4e 100644 --- a/lib/src/Client.dart +++ b/lib/src/Client.dart @@ -23,12 +23,12 @@ import 'dart:async'; import 'dart:core'; -import 'dart:io'; import 'package:famedlysdk/src/AccountData.dart'; import 'package:famedlysdk/src/Presence.dart'; import 'package:famedlysdk/src/StoreAPI.dart'; import 'package:famedlysdk/src/sync/UserUpdate.dart'; +import 'package:famedlysdk/src/utils/MatrixFile.dart'; import 'Connection.dart'; import 'Room.dart'; @@ -342,7 +342,7 @@ class Client { } /// Uploads a new user avatar for this user. Returns ErrorResponse if something went wrong. - Future setAvatar(File file) async { + Future setAvatar(MatrixFile file) async { final uploadResp = await connection.upload(file); if (uploadResp is ErrorResponse) return uploadResp; final setAvatarResp = await connection.jsonRequest( diff --git a/lib/src/Connection.dart b/lib/src/Connection.dart index 6f3ff52d..e90d2b7a 100644 --- a/lib/src/Connection.dart +++ b/lib/src/Connection.dart @@ -24,10 +24,10 @@ import 'dart:async'; import 'dart:convert'; import 'dart:core'; -import 'dart:io'; import 'package:famedlysdk/src/Room.dart'; import 'package:famedlysdk/src/RoomList.dart'; +import 'package:famedlysdk/src/utils/MatrixFile.dart'; import 'package:http/http.dart' as http; import 'package:mime_type/mime_type.dart'; @@ -217,7 +217,7 @@ class Connection { dynamic json; if (data is Map) data.removeWhere((k, v) => v == null); (!(data is String)) ? json = jsonEncode(data) : json = data; - if (data is List) json = data; + if (data is List || action.startsWith("/media/r0/upload")) json = data; final url = "${client.homeserver}/_matrix${action}"; @@ -288,10 +288,10 @@ class Connection { /// Uploads a file with the name [fileName] as base64 encoded to the server /// and returns the mxc url as a string or an [ErrorResponse]. - Future upload(File file) async { - List fileBytes; + Future upload(MatrixFile file) async { + dynamic fileBytes; if (client.homeserver != "https://fakeServer.notExisting") - fileBytes = await file.readAsBytes(); + fileBytes = file.bytes; String fileName = file.path.split("/").last; String mimeType = mime(file.path); print("[UPLOADING] $fileName, type: $mimeType, size: ${fileBytes?.length}"); diff --git a/lib/src/Room.dart b/lib/src/Room.dart index 449a2cf1..e52235f7 100644 --- a/lib/src/Room.dart +++ b/lib/src/Room.dart @@ -21,8 +21,6 @@ * along with famedlysdk. If not, see . */ -import 'dart:io'; - import 'package:famedlysdk/src/Client.dart'; import 'package:famedlysdk/src/Event.dart'; import 'package:famedlysdk/src/RoomAccountData.dart'; @@ -30,6 +28,7 @@ import 'package:famedlysdk/src/RoomState.dart'; import 'package:famedlysdk/src/responses/ErrorResponse.dart'; import 'package:famedlysdk/src/sync/EventUpdate.dart'; import 'package:famedlysdk/src/utils/ChatTime.dart'; +import 'package:famedlysdk/src/utils/MatrixFile.dart'; import 'package:famedlysdk/src/utils/MxContent.dart'; //import 'package:image/image.dart'; import 'package:mime_type/mime_type.dart'; @@ -251,13 +250,13 @@ class Room { Future sendTextEvent(String message, {String txid = null}) => sendEvent({"msgtype": "m.text", "body": message}, txid: txid); - Future sendFileEvent(File file, String msgType, + Future sendFileEvent(MatrixFile file, String msgType, {String txid = null}) async { String fileName = file.path.split("/").last; // Try to get the size of the file int size; try { - size = file.readAsBytesSync().length; + size = file.size; } catch (e) { print("[UPLOAD] Could not get size. Reason: ${e.toString()}"); } @@ -285,7 +284,7 @@ class Room { return await sendEvent(content, txid: txid); } - Future sendImageEvent(File file, + Future sendImageEvent(MatrixFile file, {String txid = null, int width, int height}) async { String fileName = file.path.split("/").last; final dynamic uploadResp = await client.connection.upload(file); @@ -295,7 +294,7 @@ class Room { "body": fileName, "url": uploadResp, "info": { - "size": file.readAsBytesSync().length, + "size": file.size, "mimetype": mime(fileName), "w": width, "h": height, @@ -717,7 +716,7 @@ class Room { /// Uploads a new user avatar for this room. Returns ErrorResponse if something went wrong /// and the event ID otherwise. - Future setAvatar(File file) async { + Future setAvatar(MatrixFile file) async { final uploadResp = await client.connection.upload(file); if (uploadResp is ErrorResponse) return uploadResp; final setAvatarResp = await client.connection.jsonRequest( diff --git a/lib/src/utils/MatrixFile.dart b/lib/src/utils/MatrixFile.dart new file mode 100644 index 00000000..ee637d17 --- /dev/null +++ b/lib/src/utils/MatrixFile.dart @@ -0,0 +1,7 @@ +class MatrixFile { + List bytes; + String path; + + MatrixFile({this.bytes, this.path}); + int get size => bytes.length; +} diff --git a/test/Client_test.dart b/test/Client_test.dart index c5cb7aed..f82ee882 100644 --- a/test/Client_test.dart +++ b/test/Client_test.dart @@ -22,7 +22,6 @@ */ import 'dart:async'; -import 'dart:io'; import 'package:famedlysdk/src/AccountData.dart'; import 'package:famedlysdk/src/Client.dart'; @@ -35,6 +34,7 @@ import 'package:famedlysdk/src/responses/PushrulesResponse.dart'; import 'package:famedlysdk/src/sync/EventUpdate.dart'; import 'package:famedlysdk/src/sync/RoomUpdate.dart'; import 'package:famedlysdk/src/sync/UserUpdate.dart'; +import 'package:famedlysdk/src/utils/MatrixFile.dart'; import 'package:test/test.dart'; import 'FakeMatrixApi.dart'; @@ -298,14 +298,16 @@ void main() { }); test('upload', () async { - final File testFile = File.fromUri(Uri.parse("fake/path/file.jpeg")); + final MatrixFile testFile = + MatrixFile(bytes: [], path: "fake/path/file.jpeg"); final dynamic resp = await matrix.connection.upload(testFile); expect(resp, "mxc://example.com/AQwafuaFswefuhsfAFAgsw"); }); test('setAvatar', () async { - final File testFile = File.fromUri(Uri.parse("fake/path/file.jpeg")); + final MatrixFile testFile = + MatrixFile(bytes: [], path: "fake/path/file.jpeg"); final dynamic resp = await matrix.setAvatar(testFile); expect(resp, null); }); diff --git a/test/Room_test.dart b/test/Room_test.dart index ae55386a..f78f196f 100644 --- a/test/Room_test.dart +++ b/test/Room_test.dart @@ -21,8 +21,6 @@ * along with famedlysdk. If not, see . */ -import 'dart:io'; - import 'package:famedlysdk/src/Client.dart'; import 'package:famedlysdk/src/Event.dart'; import 'package:famedlysdk/src/Room.dart'; @@ -30,6 +28,7 @@ import 'package:famedlysdk/src/RoomState.dart'; import 'package:famedlysdk/src/Timeline.dart'; import 'package:famedlysdk/src/User.dart'; import 'package:famedlysdk/src/utils/ChatTime.dart'; +import 'package:famedlysdk/src/utils/MatrixFile.dart'; import 'package:test/test.dart'; import 'FakeMatrixApi.dart'; @@ -259,7 +258,8 @@ void main() { }); test('setAvatar', () async { - final File testFile = File.fromUri(Uri.parse("fake/path/file.jpeg")); + final MatrixFile testFile = + MatrixFile(bytes: [], path: "fake/path/file.jpeg"); final dynamic resp = await room.setAvatar(testFile); expect(resp, "YUwRidLecu:example.com"); }); @@ -286,7 +286,8 @@ void main() { });*/ test('sendFileEvent', () async { - final File testFile = File.fromUri(Uri.parse("fake/path/file.jpeg")); + final MatrixFile testFile = + MatrixFile(bytes: [], path: "fake/path/file.jpeg"); final dynamic resp = await room.sendFileEvent(testFile, "m.file", txid: "testtxid"); expect(resp, "42");