Implement annotation syncing to and from server
This commit is contained in:
@@ -183,6 +183,61 @@ class ApiClient {
|
||||
_log.info('PDF cached at: ${cachedFile.path}');
|
||||
return cachedFile;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Annotation Operations
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/// Fetches all annotations for a sheet from the server.
|
||||
///
|
||||
/// Returns a list of [ServerAnnotation] objects containing page number,
|
||||
/// lastModified timestamp, and the annotations JSON string.
|
||||
Future<List<ServerAnnotation>> fetchAnnotations(String sheetUuid) async {
|
||||
final response = await get('/api/sheets/$sheetUuid/annotations');
|
||||
final data = jsonDecode(response.body) as List<dynamic>;
|
||||
|
||||
return data
|
||||
.map((item) => ServerAnnotation.fromJson(item as Map<String, dynamic>))
|
||||
.toList();
|
||||
}
|
||||
|
||||
/// Uploads annotations for a specific page of a sheet.
|
||||
///
|
||||
/// The [lastModified] should be the current time when the annotation was saved.
|
||||
Future<void> uploadAnnotation({
|
||||
required String sheetUuid,
|
||||
required int page,
|
||||
required DateTime lastModified,
|
||||
required String annotationsJson,
|
||||
}) async {
|
||||
await post('/api/sheets/$sheetUuid/annotations', {
|
||||
'page': page,
|
||||
'lastModified': lastModified.toIso8601String(),
|
||||
'annotations': annotationsJson,
|
||||
});
|
||||
_log.info('Annotation uploaded for sheet $sheetUuid page $page');
|
||||
}
|
||||
}
|
||||
|
||||
/// Represents an annotation from the server.
|
||||
class ServerAnnotation {
|
||||
final int page;
|
||||
final DateTime lastModified;
|
||||
final String annotationsJson;
|
||||
|
||||
ServerAnnotation({
|
||||
required this.page,
|
||||
required this.lastModified,
|
||||
required this.annotationsJson,
|
||||
});
|
||||
|
||||
factory ServerAnnotation.fromJson(Map<String, dynamic> json) {
|
||||
return ServerAnnotation(
|
||||
page: json['page'] as int,
|
||||
lastModified: DateTime.parse(json['lastModified'] as String),
|
||||
annotationsJson: json['annotations'] as String,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Exception thrown when an API request fails.
|
||||
|
||||
Reference in New Issue
Block a user