auto method

Future<String> auto(
  1. Object resource, {
  2. bool runInIsolate = false,
  3. bool? storeMode,
  4. ProgressListener? onProgress,
  5. CancelToken? cancelToken,
})

Upload file resource according to type if String makes fromUrl upload if it is http/https url or try retrieve SharedFile if path is absolute, otherwise make an SharedFile request according to size

Implementation

Future<String> auto(
  Object resource, {
  bool runInIsolate = false,
  bool? storeMode,
  ProgressListener? onProgress,
  CancelToken? cancelToken,
}) async {
  assert(resource is String || resource is SharedFile,
      'The resource should be one of File or URL and File path');

  if (runInIsolate) {
    return _runInIsolate(
      resource,
      storeMode: storeMode,
      onProgress: onProgress,
      cancelToken: cancelToken,
    );
  }

  if (resource is String && resource.isNotEmpty) {
    Uri? uri = Uri.tryParse(resource);

    if (uri != null) {
      if (['http', 'https'].contains(uri.scheme)) {
        return fromUrl(
          resource,
          storeMode: storeMode,
          onProgress: onProgress,
        );
      } else if (uri.hasAbsolutePath) {
        resource = SharedFile.fromUri(uri);
      } else {
        throw Exception('Cannot parse URL from string');
      }
    }
  }

  if (resource is SharedFile) {
    final file = resource;
    final filesize = await file.length();

    if (filesize > _kRecomendedMaxFilesizeForBaseUpload) {
      return multipart(
        file,
        storeMode: storeMode,
        onProgress: onProgress,
        cancelToken: cancelToken,
      );
    }

    return base(
      file,
      storeMode: storeMode,
      onProgress: onProgress,
      cancelToken: cancelToken,
    );
  }

  throw Exception('Make sure you passed File or URL string');
}