reader.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import 'dart:typed_data';
  2. import 'package:fis_common/extensions/date.dart';
  3. import 'package:fis_common/web/shell_api_hepler.dart';
  4. import 'package:vid/us/vid_us_data_http_reader.dart';
  5. import '../reader.dart';
  6. class AsyncShellVidDataReader extends AsyncVidDataReaderBase {
  7. final int minChunkSize;
  8. late final String id =
  9. DateTime.now().format('MMddHHmmssSSS') + hashCode.toString();
  10. AsyncShellVidDataReader(
  11. String url, {
  12. DownloadCallback? downloadCallback,
  13. this.minChunkSize = 65536,
  14. }) : super(url, downloadCallback: downloadCallback);
  15. @override
  16. void close() {
  17. ShellApiHelper.call('cancelFetchVid', id);
  18. }
  19. @override
  20. void startDownload() async {
  21. final size = await getFileSize();
  22. // 获取到size即开始下载
  23. if (size == null) {
  24. setError(true, 'Get file size fail.');
  25. }
  26. }
  27. /// 接收分片数据
  28. void receiveChunk(Uint8List chunk) {
  29. appendChunk(chunk);
  30. final progress = downloadedSize / totalSize;
  31. updateProgress(progress);
  32. }
  33. Future<int?> getFileSize() async {
  34. final result = await ShellApiHelper.call(
  35. 'fetchVid',
  36. {
  37. 'Id': id,
  38. 'Url': url,
  39. 'MinChunkSize': minChunkSize,
  40. },
  41. );
  42. return result;
  43. }
  44. }