mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 00:05:16 +00:00
Can send images in conversations
This commit is contained in:
@ -1,11 +1,10 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:comunic/helpers/account_credentials_helper.dart';
|
||||
import 'package:comunic/models/api_request.dart';
|
||||
import 'package:comunic/models/api_response.dart';
|
||||
import 'package:comunic/models/config.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:dio/dio.dart';
|
||||
|
||||
/// API Helper
|
||||
///
|
||||
@ -16,7 +15,7 @@ class APIHelper {
|
||||
///
|
||||
/// This method should never throw but the response code of the [APIResponse]
|
||||
/// should be verified before accessing response content
|
||||
Future<APIResponse> exec(APIRequest request) async {
|
||||
Future<APIResponse> exec(APIRequest request, {bool multipart = false}) async {
|
||||
try {
|
||||
//Add API tokens
|
||||
request.addString("serviceName", config().serviceName);
|
||||
@ -38,20 +37,39 @@ class APIHelper {
|
||||
else
|
||||
url = Uri.https(config().apiServerName, path);
|
||||
|
||||
final response = await http.post(
|
||||
final data = FormData.from(request.args);
|
||||
|
||||
// Process files (if required)
|
||||
if (multipart)
|
||||
request.files.forEach(
|
||||
(k, v) => data.add(k, UploadFileInfo(v, v.path.split("/").last)));
|
||||
|
||||
// Execute the request
|
||||
final response = await Dio().post(
|
||||
url.toString(),
|
||||
body: request.args,
|
||||
encoding: utf8
|
||||
data: data,
|
||||
options: Options(
|
||||
receiveDataWhenStatusError: true,
|
||||
validateStatus: (s) => true,
|
||||
responseType: ResponseType.plain,
|
||||
),
|
||||
);
|
||||
|
||||
if (response.statusCode != HttpStatus.ok)
|
||||
return APIResponse(response.statusCode, null);
|
||||
|
||||
return APIResponse(response.statusCode, utf8.decode(response.bodyBytes));
|
||||
return APIResponse(response.statusCode, response.data);
|
||||
} on Exception catch (e) {
|
||||
print(e.toString());
|
||||
print("Could not execute a request!");
|
||||
return APIResponse(-1, null);
|
||||
}
|
||||
}
|
||||
|
||||
/// Same as exec, but also allows to send files
|
||||
///
|
||||
/// Warning ! Currently the response body to such requests is always null !
|
||||
Future<APIResponse> execWithFiles(APIRequest request) async {
|
||||
return await exec(request, multipart: true);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import 'package:comunic/lists/conversation_messages_list.dart';
|
||||
import 'package:comunic/lists/conversations_list.dart';
|
||||
import 'package:comunic/lists/users_list.dart';
|
||||
import 'package:comunic/models/api_request.dart';
|
||||
import 'package:comunic/models/api_response.dart';
|
||||
import 'package:comunic/models/conversation.dart';
|
||||
import 'package:comunic/models/conversation_message.dart';
|
||||
import 'package:comunic/models/new_conversation_message.dart';
|
||||
@ -162,14 +163,25 @@ class ConversationsHelper {
|
||||
|
||||
/// Send a new message to the server
|
||||
Future<SendMessageResult> sendMessage(NewConversationMessage message) async {
|
||||
final response = await APIRequest(
|
||||
final request = APIRequest(
|
||||
uri: "conversations/sendMessage",
|
||||
needLogin: true,
|
||||
args: {
|
||||
"conversationID": message.conversationID.toString(),
|
||||
"message": message.message
|
||||
"message": message.hasMessage ? message.message : ""
|
||||
},
|
||||
).exec();
|
||||
);
|
||||
|
||||
//Check for image
|
||||
if(message.hasImage)
|
||||
request.addFile("image", message.image);
|
||||
|
||||
//Send the message
|
||||
APIResponse response;
|
||||
if(!message.hasImage)
|
||||
response = await request.exec();
|
||||
else
|
||||
response = await request.execWithFiles();
|
||||
|
||||
if(response.code == 401)
|
||||
return SendMessageResult.MESSAGE_REJECTED;
|
||||
|
Reference in New Issue
Block a user