@@ -26,10 +26,11 @@ #import "MTXFetchRoomListFailedException.h" #import "MTXJoinRoomFailedException.h" #import "MTXLeaveRoomFailedException.h" #import "MTXLoginFailedException.h" #import "MTXLogoutFailedException.h" +#import "MTXSendMessageFailedException.h" static void validateHomeserver(OFURL *homeserver) { if (![homeserver.scheme isEqual: @"http"] && @@ -186,11 +187,11 @@ return [MTXRequest requestWithPath: path accessToken: _accessToken homeserver: _homeserver]; } -- (void)logOutWithBlock: (mtx_client_logout_block_t)block +- (void)logOutWithBlock: (mtx_client_response_block_t)block { void *pool = objc_autoreleasePoolPush(); MTXRequest *request = [self requestWithPath: @"/_matrix/client/r0/logout"]; request.method = OF_HTTP_REQUEST_METHOD_POST; @@ -288,11 +289,11 @@ objc_autoreleasePoolPop(pool); } - (void)leaveRoom: (OFString *)roomID - block: (mtx_client_room_leave_block_t)block + block: (mtx_client_response_block_t)block { void *pool = objc_autoreleasePoolPush(); MTXRequest *request = [self requestWithPath: [OFString stringWithFormat: @"/_matrix/client/r0/rooms/%@/leave", roomID]]; request.method = OF_HTTP_REQUEST_METHOD_POST; @@ -309,12 +310,48 @@ statusCode: statusCode response: response client: self]); return; } + + block(nil); + }]; + + objc_autoreleasePoolPop(pool); +} + +- (void)sendMessage: (OFString *)message + roomID: (OFString *)roomID + block: (mtx_client_response_block_t)block; +{ + void *pool = objc_autoreleasePoolPush(); + OFString *path = [OFString stringWithFormat: + @"/_matrix/client/r0/rooms/%@/send/m.room.message", roomID]; + MTXRequest *request = [self requestWithPath: path]; + request.method = OF_HTTP_REQUEST_METHOD_POST; + request.body = @{ + @"msgtype": @"m.text", + @"body": message + }; + [request performWithBlock: ^ (mtx_response_t response, int statusCode, + id exception) { + if (exception != nil) { + block(exception); + return; + } + + if (statusCode != 200) { + block([MTXSendMessageFailedException + exceptionWithMessage: message + roomID: roomID + statusCode: statusCode + response: response + client: self]); + return; + } block(nil); }]; objc_autoreleasePoolPop(pool); } @end