mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-06-15 07:04:26 +10:00
b34d684e67
formats all dart files using `dart format .` from the root project dir this makes the code style repeatable by new contributors and makes PR review easier
75 lines
2.4 KiB
Dart
75 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,
|
|
),
|
|
);
|
|
}
|
|
}
|