download method

dynamic download({
  1. bool forceStart = false,
})

Implementation

download({bool forceStart = false}) async {
  ManHttpStatus flD = await checkConexionFile(request.url);
  if (flD.status) {
    if (!forceStart) {
      var (nm, st) = await mergePart.checkFileExists(
        header: header,
        request: request,
        exists: true,
      );
      if (!st) {
        statusDownload.status = statusDownloadType.fileExists;
        sendPort.send(statusDownload);
        //return;
      }
    }
    int partSizeLimit = 0;
    header = flD.header;
    if (!startInit) {
      startInit = true;
      sendInterval = Timer.periodic(Duration(seconds: 1), (_) {
        sendStatus();
      });
    }
    totalSize =
        (header.containsKey('accept-ranges') == true &&
                header['accept-ranges'] == 'bytes' &&
                header.containsKey('content-length'))
            ? int.parse(flD.header["content-length"])
            : 0;
    if (totalSize != 0) {
      partSizeLimit = totalSize < 10242880 ? (totalSize / 3).ceil() : 5242880;
      numPart = (totalSize / partSizeLimit).ceil();
      int partDwn = (totalSize / numPart).ceil();
      int endPart = partDwn;
      if (partDwn * numPart != totalSize) {
        endPart = totalSize - ((numPart - 1) * partDwn);
      }
      for (int i = 0; i < numPart; i++) {
        int start = 0;
        int ipart = partDwn;
        if (i == (numPart - 1)) {
          start = partDwn * i;
          ipart = endPart == 0 ? partDwn : endPart;
        } else {
          start = partDwn * i;
        }
        int end = (start + ipart);
        if (i > 0) {
          start = start + 1;
        }
        endpart.add(
          Downloader(
            downloadData: DataDownload(
              url: request.url,
              start: start,
              end: end,
              id: i,
            ),
            fileTemp:
                '${request.setting!.folderTemp}${request.tokenDownload}${i}',
            sendPort: sendPort,
          ),
        );
      }
    } else {
      downloadInPart = false;
      endpart.add(
        Downloader(
          downloadData: DataDownload(
            url: request.url,
            start: 0,
            end: 0,
            id: 0,
          ),
          fileTemp: '${request.setting!.folderTemp}${request.tokenDownload}',
          sendPort: sendPort,
        ),
      );
    }
    downloadPart();
  } else {
    sendPort.send(
      ErrorSendPort(
        errorObject: 'No se puede descargar el archivo, error de conexion',
      ),
    );
  }
}