feat: Enhance error handling in note loading and moving operations with detailed logging
This commit is contained in:
@@ -133,21 +133,41 @@ class AppDatabase extends _$AppDatabase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return transaction(() async {
|
return transaction(() async {
|
||||||
if (oldIndex < newIndex) {
|
final List<DbNote> all = await (select(notes)
|
||||||
|
..where((n) => n.isDeleted.equals(false)))
|
||||||
|
.get();
|
||||||
|
|
||||||
|
final int count = all.length;
|
||||||
|
if (count == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int maxIndex = count - 1;
|
||||||
|
|
||||||
|
final int safeOld = oldIndex.clamp(0, maxIndex);
|
||||||
|
final int safeNew = newIndex.clamp(0, maxIndex);
|
||||||
|
|
||||||
|
if (safeOld == safeNew) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (safeOld < safeNew) {
|
||||||
await customStatement(
|
await customStatement(
|
||||||
'UPDATE notes SET sort_index = sort_index - 1 WHERE sort_index > ? AND sort_index <= ? AND is_deleted = 0',
|
'UPDATE notes SET sort_index = sort_index - 1 WHERE sort_index > ? AND sort_index <= ? AND is_deleted = 0',
|
||||||
[oldIndex, newIndex],
|
[safeOld, safeNew],
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
await customStatement(
|
await customStatement(
|
||||||
'UPDATE notes SET sort_index = sort_index + 1 WHERE sort_index >= ? AND sort_index < ? AND is_deleted = 0',
|
'UPDATE notes SET sort_index = sort_index + 1 WHERE sort_index >= ? AND sort_index < ? AND is_deleted = 0',
|
||||||
[newIndex, oldIndex],
|
[safeNew, safeOld],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
await customStatement(
|
await (update(notes)..where((n) => n.id.equals(id))).write(
|
||||||
'UPDATE notes SET sort_index = ?, updated_at = ? WHERE id = ?',
|
NotesCompanion(
|
||||||
[newIndex, DateTime.now().toIso8601String(), id],
|
sortIndex: Value<int>(safeNew),
|
||||||
|
updatedAt: Value<DateTime>(DateTime.now()),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,7 +102,9 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
_notes = storedNotes;
|
_notes = storedNotes;
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e, st) {
|
||||||
|
// Log the error so we can inspect the root cause before resetting the vault.
|
||||||
|
debugPrint('Failed to load notes: $e\n$st');
|
||||||
// If loading notes fails (e.g., DB corrupt), notify the app to reset the vault.
|
// If loading notes fails (e.g., DB corrupt), notify the app to reset the vault.
|
||||||
if (widget.onVaultInvalid != null) {
|
if (widget.onVaultInvalid != null) {
|
||||||
await widget.onVaultInvalid!();
|
await widget.onVaultInvalid!();
|
||||||
@@ -145,8 +147,17 @@ class _HomeScreenState extends State<HomeScreen> {
|
|||||||
|
|
||||||
final Note movedNote = _notes[oldIndex];
|
final Note movedNote = _notes[oldIndex];
|
||||||
|
|
||||||
await widget.repository.moveNote(movedNote, newIndex);
|
try {
|
||||||
await _loadNotes();
|
await widget.repository.moveNote(movedNote, newIndex);
|
||||||
|
await _loadNotes();
|
||||||
|
} catch (e, st) {
|
||||||
|
// Don't let DB errors cause the app to reset the vault automatically.
|
||||||
|
debugPrint('Failed to move note: $e\n$st');
|
||||||
|
if (!mounted) return;
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(content: Text('Error al reordenar la nota: $e')),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _openNoteEditor(Note note) async {
|
Future<void> _openNoteEditor(Note note) async {
|
||||||
|
|||||||
Reference in New Issue
Block a user