Skip to content

Commit ed4fe66

Browse files
fix: remove externally deleted notes from recent notes (#1631)
* fix: remove externally deleted notes from recent notes * test: remove externally deleted notes from recent notes * fix formatting * make _removeReferences private again * test: seperate test block for external deletion * remove references directly instead of adding them to a list
1 parent a77740b commit ed4fe66

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

lib/data/file_manager/file_manager.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,10 @@ class FileManager {
666666

667667
static Future<List<String>> getRecentlyAccessed() async {
668668
if (!stows.recentFiles.loaded) await stows.recentFiles.waitUntilRead();
669+
// Delete entries for files that have been deleted outside of Saber
670+
for (final file in stows.recentFiles.value.toList()) {
671+
if (!doesFileExist(file)) _removeReferences(file);
672+
}
669673
return stows.recentFiles.value
670674
.map((String filePath) {
671675
if (filePath.endsWith(Editor.extension)) {

test/fm_test.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'dart:io';
44
import 'package:flutter_test/flutter_test.dart';
55
import 'package:saber/data/file_manager/file_manager.dart';
66
import 'package:saber/data/flavor_config.dart';
7+
import 'package:saber/data/nextcloud/saber_syncer.dart';
78
import 'package:saber/data/prefs.dart';
89
import 'package:shared_preferences/shared_preferences.dart';
910

@@ -274,6 +275,29 @@ void main() {
274275
await FileManager.deleteFile('/$fileName2.sbn2');
275276
});
276277

278+
test('getRecentlyAccessed with external deletion', () async {
279+
// create file
280+
const String fileName = 'test_externalDeletion';
281+
const String filePath = '/$fileName.sbn2';
282+
await FileManager.writeFile(filePath, [1], awaitWrite: true);
283+
284+
// check file exists in recentlyAccessed
285+
var recentlyAccessed = await FileManager.getRecentlyAccessed();
286+
expect(recentlyAccessed[0], '/$fileName');
287+
288+
// delete file without removing it from recently accessed
289+
final file = FileManager.getFile(filePath);
290+
await file.delete();
291+
292+
// reload recentlyAccessed and check file doesn't exist anymore in it
293+
recentlyAccessed = await FileManager.getRecentlyAccessed();
294+
expect(recentlyAccessed, isEmpty);
295+
296+
// delete file properly
297+
syncer.uploader.enqueueRel(filePath);
298+
FileManager.broadcastFileWrite(FileOperationType.delete, filePath);
299+
});
300+
277301
test('isDirectory and doesFileExist', () async {
278302
const dirPath = '/test_isDirectory';
279303
const filePath = '/test_doesFileExist.sbn2';

0 commit comments

Comments
 (0)