Files
stadtbote-app/lib/model/chat_message.dart
T
2025-10-23 11:48:22 +02:00

84 lines
2.0 KiB
Dart

import 'package:stadtbote/main.dart';
import 'package:stadtbote/objectbox.g.dart';
import 'package:stadtbote/tools/util.dart';
@Entity()
class ChatMessage {
@Id()
int id = 0;
// External ID from server
@Unique()
late int externalId;
late int time;
late String from;
late String subj;
late String text;
bool read = false;
ChatMessage();
factory ChatMessage.fromJson(Map<String, dynamic> json) {
final message = ChatMessage();
message.id = 0; // Let ObjectBox assign the ID
message.externalId = json['id'] as int; // Store external ID separately
message.time = json['time'] as int;
message.from = json['from'] as String;
message.subj = json['subj'] as String;
message.text = json['text'] as String;
message.read = json['read'] as bool? ?? false;
return message;
}
Map<String, dynamic> toJson() {
return {
'id': externalId, // Use external ID for JSON
'time': time,
'from': from,
'subj': subj,
'text': text,
'read': read,
};
}
static Future<ChatMessage> mergeFromJson(Map<String, dynamic> json) async {
final box = MyApp.objectBoxStore.box<ChatMessage>();
final externalId = json["id"] as int;
// Find message by external ID
final query = box.query(ChatMessage_.externalId.equals(externalId)).build();
var availableMessage = query.findFirst();
query.close();
if (availableMessage != null) {
availableMessage.externalId = json["id"];
availableMessage.time = json["time"];
availableMessage.from = json["from"];
availableMessage.subj = json["subj"];
availableMessage.text = json['text'];
return availableMessage;
} else {
var message = ChatMessage.fromJson(json);
message.read = false;
return message;
}
}
static Future<int> getNextId() async {
int currentExport500Id = Util.preferencesGetInt('next_message_id', 0) as int;
currentExport500Id += 1;
Util.preferencesSaveInt("next_message_id", currentExport500Id);
return currentExport500Id;
}
}