fixes, improvements, and cleanup. notably, custom camera profiles make a comeback.

This commit is contained in:
stopflock
2025-07-19 20:22:20 -05:00
parent e290e11c5b
commit f8d71d0c75
10 changed files with 375 additions and 45 deletions
+39 -8
View File
@@ -1,33 +1,64 @@
import 'package:uuid/uuid.dart';
/// A bundle of preset OSM tags that describe a particular camera model/type.
class CameraProfile {
final String id;
final String name;
final Map<String, String> tags;
final bool builtin;
const CameraProfile({
CameraProfile({
required this.id,
required this.name,
required this.tags,
this.builtin = false,
});
// Builtin ALPR profile (Flock Falconstyle).
factory CameraProfile.alpr() => const CameraProfile(
name: 'ALPR Camera',
tags: {
/// Builtin default: Generic Flock ALPR camera
factory CameraProfile.alpr() => CameraProfile(
id: 'builtin-alpr',
name: 'Generic Flock',
tags: const {
'man_made': 'surveillance',
'surveillance:type': 'ALPR',
'surveillance': 'public',
'surveillance:zone': 'traffic',
'camera:type': 'fixed',
'camera:mount': 'pole',
'manufacturer': 'Flock Safety',
'manufacturer:wikidata': 'Q108485435',
},
builtin: true,
);
CameraProfile copyWith({
String? id,
String? name,
Map<String, String>? tags,
bool? builtin,
}) =>
CameraProfile(
id: id ?? this.id,
name: name ?? this.name,
tags: tags ?? this.tags,
builtin: builtin ?? this.builtin,
);
Map<String, dynamic> toJson() =>
{'id': id, 'name': name, 'tags': tags, 'builtin': builtin};
factory CameraProfile.fromJson(Map<String, dynamic> j) => CameraProfile(
id: j['id'],
name: j['name'],
tags: Map<String, String>.from(j['tags']),
builtin: j['builtin'] ?? false,
);
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is CameraProfile &&
runtimeType == other.runtimeType &&
id == other.id;
@override
int get hashCode => id.hashCode;
}