download method
dynamic
download(
{ - 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',
),
);
}
}