diff --git a/lib/db/files_db.dart b/lib/db/files_db.dart index f9593d02a..e8d1e62dd 100644 --- a/lib/db/files_db.dart +++ b/lib/db/files_db.dart @@ -433,7 +433,8 @@ class FilesDB { limit: limit, ); final files = _convertToFiles(results); - return FileLoadResult(files, files.length == limit); + List deduplicatedFiles = _deduplicatedFiles(files); + return FileLoadResult(deduplicatedFiles, files.length == limit); } Future getImportantFiles( diff --git a/lib/db/trash_db.dart b/lib/db/trash_db.dart index f41864c46..31d7580cd 100644 --- a/lib/db/trash_db.dart +++ b/lib/db/trash_db.dart @@ -156,6 +156,16 @@ class TrashDB { ); } + Future update(TrashFile file) async { + final db = await instance.database; + return await db.update( + tableName, + _getRowForTrash(file), + where: '$columnUploadedFileID = ?', + whereArgs: [file.uploadedFileID], + ); + } + Future getTrashedFiles(int startTime, int endTime, {int limit, bool asc}) async { final db = await instance.database; diff --git a/lib/ui/thumbnail_widget.dart b/lib/ui/thumbnail_widget.dart index a86c1af4b..669db54ba 100644 --- a/lib/ui/thumbnail_widget.dart +++ b/lib/ui/thumbnail_widget.dart @@ -6,6 +6,7 @@ import 'package:photos/core/constants.dart'; import 'package:photos/core/errors.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/db/files_db.dart'; +import 'package:photos/db/trash_db.dart'; import 'package:photos/events/local_photos_updated_event.dart'; import 'package:photos/models/file.dart'; import 'package:photos/models/file_type.dart'; @@ -103,8 +104,10 @@ class _ThumbnailWidgetState extends State { ); bool _hasLoadedThumbnail = false; - bool _isLoadingThumbnail = false; - bool _encounteredErrorLoadingThumbnail = false; + bool _isLoadingLocalThumbnail = false; + bool _errorLoadingLocalThumbnail = false; + bool _isLoadingRemoteThumbnail = false; + bool _errorLoadingRemoteThumbnail = false; ImageProvider _imageProvider; @override @@ -187,9 +190,9 @@ class _ThumbnailWidgetState extends State { void _loadLocalImage(BuildContext context) { if (!_hasLoadedThumbnail && - !_encounteredErrorLoadingThumbnail && - !_isLoadingThumbnail) { - _isLoadingThumbnail = true; + !_errorLoadingLocalThumbnail && + !_isLoadingLocalThumbnail) { + _isLoadingLocalThumbnail = true; final cachedSmallThumbnail = ThumbnailLruCache.get(widget.file, kThumbnailSmallSize); if (cachedSmallThumbnail != null) { @@ -213,9 +216,11 @@ class _ThumbnailWidgetState extends State { getThumbnailFromLocal(widget.file).then((thumbData) async { if (thumbData == null) { if (widget.file.uploadedFileID != null) { - if (widget.file is! TrashFile) { - _logger.fine("Removing localID reference for " + widget.file.tag()); - widget.file.localID = null; + _logger.fine("Removing localID reference for " + widget.file.tag()); + widget.file.localID = null; + if (widget.file is TrashFile) { + TrashDB.instance.update(widget.file); + } else { FilesDB.instance.update(widget.file); } _loadNetworkImage(); @@ -236,15 +241,15 @@ class _ThumbnailWidgetState extends State { ThumbnailLruCache.put(widget.file, thumbData, kThumbnailSmallSize); }).catchError((e) { _logger.warning("Could not load image: ", e); - _encounteredErrorLoadingThumbnail = true; + _errorLoadingLocalThumbnail = true; }); } void _loadNetworkImage() { if (!_hasLoadedThumbnail && - !_encounteredErrorLoadingThumbnail && - !_isLoadingThumbnail) { - _isLoadingThumbnail = true; + !_errorLoadingRemoteThumbnail && + !_isLoadingRemoteThumbnail) { + _isLoadingRemoteThumbnail = true; final cachedThumbnail = ThumbnailLruCache.get(widget.file); if (cachedThumbnail != null) { _imageProvider = Image.memory(cachedThumbnail).image; @@ -280,7 +285,7 @@ class _ThumbnailWidgetState extends State { } } else { _logger.severe("Could not load image " + widget.file.toString(), e); - _encounteredErrorLoadingThumbnail = true; + _errorLoadingRemoteThumbnail = true; } } } @@ -303,8 +308,10 @@ class _ThumbnailWidgetState extends State { void _reset() { _hasLoadedThumbnail = false; - _isLoadingThumbnail = false; - _encounteredErrorLoadingThumbnail = false; + _isLoadingLocalThumbnail = false; + _isLoadingRemoteThumbnail = false; + _errorLoadingLocalThumbnail = false; + _errorLoadingRemoteThumbnail = false; _imageProvider = null; } } diff --git a/pubspec.yaml b/pubspec.yaml index f40628e1e..48f164d26 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,7 @@ description: ente photos application # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.3.41+251 +version: 0.3.42+252 environment: sdk: ">=2.10.0 <3.0.0"