prevent too many image loading at save time

This commit is contained in:
2024-11-30 21:30:39 +08:00
parent 9fb3482474
commit 2f4927f719

View File

@@ -21,22 +21,35 @@ class CachedImageProvider
final String? cid; final String? cid;
static int loadingCount = 0;
static const _kMaxLoadingCount = 8;
@override @override
Future<Uint8List> load(StreamController<ImageChunkEvent> chunkEvents) async { Future<Uint8List> load(StreamController<ImageChunkEvent> chunkEvents) async {
if(url.startsWith("file://")) { while(loadingCount > _kMaxLoadingCount) {
var file = File(url.substring(7)); await Future.delayed(const Duration(milliseconds: 100));
return file.readAsBytes();
} }
await for (var progress in ImageDownloader.loadThumbnail(url, sourceKey, cid)) { loadingCount++;
chunkEvents.add(ImageChunkEvent( try {
cumulativeBytesLoaded: progress.currentBytes, if(url.startsWith("file://")) {
expectedTotalBytes: progress.totalBytes, var file = File(url.substring(7));
)); return file.readAsBytes();
if(progress.imageBytes != null) {
return progress.imageBytes!;
} }
await for (var progress in ImageDownloader.loadThumbnail(url, sourceKey, cid)) {
chunkEvents.add(ImageChunkEvent(
cumulativeBytesLoaded: progress.currentBytes,
expectedTotalBytes: progress.totalBytes,
));
if(progress.imageBytes != null) {
return progress.imageBytes!;
}
}
throw "Error: Empty response body.";
}
finally {
loadingCount--;
} }
throw "Error: Empty response body.";
} }
@override @override