Only save annotations on changes
This commit is contained in:
@@ -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,
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user