mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-04-20 22:13:48 +00:00
68 lines
2.4 KiB
Dart
68 lines
2.4 KiB
Dart
import 'dart:convert';
|
|
import 'dart:typed_data';
|
|
|
|
import '../models/contact.dart';
|
|
import 'prefs_manager.dart';
|
|
|
|
class ContactStore {
|
|
static const String _key = 'contacts';
|
|
|
|
Future<List<Contact>> loadContacts() async {
|
|
final prefs = PrefsManager.instance;
|
|
final jsonStr = prefs.getString(_key);
|
|
if (jsonStr == null) return [];
|
|
|
|
try {
|
|
final jsonList = jsonDecode(jsonStr) as List<dynamic>;
|
|
return jsonList.map((entry) => _fromJson(entry as Map<String, dynamic>)).toList();
|
|
} catch (_) {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
Future<void> saveContacts(List<Contact> contacts) async {
|
|
final prefs = PrefsManager.instance;
|
|
final jsonList = contacts.map(_toJson).toList();
|
|
await prefs.setString(_key, jsonEncode(jsonList));
|
|
}
|
|
|
|
Map<String, dynamic> _toJson(Contact contact) {
|
|
return {
|
|
'publicKey': base64Encode(contact.publicKey),
|
|
'name': contact.name,
|
|
'type': contact.type,
|
|
'pathLength': contact.pathLength,
|
|
'path': base64Encode(contact.path),
|
|
'pathOverride': contact.pathOverride,
|
|
'pathOverrideBytes': contact.pathOverrideBytes != null
|
|
? base64Encode(contact.pathOverrideBytes!)
|
|
: null,
|
|
'latitude': contact.latitude,
|
|
'longitude': contact.longitude,
|
|
'lastSeen': contact.lastSeen.millisecondsSinceEpoch,
|
|
'lastMessageAt': contact.lastMessageAt.millisecondsSinceEpoch,
|
|
};
|
|
}
|
|
|
|
Contact _fromJson(Map<String, dynamic> json) {
|
|
final lastSeenMs = json['lastSeen'] as int? ?? 0;
|
|
final lastMessageMs = json['lastMessageAt'] as int?;
|
|
return Contact(
|
|
publicKey: Uint8List.fromList(base64Decode(json['publicKey'] as String)),
|
|
name: json['name'] as String? ?? 'Unknown',
|
|
type: json['type'] as int? ?? 0,
|
|
pathLength: json['pathLength'] as int? ?? -1,
|
|
path: json['path'] != null
|
|
? Uint8List.fromList(base64Decode(json['path'] as String))
|
|
: Uint8List(0),
|
|
pathOverride: json['pathOverride'] as int?,
|
|
pathOverrideBytes: json['pathOverrideBytes'] != null
|
|
? Uint8List.fromList(base64Decode(json['pathOverrideBytes'] as String))
|
|
: null,
|
|
latitude: (json['latitude'] as num?)?.toDouble(),
|
|
longitude: (json['longitude'] as num?)?.toDouble(),
|
|
lastSeen: DateTime.fromMillisecondsSinceEpoch(lastSeenMs),
|
|
lastMessageAt: DateTime.fromMillisecondsSinceEpoch(lastMessageMs ?? lastSeenMs),
|
|
);
|
|
}
|
|
}
|