Only save annotations on changes

This commit is contained in:
2026-02-06 16:09:52 +01:00
parent 9a11e42571
commit 58157a2e6e
2 changed files with 53 additions and 29 deletions

View File

@@ -103,7 +103,7 @@ class _SheetViewerPageState extends State<SheetViewerPage>
});
// Sync annotations from server (downloads newer versions)
await _syncService.syncAnnotationsFromServer(widget.sheet.uuid);
await _syncService.syncFromServer(widget.sheet.uuid);
// Load annotations for current page(s)
await _loadAnnotationsForCurrentPages();
@@ -143,32 +143,40 @@ class _SheetViewerPageState extends State<SheetViewerPage>
}
/// Saves the current page(s) annotations to storage and uploads to server.
///
/// Only saves if there are actual changes to avoid unnecessary writes/uploads.
Future<void> _saveCurrentAnnotations() async {
final now = DateTime.now();
// Save left page
final leftJson = _leftDrawingController.toJsonString();
final leftHasContent = leftJson.isNotEmpty && leftJson != '[]';
// Save left page only if changed
if (_leftDrawingController.hasUnsavedChanges) {
final leftJson = _leftDrawingController.toJsonString();
final leftHasContent = leftJson.isNotEmpty && leftJson != '[]';
await _storageService.writeAnnotationsWithMetadata(
widget.sheet.uuid,
_currentPage,
leftHasContent ? leftJson : null,
now,
);
// Upload left page to server
if (leftHasContent) {
_syncService.uploadAnnotation(
sheetUuid: widget.sheet.uuid,
page: _currentPage,
annotationsJson: leftJson,
lastModified: now,
await _storageService.writeAnnotationsWithMetadata(
widget.sheet.uuid,
_currentPage,
leftHasContent ? leftJson : null,
now,
);
// Upload left page to server
if (leftHasContent) {
_syncService.uploadAnnotation(
sheetUuid: widget.sheet.uuid,
page: _currentPage,
annotationsJson: leftJson,
lastModified: now,
);
}
_leftDrawingController.markSaved();
}
// Save right page (two-page mode)
if (widget.config.twoPageMode && _currentPage < _totalPages) {
// Save right page (two-page mode) only if changed
if (widget.config.twoPageMode &&
_currentPage < _totalPages &&
_rightDrawingController.hasUnsavedChanges) {
final rightJson = _rightDrawingController.toJsonString();
final rightHasContent = rightJson.isNotEmpty && rightJson != '[]';
@@ -188,6 +196,8 @@ class _SheetViewerPageState extends State<SheetViewerPage>
lastModified: now,
);
}
_rightDrawingController.markSaved();
}
}
@@ -290,9 +300,8 @@ class _SheetViewerPageState extends State<SheetViewerPage>
icon: Icon(
widget.config.fullscreen ? Icons.fullscreen_exit : Icons.fullscreen,
),
tooltip: widget.config.fullscreen
? 'Exit Fullscreen'
: 'Enter Fullscreen',
tooltip:
widget.config.fullscreen ? 'Exit Fullscreen' : 'Enter Fullscreen',
onPressed: _toggleFullscreen,
),
IconButton(
@@ -304,9 +313,8 @@ class _SheetViewerPageState extends State<SheetViewerPage>
icon: Icon(
widget.config.twoPageMode ? Icons.filter_1 : Icons.filter_2,
),
tooltip: widget.config.twoPageMode
? 'Single Page Mode'
: 'Two Page Mode',
tooltip:
widget.config.twoPageMode ? 'Single Page Mode' : 'Two Page Mode',
onPressed: _toggleTwoPageMode,
),
],
@@ -338,9 +346,8 @@ class _SheetViewerPageState extends State<SheetViewerPage>
currentPageNumber: _currentPage,
config: widget.config,
leftDrawingController: _leftDrawingController,
rightDrawingController: widget.config.twoPageMode
? _rightDrawingController
: null,
rightDrawingController:
widget.config.twoPageMode ? _rightDrawingController : null,
drawingEnabled: _isPaintMode,
);