ObjectBox

This commit is contained in:
Sven committed 2025-10-23 11:28:03 +02:00
1 parent e548f62bde
commit f8317be627
60 files changed
+2367 -15049

No files matched your search

+46 -48
View File
@@ -7,7 +7,6 @@ import 'package:archive/archive.dart';
import 'package:dart_mq/dart_mq.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:http/http.dart' as http;
import 'package:isar/isar.dart';
import 'package:mqtt5_client/mqtt5_client.dart';
import 'package:mqtt5_client/mqtt5_server_client.dart';
import 'package:stadtbote/model/enqueued_message.dart';
@@ -17,6 +16,7 @@ import 'package:stadtbote/model/chat_message.dart';
import 'package:stadtbote/model/location_status.dart';
import 'package:stadtbote/model/rank.dart';
import 'package:stadtbote/model/status.dart';
import 'package:stadtbote/objectbox.g.dart';
import 'package:stadtbote/network_messages/acknowledge_job.dart';
import 'package:stadtbote/network_messages/acknowledge_message.dart';
import 'package:stadtbote/network_messages/bootstrap_request.dart';
@@ -332,10 +332,9 @@ class MqttCore with ProducerMixin, ConsumerMixin {
var sessionStatusMessage = SessionStatus.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.sessionStatus.clear();
await MyApp.isarInstance.sessionStatus.put(sessionStatusMessage);
});
final box = MyApp.objectBoxStore.box<SessionStatus>();
box.removeAll();
box.put(sessionStatusMessage);
var bwvEnabled = sessionStatusMessage.bwvEnabled;
Util.preferencesSaveBool(Constants.prefsBWVEnabled, bwvEnabled);
@@ -355,10 +354,9 @@ class MqttCore with ProducerMixin, ConsumerMixin {
void _statusMessageReceived(payloadData) async {
var statusMessage = Status.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.status.clear();
await MyApp.isarInstance.status.put(statusMessage);
});
final box = MyApp.objectBoxStore.box<Status>();
box.removeAll();
box.put(statusMessage);
sendMessage(
routingKey: Constants.messageTopicStatusInfoUpdated,
@@ -369,10 +367,9 @@ class MqttCore with ProducerMixin, ConsumerMixin {
void _locationStatusMessageReceived(payloadData) async {
var locationStatus = LocationStatus.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.locationStatus.clear();
await MyApp.isarInstance.locationStatus.put(locationStatus);
});
final box = MyApp.objectBoxStore.box<LocationStatus>();
box.removeAll();
box.put(locationStatus);
sendMessage(
routingKey: Constants.messageTopicLocationStatusUpdated,
@@ -383,10 +380,9 @@ class MqttCore with ProducerMixin, ConsumerMixin {
void _rankingMessageReceived(payloadData) async {
var ranking = Ranking.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.rankings.clear();
await MyApp.isarInstance.rankings.put(ranking);
});
final box = MyApp.objectBoxStore.box<Ranking>();
box.removeAll();
box.put(ranking);
sendMessage(
routingKey: Constants.messageTopicRankingUpdated,
@@ -397,9 +393,8 @@ class MqttCore with ProducerMixin, ConsumerMixin {
void _jobMessageReceived(payloadData) async {
Job newJob = Job.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.jobs.put(newJob);
});
final box = MyApp.objectBoxStore.box<Job>();
box.put(newJob);
if (newJob.state == Constants.stateAssigned) {
if (newJob.global) {
@@ -420,13 +415,12 @@ class MqttCore with ProducerMixin, ConsumerMixin {
void _jobDeleteReceived(payloadData) async {
var jobDelMessage = JobDelMessage.fromJson(payloadData);
var job = await MyApp.isarInstance.jobs.where().filter().idEqualTo(jobDelMessage.id).findFirst();
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.jobs.where().filter().idEqualTo(jobDelMessage.id).deleteAll();
});
final box = MyApp.objectBoxStore.box<Job>();
var job = box.get(jobDelMessage.id);
if (job != null) {
box.remove(jobDelMessage.id);
sendMessage(
routingKey: Constants.messageTopicJobDeleted,
payload: JobDeletedMessage(job: job),
@@ -445,9 +439,8 @@ class MqttCore with ProducerMixin, ConsumerMixin {
void _messageMessageReceived(Map<String, dynamic> payloadData) async {
var newMessage = await ChatMessage.mergeFromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.chatMessages.put(newMessage);
});
final box = MyApp.objectBoxStore.box<ChatMessage>();
box.put(newMessage);
await Util.playMp3('asbeep.mp3');
@@ -460,11 +453,13 @@ class MqttCore with ProducerMixin, ConsumerMixin {
void _messageUploadDeviceLogReceived(payloadData) async {
var deviceLogRequest = DeviceLogRequest.fromJson(payloadData);
var logEintries = await MyApp.isarInstance.logEntrys
.filter()
.timeGreaterThan(deviceLogRequest.startDateTime)
.timeLessThan(deviceLogRequest.endDateTime)
.findAll();
final box = MyApp.objectBoxStore.box<LogEntry>();
final query = box.query(
LogEntry_.time.greaterThan(deviceLogRequest.startDateTime.millisecondsSinceEpoch)
.and(LogEntry_.time.lessThan(deviceLogRequest.endDateTime.millisecondsSinceEpoch))
).build();
var logEintries = query.find();
query.close();
var deviceLog = DeviceLogResponse();
deviceLog.entries = logEintries;
@@ -475,12 +470,12 @@ class MqttCore with ProducerMixin, ConsumerMixin {
void _messageAcknowledgeReceived(payloadData) async {
var acknowledgeMessage = AcknowledgeMessage.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.enqueuedMessages
.filter()
.messageIdEqualTo(acknowledgeMessage.messageId)
.deleteAll();
});
final box = MyApp.objectBoxStore.box<EnqueuedMessage>();
final query = box.query(EnqueuedMessage_.messageId.equals(acknowledgeMessage.messageId)).build();
final messages = query.find();
query.close();
box.removeMany(messages.map((e) => e.id).toList());
}
@@ -599,7 +594,10 @@ class MqttCore with ProducerMixin, ConsumerMixin {
_sendSyncMessage() async {
var currentPosition = await MyApp.getCurrentPosition();
var jobs = await MyApp.isarInstance.jobs.filter().stateGreaterThan(-1).findAll();
final box = MyApp.objectBoxStore.box<Job>();
final query = box.query(Job_.state.greaterThan(-1)).build();
var jobs = query.find();
query.close();
var answer = SyncJobsMessage();
answer.utcUnixTime = Util.nowUnixSecondsUtc();
@@ -659,26 +657,26 @@ class MqttCore with ProducerMixin, ConsumerMixin {
}
void _enqueueMessage(String uuid, String receiver, String payload) async {
var enqueuedMessage = EnqueuedMessage(messageId: uuid);
var enqueuedMessage = EnqueuedMessage();
enqueuedMessage.messageId = uuid;
enqueuedMessage.topic = receiver;
enqueuedMessage.payload = payload;
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.enqueuedMessages.put(enqueuedMessage);
});
final box = MyApp.objectBoxStore.box<EnqueuedMessage>();
box.put(enqueuedMessage);
}
_sendEnqueuedMessages() async {
var enqueuedMessages = await MyApp.isarInstance.enqueuedMessages.where().findAll();
final box = MyApp.objectBoxStore.box<EnqueuedMessage>();
var enqueuedMessages = box.getAll();
if (enqueuedMessages.isNotEmpty) {
for (var enqueuedMessage in enqueuedMessages) {
try {
var json = jsonDecode(enqueuedMessage.payload);
if (_publishMessage(enqueuedMessage.topic, json, false, enqueueOnError: false)) {
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.enqueuedMessages.delete(enqueuedMessage.id);
});
box.remove(enqueuedMessage.id);
}
} catch (ex) {
Util.logInfo("resend enqueued message failed: $ex");
+3 -4
View File
@@ -93,11 +93,10 @@ class Util {
var logEntry = LogEntry();
logEntry.time = DateTime.now();
logEntry.text = text;
logEntry.severity = severity;
logEntry.severityEnum = severity;
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.logEntrys.put(logEntry);
});
final box = MyApp.objectBoxStore.box<LogEntry>();
box.put(logEntry);
}
static logInfo(String message) {