ObjectBox
This commit is contained in:
1 parent
e548f62bde
commit
f8317be627
60 files changed
+2367
-15049
No files matched your search
+46
-48
@@ -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
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user