sendMediaMessage static method

Future<Response> sendMediaMessage(
  1. dynamic data,
  2. MessageType type
)

Implementation

static Future<Response> sendMediaMessage(
    dynamic data, MessageType type) async {
  final pref = await SharedPreferences.getInstance();
  var encoded = {};
  //Validation of the Message Type that is going to be sent
  var messageType = type.name;
  switch (type) {
    case MessageType.media:
      var url = data as String;
      var parseName = url.split("/");
      final mimeType = lookupMimeType(url);
      //Validation of mimetype to know if the current media is a video or an image
      if (mimeType!.contains("jpg") ||
          mimeType.contains("jpeg") ||
          mimeType.contains("png") ||
          mimeType.contains("tiff") ||
          mimeType.contains("svg")) {
        messageType = "image";
      } else {
        messageType = "video";
      }
      //Message request model is needed to ensure that the request is send correctly and recollects all the data needed
      MessageRequest request = MessageRequest(
          type: messageType,
          data: MessageRequestData(
              mediaUrl: url,
              mimeType: mimeType,
              fileName: parseName[parseName.length - 1]),
          metadata: MessageRequestMetadata(idTemp: const Uuid().v4()),
          createdAt: DateTime.now().toUtc().millisecondsSinceEpoch,
          senderId: pref.getString(IdentifierType.userId.name),
          sessionUuid: pref.getString(IdentifierType.sessionId.name),
          recipinetId: "HOOK",
          integrationId: pref.getString(IdentifierType.integrationId.name));
      encoded = request.toJson();

      break;
    case MessageType.location:
      //In case of location it gets the coordinates that are going to be sent
      var position = data["data"][0] as Position;
      MessageRequest request = MessageRequest(
          type: type.name,
          data: MessageRequestData(
              lat: position.latitude,
              long: position.longitude,
              message: "Se envió data de localización"),
          metadata: MessageRequestMetadata(idTemp: const Uuid().v4()),
          createdAt: DateTime.now().toUtc().millisecondsSinceEpoch,
          senderId: pref.getString(IdentifierType.userId.name),
          sessionUuid: pref.getString(IdentifierType.sessionId.name),
          recipinetId: "HOOK",
          integrationId: pref.getString(IdentifierType.integrationId.name));
      encoded = request.toJson();
      break;
    //In case of file it gets the files that are going to be sent as an URL
    case MessageType.file:
      var url = data as String;
      var parseName = url.split("/");
      final mimeType = lookupMimeType(url);
      MessageRequest request = MessageRequest(
          type: type.name,
          data: MessageRequestData(
              mediaUrl: url,
              mimeType: mimeType,
              fileName: parseName[parseName.length - 1]),
          metadata: MessageRequestMetadata(idTemp: const Uuid().v4()),
          createdAt: DateTime.now().toUtc().millisecondsSinceEpoch,
          senderId: pref.getString(IdentifierType.userId.name),
          sessionUuid: pref.getString(IdentifierType.sessionId.name),
          recipinetId: "HOOK",
          integrationId: pref.getString(IdentifierType.integrationId.name));
      encoded = request.toJson();
      break;
    //No avalaible here
    case MessageType.text:
      break;
    //No avalaible here
    case MessageType.button:
      break;
    //No avalaible here
    case MessageType.carousel:
      break;
    case MessageType.image:
      break;
    case MessageType.video:
      break;
  }
  //Waiting for response while is sent as an Http Post
  var response = await ApiManager.post(
      '${SocketUrls.baseBrokerEndpoint}${SocketUrls.sendMessageEndpoint}',
      body: jsonEncode(encoded));
  return response;
}