[mob][photos] Avoid localIDs of non-existant assets from being passed to photo_manager's deleteWithIds() when using free up space feature to avoid complete failure of free up space operation
This commit is contained in:
@@ -1272,15 +1272,26 @@ class FilesDB {
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<EnteFile>> getLocalFiles(List<String> localIDs) async {
|
||||
Future<List<EnteFile>> getLocalFiles(
|
||||
List<String> localIDs, {
|
||||
bool dedupeByLocalID = false,
|
||||
}) async {
|
||||
late final String query;
|
||||
final inParam = localIDs.map((id) => "'$id'").join(',');
|
||||
final db = await instance.sqliteAsyncDB;
|
||||
final results = await db.getAll(
|
||||
'''
|
||||
if (dedupeByLocalID) {
|
||||
query = '''
|
||||
SELECT * FROM $filesTable
|
||||
WHERE $columnLocalID IN ($inParam)
|
||||
GROUP BY $columnLocalID;
|
||||
''';
|
||||
} else {
|
||||
query = '''
|
||||
SELECT * FROM $filesTable
|
||||
WHERE $columnLocalID IN ($inParam);
|
||||
''',
|
||||
);
|
||||
''';
|
||||
}
|
||||
final results = await db.getAll(query);
|
||||
return convertToFiles(results);
|
||||
}
|
||||
|
||||
|
||||
@@ -325,18 +325,26 @@ Future<bool> deleteLocalFiles(
|
||||
BuildContext context,
|
||||
List<String> localIDs,
|
||||
) async {
|
||||
final files =
|
||||
await FilesDB.instance.getLocalFiles(localIDs, dedupeByLocalID: true);
|
||||
final List<String> deletedIDs = [];
|
||||
final List<String> localAssetIDs = [];
|
||||
final List<String> localSharedMediaIDs = [];
|
||||
final List<String> alreadyDeletedIDs = []; // to ignore already deleted files
|
||||
|
||||
try {
|
||||
for (String id in localIDs) {
|
||||
if (id.startsWith(oldSharedMediaIdentifier) ||
|
||||
id.startsWith(sharedMediaIdentifier)) {
|
||||
localSharedMediaIDs.add(id);
|
||||
for (final file in files) {
|
||||
if (!(await _localFileExist(file))) {
|
||||
_logger.warning("Already deleted " + file.toString());
|
||||
alreadyDeletedIDs.add(file.localID!);
|
||||
} else if (file.localID!.startsWith(oldSharedMediaIdentifier) ||
|
||||
file.localID!.startsWith(sharedMediaIdentifier)) {
|
||||
localSharedMediaIDs.add(file.localID!);
|
||||
} else {
|
||||
localAssetIDs.add(id);
|
||||
localAssetIDs.add(file.localID!);
|
||||
}
|
||||
}
|
||||
deletedIDs.addAll(alreadyDeletedIDs);
|
||||
deletedIDs.addAll(await _tryDeleteSharedMediaFiles(localSharedMediaIDs));
|
||||
|
||||
final bool shouldDeleteInBatches =
|
||||
|
||||
Reference in New Issue
Block a user