Unterschriftenerfassung dauerhaft auf Deutsch anzeigen, lokale VHS-Buildkonfiguration und Regressionstests ergänzen sowie Version auf 357.0.0+357 anheben.
105 lines
2.8 KiB
Dart
105 lines
2.8 KiB
Dart
// Direktimport nötig, damit build_runner die @Entity-Annotation auflösen kann,
|
|
// ohne auf die gerade erst generierte objectbox.g.dart angewiesen zu sein
|
|
// (zirkuläre Auflösung). Nicht entfernen, auch wenn der Lint ihn als unnötig meldet.
|
|
// ignore: unnecessary_import
|
|
import 'package:objectbox/objectbox.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;
|
|
|
|
// Nachrichten-ID für den Server, getrennt von der lokalen ObjectBox-ID.
|
|
@Unique()
|
|
late int externalId;
|
|
|
|
late int time;
|
|
|
|
late String from;
|
|
|
|
late String subj;
|
|
|
|
late String text;
|
|
|
|
bool read = false;
|
|
|
|
ChatMessage();
|
|
|
|
factory ChatMessage.outgoing({
|
|
required int externalId,
|
|
required int time,
|
|
required String from,
|
|
required String text,
|
|
}) {
|
|
// ObjectBox vergibt die lokale ID beim ersten Speichern selbst.
|
|
return ChatMessage()
|
|
..externalId = externalId
|
|
..time = time
|
|
..from = from
|
|
..subj = ''
|
|
..text = text
|
|
..read = true;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|