feat: Enhance drawing functionality with sender tracking and sharing capabilities

This commit is contained in:
Janez T
2025-10-15 22:41:57 +02:00
parent 317addba9e
commit 800786ec9c
12 changed files with 618 additions and 107 deletions

View File

@@ -0,0 +1,42 @@
import 'dart:convert';
import '../models/map_drawing.dart';
/// Parser for drawing messages transmitted over mesh network
class DrawingMessageParser {
/// Drawing message prefix
static const String prefix = 'D:';
/// Check if message is a drawing message
static bool isDrawingMessage(String text) {
return text.startsWith(prefix);
}
/// Parse drawing message text into MapDrawing object
/// Returns null if parsing fails
static MapDrawing? parseDrawingMessage(String text) {
if (!isDrawingMessage(text)) {
return null;
}
try {
// Remove prefix
final jsonStr = text.substring(prefix.length);
// Parse JSON
final json = jsonDecode(jsonStr) as Map<String, dynamic>;
// Use existing fromJson method
return MapDrawing.fromJson(json);
} catch (e) {
return null;
}
}
/// Create drawing message text from MapDrawing object
/// Includes sender name in the message
static String createDrawingMessage(MapDrawing drawing, String senderName) {
final json = drawing.toNetworkJson(senderName);
final jsonStr = jsonEncode(json);
return '$prefix$jsonStr';
}
}