mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-03 19:54:12 +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