Merge pull request #127 from ente-io/thumbnail_load_fix

Fix Thumbnail load for files with localID but corresponding local file is misisng/deleted.
This commit is contained in:
Vishnu Mohandas 2021-10-30 18:30:51 +05:30 committed by GitHub
commit 1aab43f6d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 17 deletions

View file

@ -433,7 +433,8 @@ class FilesDB {
limit: limit,
);
final files = _convertToFiles(results);
return FileLoadResult(files, files.length == limit);
List<File> deduplicatedFiles = _deduplicatedFiles(files);
return FileLoadResult(deduplicatedFiles, files.length == limit);
}
Future<FileLoadResult> getImportantFiles(

View file

@ -156,6 +156,16 @@ class TrashDB {
);
}
Future<int> update(TrashFile file) async {
final db = await instance.database;
return await db.update(
tableName,
_getRowForTrash(file),
where: '$columnUploadedFileID = ?',
whereArgs: [file.uploadedFileID],
);
}
Future<FileLoadResult> getTrashedFiles(int startTime, int endTime,
{int limit, bool asc}) async {
final db = await instance.database;

View file

@ -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<ThumbnailWidget> {
);
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<ThumbnailWidget> {
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<ThumbnailWidget> {
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;
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<ThumbnailWidget> {
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<ThumbnailWidget> {
}
} else {
_logger.severe("Could not load image " + widget.file.toString(), e);
_encounteredErrorLoadingThumbnail = true;
_errorLoadingRemoteThumbnail = true;
}
}
}
@ -303,8 +308,10 @@ class _ThumbnailWidgetState extends State<ThumbnailWidget> {
void _reset() {
_hasLoadedThumbnail = false;
_isLoadingThumbnail = false;
_encounteredErrorLoadingThumbnail = false;
_isLoadingLocalThumbnail = false;
_isLoadingRemoteThumbnail = false;
_errorLoadingLocalThumbnail = false;
_errorLoadingRemoteThumbnail = false;
_imageProvider = null;
}
}

View file

@ -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"