mirror of
https://github.com/FoggedLens/deflock-app.git
synced 2026-09-24 02:00:43 +02:00
"existing tags" temp profile when editing, "existing operator" profile when such tags exist, full editing of existing nodes via refine tags
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import 'package:uuid/uuid.dart';
|
||||
import 'osm_node.dart';
|
||||
|
||||
/// A bundle of OSM tags that describe a particular surveillance operator.
|
||||
/// These are applied on top of camera profile tags during submissions.
|
||||
@@ -76,4 +77,56 @@ class OperatorProfile {
|
||||
|
||||
@override
|
||||
int get hashCode => id.hashCode;
|
||||
|
||||
/// Create a temporary operator profile from existing operator tags on a node
|
||||
/// First tries to match against saved operator profiles, otherwise creates temporary one
|
||||
/// Used as the default operator profile when editing nodes
|
||||
static OperatorProfile? createExistingOperatorProfile(OsmNode node, List<OperatorProfile> savedProfiles) {
|
||||
final operatorTags = _extractOperatorTags(node.tags);
|
||||
if (operatorTags.isEmpty) return null;
|
||||
|
||||
// First, try to find a perfect match among saved profiles
|
||||
for (final savedProfile in savedProfiles) {
|
||||
if (_tagsMatch(savedProfile.tags, operatorTags)) {
|
||||
return savedProfile;
|
||||
}
|
||||
}
|
||||
|
||||
// No perfect match found, create temporary profile
|
||||
final operatorName = operatorTags['operator'] ?? '<existing>';
|
||||
|
||||
return OperatorProfile(
|
||||
id: 'temp-existing-operator-${node.id}',
|
||||
name: operatorName,
|
||||
tags: operatorTags,
|
||||
);
|
||||
}
|
||||
|
||||
/// Check if two tag maps are identical
|
||||
static bool _tagsMatch(Map<String, String> tags1, Map<String, String> tags2) {
|
||||
if (tags1.length != tags2.length) return false;
|
||||
|
||||
for (final entry in tags1.entries) {
|
||||
if (tags2[entry.key] != entry.value) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Extract all operator-related tags from a node's tags
|
||||
static Map<String, String> _extractOperatorTags(Map<String, String> tags) {
|
||||
final operatorTags = <String, String>{};
|
||||
|
||||
for (final entry in tags.entries) {
|
||||
// Include operator= and any operator:*= tags
|
||||
if (entry.key == 'operator' || entry.key.startsWith('operator:')) {
|
||||
operatorTags[entry.key] = entry.value;
|
||||
}
|
||||
}
|
||||
|
||||
return operatorTags;
|
||||
}
|
||||
|
||||
/// Returns true if this is a temporary "existing operator" profile
|
||||
bool get isExistingOperatorProfile => id.startsWith('temp-existing-operator-');
|
||||
}
|
||||
Reference in New Issue
Block a user