httpDownloadStream function
Implementation
Stream<DownloadStreamProgress> httpDownloadStream(
TClient client,
String path, {
required String savePath,
TClientToken? token,
Map<String, String>? query,
Map<String, String>? headers,
}) {
final controller = StreamController<DownloadStreamProgress>();
(() async {
try {
controller.add(
DownloadStreamProgress(progressStatus: StreamProgressStatus.preparing),
);
await client.download(
path,
savePath: savePath,
token: token,
query: query,
headers: headers,
onReceiveProgressSpeed: (receive, total, speed, eta) {
controller.add(
DownloadStreamProgress(
progressStatus: StreamProgressStatus.progress,
eta: eta,
receive: receive,
total: total,
speed: speed,
),
);
},
onCancelCallback: (message) {
controller.add(
DownloadStreamProgress(
progressStatus: StreamProgressStatus.error,
errorMessage: message,
isCanceled: true,
),
);
controller.close();
},
onError: (message) {
controller.add(
DownloadStreamProgress(
progressStatus: StreamProgressStatus.error,
errorMessage: message,
),
);
controller.close();
},
);
controller.add(
DownloadStreamProgress(progressStatus: StreamProgressStatus.done),
);
controller.close();
} catch (e) {
controller.add(
DownloadStreamProgress(
progressStatus: StreamProgressStatus.error,
errorMessage: e.toString(),
isCanceled: true,
),
);
controller.close();
}
})();
return controller.stream;
}