download method

Future<DownloadManagerResponse> download({
  1. required DownRequire req,
})

Implementation

@pragma('vm:entry-point')
Future<DownloadManagerResponse> download({required DownRequire req}) async {
  if (_downloadsTask.containsKey(req.tokenDownload)) {
    //retorna el isolate en el cual se esta descargando
    return DownloadManagerResponse(
      token: _downloadsTask[req.tokenDownload]!.isolateToken,
      status: true,
    );
  }

  bool freeIsolate = false;
  int tokenIsolate = 0;
  for (int isolate in _task.keys) {
    TaskDownload ts = _select(isolate).task!;
    if (ts.freeIsolate) {
      freeIsolate = true;
      tokenIsolate = isolate;
      ts.freeIsolate = false;
      break;
    }
  }
  if (!freeIsolate)
    return DownloadManagerResponse(
      token: 0,
      status: false,
      error: ErrorIsolate.limit,
    );

  DownloadManagerResponse response = DownloadManagerResponse(
    token: tokenIsolate,
    status: true,
  );
  if (req.tokenDownload == 0) {
    req.tokenDownload = ManSettings().token();
  }
  _select(response.token).task?.sendPortIsolate().send(
    ManMessagePort(
      action: 'add',
      download: ManReques(
        setting: req.setting,
        url: req.url,
        fileName: req.fileName,
        extension: req.extension,
        tokenDownload: req.tokenDownload,
      ),
    ),
  );
  return response;
}