8 changed files with 223 additions and 240 deletions
			
			
		| @ -1,34 +0,0 @@ | ||||
| part of '../neon_files.dart'; | ||||
| 
 | ||||
| class DownloadTask { | ||||
|   DownloadTask({ | ||||
|     required this.path, | ||||
|   }); | ||||
| 
 | ||||
|   final List<String> path; | ||||
| 
 | ||||
|   final _streamController = StreamController<double>(); | ||||
| 
 | ||||
|   /// Upload progress in percent [0, 1]. | ||||
|   late final progress = _streamController.stream.asBroadcastStream(); | ||||
| 
 | ||||
|   Future execute(final NextcloudClient client, final IOSink sink) async { | ||||
|     final completer = Completer(); | ||||
| 
 | ||||
|     final response = await client.webdav.getStream(path.join('/')); | ||||
|     var downloaded = 0; | ||||
| 
 | ||||
|     response.listen((final chunk) async { | ||||
|       sink.add(chunk); | ||||
| 
 | ||||
|       downloaded += chunk.length; | ||||
|       _streamController.add(downloaded / response.contentLength); | ||||
| 
 | ||||
|       if (downloaded >= response.contentLength) { | ||||
|         completer.complete(); | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     return completer.future; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,66 @@ | ||||
| part of '../neon_files.dart'; | ||||
| 
 | ||||
| sealed class FilesTask { | ||||
|   FilesTask({ | ||||
|     required this.path, | ||||
|   }); | ||||
| 
 | ||||
|   final List<String> path; | ||||
| 
 | ||||
|   @protected | ||||
|   final streamController = StreamController<double>(); | ||||
| 
 | ||||
|   /// Task progress in percent [0, 1]. | ||||
|   late final progress = streamController.stream.asBroadcastStream(); | ||||
| } | ||||
| 
 | ||||
| class FilesDownloadTask extends FilesTask { | ||||
|   FilesDownloadTask({ | ||||
|     required super.path, | ||||
|   }); | ||||
| 
 | ||||
|   Future execute(final NextcloudClient client, final IOSink sink) async { | ||||
|     final completer = Completer(); | ||||
| 
 | ||||
|     final response = await client.webdav.getStream(path.join('/')); | ||||
|     var downloaded = 0; | ||||
| 
 | ||||
|     response.listen((final chunk) async { | ||||
|       sink.add(chunk); | ||||
| 
 | ||||
|       downloaded += chunk.length; | ||||
|       streamController.add(downloaded / response.contentLength); | ||||
| 
 | ||||
|       if (downloaded >= response.contentLength) { | ||||
|         completer.complete(); | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     return completer.future; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class FilesUploadTask extends FilesTask { | ||||
|   FilesUploadTask({ | ||||
|     required super.path, | ||||
|     required this.size, | ||||
|     required this.lastModified, | ||||
|   }); | ||||
| 
 | ||||
|   final int size; | ||||
|   final DateTime lastModified; | ||||
| 
 | ||||
|   Future execute(final NextcloudClient client, final Stream<List<int>> stream) async { | ||||
|     var uploaded = 0; | ||||
|     await client.webdav.putStream( | ||||
|       stream.map((final chunk) { | ||||
|         uploaded += chunk.length; | ||||
|         streamController.add(uploaded / size); | ||||
| 
 | ||||
|         return Uint8List.fromList(chunk); | ||||
|       }), | ||||
|       path.join('/'), | ||||
|       lastModified: lastModified, | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| @ -1,32 +0,0 @@ | ||||
| part of '../neon_files.dart'; | ||||
| 
 | ||||
| class UploadTask { | ||||
|   UploadTask({ | ||||
|     required this.path, | ||||
|     required this.size, | ||||
|     required this.lastModified, | ||||
|   }); | ||||
| 
 | ||||
|   final List<String> path; | ||||
|   final int size; | ||||
|   final DateTime lastModified; | ||||
| 
 | ||||
|   final _streamController = StreamController<double>(); | ||||
| 
 | ||||
|   /// Upload progress in percent [0, 1]. | ||||
|   late final progress = _streamController.stream.asBroadcastStream(); | ||||
| 
 | ||||
|   Future execute(final NextcloudClient client, final Stream<List<int>> stream) async { | ||||
|     var uploaded = 0; | ||||
|     await client.webdav.putStream( | ||||
|       stream.map((final chunk) { | ||||
|         uploaded += chunk.length; | ||||
|         _streamController.add(uploaded / size); | ||||
| 
 | ||||
|         return Uint8List.fromList(chunk); | ||||
|       }), | ||||
|       path.join('/'), | ||||
|       lastModified: lastModified, | ||||
|     ); | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue