From 5b3dead3254cda5ca17d7a13bc2ebf80f75679c0 Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Mon, 18 Mar 2024 20:26:16 +0100 Subject: [PATCH] Erweiterungen --- lib/content_views/assigned_jobs_page.dart | 2 +- lib/content_views/main_page.dart | 4 +-- lib/content_views/messages_page.dart | 12 +++---- lib/content_views/task_list_page.dart | 3 +- lib/main.dart | 2 +- lib/popups/accept_jobs_popup.dart | 4 +-- lib/protocoll_messages/device_log.dart | 13 ------- lib/protocoll_messages/device_log.g.dart | 16 --------- .../device_log_request.dart | 18 ++++++++++ .../device_log_request.g.dart | 18 ++++++++++ .../device_log_response.dart | 15 ++++++++ .../device_log_response.g.dart | 18 ++++++++++ lib/tools/mqtt_core.dart | 35 +++++++++++++++---- lib/tools/util.dart | 6 ++-- 14 files changed, 114 insertions(+), 52 deletions(-) delete mode 100644 lib/protocoll_messages/device_log.dart delete mode 100644 lib/protocoll_messages/device_log.g.dart create mode 100644 lib/protocoll_messages/device_log_request.dart create mode 100644 lib/protocoll_messages/device_log_request.g.dart create mode 100644 lib/protocoll_messages/device_log_response.dart create mode 100644 lib/protocoll_messages/device_log_response.g.dart diff --git a/lib/content_views/assigned_jobs_page.dart b/lib/content_views/assigned_jobs_page.dart index e91dbae..0e1c446 100644 --- a/lib/content_views/assigned_jobs_page.dart +++ b/lib/content_views/assigned_jobs_page.dart @@ -210,7 +210,7 @@ class _AssignedJobsPageState extends State { MqttCore.instance.publishPayloadMessage("job", message.toJson()); job.state = 9; - MyApp.isarInstance.writeTxnSync(() => {MyApp.isarInstance.jobs.putSync(job)}); + await MyApp.isarInstance.writeTxn(() async => { await MyApp.isarInstance.jobs.put(job)}); _entries = await _createListEntries(); diff --git a/lib/content_views/main_page.dart b/lib/content_views/main_page.dart index 35067ab..60dc643 100644 --- a/lib/content_views/main_page.dart +++ b/lib/content_views/main_page.dart @@ -16,7 +16,7 @@ import 'package:stadtbote/model/message.dart'; import 'package:stadtbote/model/session_status.dart'; import 'package:stadtbote/model/status.dart'; import 'package:stadtbote/popups/infos_popup.dart'; -import 'package:stadtbote/protocoll_messages/device_log.dart'; +import 'package:stadtbote/protocoll_messages/device_log_response.dart'; import 'package:stadtbote/protocoll_messages/logout_message.dart'; import 'package:stadtbote/tools/message_service.dart'; import 'package:stadtbote/tools/messages/job_deleted_message.dart'; @@ -394,7 +394,7 @@ class _MainPageState extends State { void _test() async { var logEintries = await MyApp.isarInstance.logEntrys.where().findAll(); - var deviceLog = DeviceLog(); + var deviceLog = DeviceLogResponse(); deviceLog.entries = logEintries; var json = jsonEncode(deviceLog.toJson()); diff --git a/lib/content_views/messages_page.dart b/lib/content_views/messages_page.dart index a82b56e..409fc32 100644 --- a/lib/content_views/messages_page.dart +++ b/lib/content_views/messages_page.dart @@ -103,8 +103,8 @@ class _MessagesPageState extends State { message.mssg.read = true; message.mssg.id = await sbmessage.Message.getNextId(); - MyApp.isarInstance.writeTxnSync(() { - MyApp.isarInstance.messages.putSync(message.mssg); + await MyApp.isarInstance.writeTxn(() async { + await MyApp.isarInstance.messages.put(message.mssg); }); MqttCore.instance.publishPayloadMessage('mssg', message.toJson()); @@ -140,8 +140,8 @@ class _MessagesPageState extends State { _messages.sort((a, b) => b.createdAt! > a.createdAt! ? 1 : 0); message.read = true; - MyApp.isarInstance.writeTxnSync(() { - MyApp.isarInstance.messages.putSync(message); + await MyApp.isarInstance.writeTxn(() async { + await MyApp.isarInstance.messages.put(message); }); } @@ -179,8 +179,8 @@ class _MessagesPageState extends State { ), const SizedBox(width: 20), Expanded( - child: getDefaultButton('Ja', () => { - MyApp.isarInstance.writeTxnSync(() => {MyApp.isarInstance.messages.deleteSync(int.parse(message.id))}), + child: getDefaultButton('Ja', () async => { + await MyApp.isarInstance.writeTxnSync(() async => { await MyApp.isarInstance.messages.delete(int.parse(message.id))}), _fetchMessages(), diff --git a/lib/content_views/task_list_page.dart b/lib/content_views/task_list_page.dart index 9af2e66..c9e0119 100644 --- a/lib/content_views/task_list_page.dart +++ b/lib/content_views/task_list_page.dart @@ -500,7 +500,8 @@ class _TaskListPageState extends State { MqttCore.instance.publishPayloadMessage("fin_tour", finTourMessage.toJson()); widget.tour.state = Constants.stateFinishedNotConfirmed; - await MyApp.isarInstance.writeTxn(() async { + + await MyApp.isarInstance.writeTxn(() async { await MyApp.isarInstance.jobs.put(widget.job); }); diff --git a/lib/main.dart b/lib/main.dart index 3ddcaa7..e255d3f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -18,8 +18,8 @@ import 'package:stadtbote/tools/connection_status.dart'; import 'package:stadtbote/tools/message_service.dart'; import 'package:stadtbote/tools/messages/job_received_message.dart'; import 'package:stadtbote/tools/messages/update_badges_message.dart'; +import 'package:stadtbote/tools/mqtt_core.dart'; -import 'tools/mqtt_core.dart'; import 'content_views/main_page.dart'; import 'content_views/utils/content_view_widget.dart'; import 'content_views/utils/widget_stack.dart'; diff --git a/lib/popups/accept_jobs_popup.dart b/lib/popups/accept_jobs_popup.dart index 2f8bda4..5743612 100644 --- a/lib/popups/accept_jobs_popup.dart +++ b/lib/popups/accept_jobs_popup.dart @@ -207,7 +207,7 @@ Future showAcceptJobsPopup(BuildContext context, List jobs, Function }); } -_sendAnswer(Job job, int item) { +_sendAnswer(Job job, int item) async { var currentPosition = MyApp.currentPosition; var message = AcceptJobMessage(); @@ -229,5 +229,5 @@ _sendAnswer(Job job, int item) { MqttCore.instance.publishPayloadMessage("job", message.toJson()); job.state = 9; - MyApp.isarInstance.writeTxnSync(() => {MyApp.isarInstance.jobs.putSync(job)}); + await MyApp.isarInstance.writeTxn(() async => { await MyApp.isarInstance.jobs.put(job)}); } diff --git a/lib/protocoll_messages/device_log.dart b/lib/protocoll_messages/device_log.dart deleted file mode 100644 index 7274dda..0000000 --- a/lib/protocoll_messages/device_log.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:stadtbote/model/log_entry.dart'; - -part 'device_log.g.dart'; - -@JsonSerializable() -class DeviceLog { - late List entries; - - DeviceLog(); - - Map toJson() => _$DeviceLogToJson(this); -} diff --git a/lib/protocoll_messages/device_log.g.dart b/lib/protocoll_messages/device_log.g.dart deleted file mode 100644 index 30f1822..0000000 --- a/lib/protocoll_messages/device_log.g.dart +++ /dev/null @@ -1,16 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'device_log.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -DeviceLog _$DeviceLogFromJson(Map json) => DeviceLog() - ..entries = (json['entries'] as List) - .map((e) => LogEntry.fromJson(e as Map)) - .toList(); - -Map _$DeviceLogToJson(DeviceLog instance) => { - 'entries': instance.entries, - }; diff --git a/lib/protocoll_messages/device_log_request.dart b/lib/protocoll_messages/device_log_request.dart new file mode 100644 index 0000000..976ed81 --- /dev/null +++ b/lib/protocoll_messages/device_log_request.dart @@ -0,0 +1,18 @@ +import 'dart:core'; + +import 'package:json_annotation/json_annotation.dart'; + +part 'device_log_request.g.dart'; + +@JsonSerializable() +class DeviceLogRequest { + late DateTime startDateTime; + + late DateTime endDateTime; + + DeviceLogRequest(); + + Map toJson() => _$DeviceLogRequestToJson(this); + + factory DeviceLogRequest.fromJson(Map json) => _$DeviceLogRequestFromJson(json); +} diff --git a/lib/protocoll_messages/device_log_request.g.dart b/lib/protocoll_messages/device_log_request.g.dart new file mode 100644 index 0000000..ed73e40 --- /dev/null +++ b/lib/protocoll_messages/device_log_request.g.dart @@ -0,0 +1,18 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'device_log_request.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +DeviceLogRequest _$DeviceLogRequestFromJson(Map json) => + DeviceLogRequest() + ..startDateTime = DateTime.parse(json['startDateTime'] as String) + ..endDateTime = DateTime.parse(json['endDateTime'] as String); + +Map _$DeviceLogRequestToJson(DeviceLogRequest instance) => + { + 'startDateTime': instance.startDateTime.toIso8601String(), + 'endDateTime': instance.endDateTime.toIso8601String(), + }; diff --git a/lib/protocoll_messages/device_log_response.dart b/lib/protocoll_messages/device_log_response.dart new file mode 100644 index 0000000..44ed022 --- /dev/null +++ b/lib/protocoll_messages/device_log_response.dart @@ -0,0 +1,15 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:stadtbote/model/log_entry.dart'; + +part 'device_log_response.g.dart'; + +@JsonSerializable() +class DeviceLogResponse { + late List entries; + + DeviceLogResponse(); + + Map toJson() => _$DeviceLogResponseToJson(this); + + factory DeviceLogResponse.fromJson(Map json) => _$DeviceLogResponseFromJson(json); +} diff --git a/lib/protocoll_messages/device_log_response.g.dart b/lib/protocoll_messages/device_log_response.g.dart new file mode 100644 index 0000000..afd2517 --- /dev/null +++ b/lib/protocoll_messages/device_log_response.g.dart @@ -0,0 +1,18 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'device_log_response.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +DeviceLogResponse _$DeviceLogResponseFromJson(Map json) => + DeviceLogResponse() + ..entries = (json['entries'] as List) + .map((e) => LogEntry.fromJson(e as Map)) + .toList(); + +Map _$DeviceLogResponseToJson(DeviceLogResponse instance) => + { + 'entries': instance.entries, + }; diff --git a/lib/tools/mqtt_core.dart b/lib/tools/mqtt_core.dart index 6b86c9a..fe6c5fc 100644 --- a/lib/tools/mqtt_core.dart +++ b/lib/tools/mqtt_core.dart @@ -1,7 +1,9 @@ import 'dart:async'; import 'dart:convert'; import 'dart:math'; +import 'dart:typed_data'; +import 'package:archive/archive.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:isar/isar.dart'; import 'package:mqtt_client/mqtt_client.dart'; @@ -13,7 +15,8 @@ import 'package:stadtbote/model/status.dart'; import 'package:stadtbote/protocoll_messages/acknowledge_job.dart'; import 'package:stadtbote/protocoll_messages/bootstrap_request.dart'; import 'package:stadtbote/protocoll_messages/bootstrap_response_payload.dart'; -import 'package:stadtbote/protocoll_messages/device_log.dart'; +import 'package:stadtbote/protocoll_messages/device_log_request.dart'; +import 'package:stadtbote/protocoll_messages/device_log_response.dart'; import 'package:stadtbote/protocoll_messages/device_object.dart'; import 'package:stadtbote/model/job.dart'; import 'package:stadtbote/model/message.dart'; @@ -133,13 +136,22 @@ class MqttCore { } } + publishBinary(String topic, List data) { + var buffer = Uint8Buffer(); + buffer.addAll(data); + + _mqttClient.publishMessage(topic, MqttQos.exactlyOnce, buffer); + + Util.logInfo("binary message send to $topic"); + } + publishText(String topic, String text) { var buffer = Uint8Buffer(); buffer.addAll(utf8.encode(text)); _mqttClient.publishMessage(topic, MqttQos.exactlyOnce, buffer); - Util.logInfo("message\n$text\nsend to $topic"); + //Util.logInfo("message\n$text\nsend to $topic"); } publishPayloadMessage(String topic, Map payload) { @@ -274,8 +286,8 @@ class MqttCore { for (var foundJobData in payloadData) { Job newJob = Job.fromJson(foundJobData); - MyApp.isarInstance.writeTxnSync(() async { - MyApp.isarInstance.jobs.putSync(newJob); + await MyApp.isarInstance.writeTxn(() async { + await MyApp.isarInstance.jobs.put(newJob); }); if (newJob.state == Constants.stateAssigned) { @@ -325,12 +337,21 @@ class MqttCore { } void _messageDeviceLogReceived(payloadData) async { - var logEintries = await MyApp.isarInstance.logEntrys.where().findAll(); + var deviceLogRequest = DeviceLogRequest.fromJson(payloadData); - var deviceLog = DeviceLog(); + var logEintries = await MyApp.isarInstance.logEntrys.filter().timeGreaterThan(deviceLogRequest.startDateTime).findAll(); + + var deviceLog = DeviceLogResponse(); deviceLog.entries = logEintries; - MqttCore.instance.publishPayloadMessage("device_log", deviceLog.toJson()); + //MqttCore.instance.publishPayloadMessage("device_log", deviceLog.toJson()); + + var json = jsonEncode(deviceLog.toJson()); + var stringBytes = utf8.encode(json); + var gzipBytes = GZipEncoder().encode(stringBytes); + + var topic = "/log/${_toServerTopic.replaceAll("/app/", "").replaceAll("/to_server", "")}"; + publishBinary(topic, gzipBytes!); } void _startReconnectTimer() { diff --git a/lib/tools/util.dart b/lib/tools/util.dart index 95f8c8d..20b3652 100644 --- a/lib/tools/util.dart +++ b/lib/tools/util.dart @@ -86,14 +86,14 @@ class Util { pattern.allMatches(text).forEach((match) => debugPrint(match.group(0))); } - static void _persistLogMessage(String text, LogEntrySeverityEnum severity) { + static void _persistLogMessage(String text, LogEntrySeverityEnum severity) async { var logEntry = LogEntry(); logEntry.time = DateTime.now(); logEntry.text = text; logEntry.severity = severity; - MyApp.isarInstance.writeTxnSync(() { - MyApp.isarInstance.logEntrys.putSync(logEntry); + await MyApp.isarInstance.writeTxn(() async { + await MyApp.isarInstance.logEntrys.put(logEntry); }); }