parser method

  1. @override
Future<RequestModel> parser(
  1. dynamic request
)
override

Implementation

@override
Future<RequestModel> parser(dynamic request) async{
  RequestOptions dioRequest  = request as RequestOptions;
  String url = dioRequest.path;
  Uri uri = Uri.parse(url);
  String briefUrl = dioRequest.path.isEmpty ? "" : url.substring(url.lastIndexOf('/') + 1);
  String pathWithQuery = dioRequest.path.isEmpty ? "" : url.replaceFirst(uri.origin, "");
  Map<String, dynamic> headers = Map.from(dioRequest.headers);
  if (briefUrl.isEmpty || briefUrl == "/") {
    briefUrl = uri.host;
  }
  if (pathWithQuery.isEmpty || pathWithQuery == "/") {
    pathWithQuery = uri.host;
  }
  dynamic body = dioRequest.data;
  FormDataModel? formDataModel;
  if (body is FormData) {
    FormData newFormData = FormData.fromMap({});
    newFormData.fields.addAll(body.fields);
    if (headers.containsKey("content-type")) {
      headers["content-type"] = headers["content-type"].toString().replaceAll(body.boundary, newFormData.boundary);
    }

    int filesIndex = 0;
    for (MapEntry<String, MultipartFile> originalMap in body.files) {
      MultipartFile originalFile = originalMap.value;
      List<MultipartFile> copiedMultipartFiles = await _copyMultipartFileForTwo(originalFile);
      if (copiedMultipartFiles.length == 2) {
        newFormData.files.add(MapEntry(originalMap.key, copiedMultipartFiles[0]));
        body.files[filesIndex] = MapEntry(originalMap.key, copiedMultipartFiles[1]);
      }
      filesIndex ++;
    }

    String formDataAsString = "";
    try {
      formDataAsString = await newFormData.finalize().transform(utf8.decoder).join();
    } catch (_) {}
    formDataModel = FormDataModel(
      newFormData.fields.map((entry) => { entry.key: entry.value }).toList(),
      List.of(body.files),
      newFormData.boundary,
      formDataAsString
    );
    body = null;
  }

  RequestModel requestModel = RequestModel(
    url,
    pathWithQuery,
    briefUrl,
    dioRequest.method,
    -1,
    headers,
    body,
    formDataModel,
    null,
    dioRequest,
    FnTimeUtils.getTimestamp()
  );
  return requestModel;
}