diff --git a/lib/content_views/assigned_jobs_page.dart b/lib/content_views/assigned_jobs_page.dart index 63f81dc..07695f9 100644 --- a/lib/content_views/assigned_jobs_page.dart +++ b/lib/content_views/assigned_jobs_page.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:expandable/expandable.dart'; import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; @@ -5,6 +7,10 @@ import 'package:stadtbote/content_views/utils/content_view_widget.dart'; import 'package:stadtbote/content_views/utils/header_info.dart'; import 'package:intl/intl.dart'; import 'package:badges/badges.dart' as badges; +import 'package:stadtbote/model/accept_job_message.dart'; +import 'package:stadtbote/model/payload_container.dart'; +import 'package:stadtbote/tools/mqtt_core.dart'; +import 'package:uuid/uuid.dart'; import '../main.dart'; import '../model/job.dart'; @@ -154,11 +160,11 @@ class _AssignedJobsPageState extends State { const SizedBox(height: 20), Row(children: [ Expanded( - child: getDefaultButton('Ablehnen', () => {_sendAnswer()}), + child: getDefaultButton('Ablehnen', () => {_sendAnswer(job, 1)}), ), const SizedBox(width: 20), Expanded( - child: getDefaultButton('Annehmen', () => {}), + child: getDefaultButton('Annehmen', () => {_sendAnswer(job, 2)}), ) ]) ], @@ -173,5 +179,20 @@ class _AssignedJobsPageState extends State { return entries; } - _sendAnswer() {} -} + _sendAnswer(Job job, int item) { + var message = AcceptJobMessage(); + message.reaction = Reaction(); + message.reaction.id = job.id.toString(); + message.reaction.ver = job.ver.toString(); + message.reaction.item = item; + message.reaction.track = Track(); + message.reaction.track.time = DateTime.now().toUtc().toIso8601String(); + message.reaction.track.pos = Pos(); + message.reaction.track.pos.lat = 0; + message.reaction.track.pos.long = 0; + message.reaction.track.pos.acc = 1; + + MqttCore.instance.publishPayloadMessage("server", message.toJson()); + + Util.logInfo('test'); + }} diff --git a/lib/model/accept_job_message.dart b/lib/model/accept_job_message.dart new file mode 100644 index 0000000..0451105 --- /dev/null +++ b/lib/model/accept_job_message.dart @@ -0,0 +1,54 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'accept_job_message.g.dart'; + +@JsonSerializable() +class AcceptJobMessage { + late Reaction reaction; + + AcceptJobMessage(); + + factory AcceptJobMessage.fromJson(Map json) => _$AcceptJobMessageFromJson(json); + + Map toJson() => _$AcceptJobMessageToJson(this); +} + +@JsonSerializable() +class Reaction { + late String id; + late String ver; + late int item; + late Track track; + + Reaction(); + + factory Reaction.fromJson(Map json) => _$ReactionFromJson(json); + + Map toJson() => _$ReactionToJson(this); +} + +@JsonSerializable() +@JsonSerializable()class Track { + late String time; + late Pos pos; + + Track(); + + factory Track.fromJson(Map json) => _$TrackFromJson(json); + + Map toJson() => _$TrackToJson(this); +} + +@JsonSerializable() +class Pos { + late double lat; + late double long; + late double acc; + + Pos(); + + factory Pos.fromJson(Map json) => _$PosFromJson(json); + + Map toJson() => _$PosToJson(this); +} + diff --git a/lib/model/accept_job_message.g.dart b/lib/model/accept_job_message.g.dart new file mode 100644 index 0000000..2c0e79e --- /dev/null +++ b/lib/model/accept_job_message.g.dart @@ -0,0 +1,49 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'accept_job_message.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +AcceptJobMessage _$AcceptJobMessageFromJson(Map json) => + AcceptJobMessage() + ..reaction = Reaction.fromJson(json['reaction'] as Map); + +Map _$AcceptJobMessageToJson(AcceptJobMessage instance) => + { + 'reaction': instance.reaction, + }; + +Reaction _$ReactionFromJson(Map json) => Reaction() + ..id = json['id'] as String + ..ver = json['ver'] as String + ..item = json['item'] as int + ..track = Track.fromJson(json['track'] as Map); + +Map _$ReactionToJson(Reaction instance) => { + 'id': instance.id, + 'ver': instance.ver, + 'item': instance.item, + 'track': instance.track, + }; + +Track _$TrackFromJson(Map json) => Track() + ..time = json['time'] as String + ..pos = Pos.fromJson(json['pos'] as Map); + +Map _$TrackToJson(Track instance) => { + 'time': instance.time, + 'pos': instance.pos, + }; + +Pos _$PosFromJson(Map json) => Pos() + ..lat = (json['lat'] as num).toDouble() + ..long = (json['long'] as num).toDouble() + ..acc = (json['acc'] as num).toDouble(); + +Map _$PosToJson(Pos instance) => { + 'lat': instance.lat, + 'long': instance.long, + 'acc': instance.acc, + }; diff --git a/lib/model/payload_container.dart b/lib/model/payload_container.dart new file mode 100644 index 0000000..d84b9dc --- /dev/null +++ b/lib/model/payload_container.dart @@ -0,0 +1,21 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'payload_container.g.dart'; + +@JsonSerializable() +class PayloadContainer { + late String recv; + + late bool store; + + late String id; + + late Map payload; + + PayloadContainer(); + + factory PayloadContainer.fromJson(Map json) => _$PayloadContainerFromJson(json); + + Map toJson() => _$PayloadContainerToJson(this); + +} \ No newline at end of file diff --git a/lib/model/payload_container.g.dart b/lib/model/payload_container.g.dart new file mode 100644 index 0000000..60e252c --- /dev/null +++ b/lib/model/payload_container.g.dart @@ -0,0 +1,22 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'payload_container.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +PayloadContainer _$PayloadContainerFromJson(Map json) => + PayloadContainer() + ..recv = json['recv'] as String + ..store = json['store'] as bool + ..id = json['id'] as String + ..payload = json['payload'] as Map; + +Map _$PayloadContainerToJson(PayloadContainer instance) => + { + 'recv': instance.recv, + 'store': instance.store, + 'id': instance.id, + 'payload': instance.payload, + }; diff --git a/lib/popups/accept_jobs_popup.dart b/lib/popups/accept_jobs_popup.dart index fb14256..cae7de6 100644 --- a/lib/popups/accept_jobs_popup.dart +++ b/lib/popups/accept_jobs_popup.dart @@ -4,10 +4,12 @@ import 'package:intl/intl.dart'; import 'package:isar/isar.dart'; import 'package:kumi_popup_window/kumi_popup_window.dart'; import 'package:stadtbote/main.dart'; +import 'package:stadtbote/model/accept_job_message.dart'; import 'package:stadtbote/model/job.dart'; import 'package:stadtbote/tools/constants.dart'; import 'package:stadtbote/tools/util.dart'; import 'package:badges/badges.dart' as badges; +import 'package:uuid/uuid.dart'; void showAcceptJobsPopup(BuildContext context) async { var entries = await _createListEntries(); @@ -142,11 +144,11 @@ Future> _createListEntries() async { const SizedBox(height: 20), Row(children: [ Expanded( - child: getDefaultButton('Ablehnen', () => {_sendAnswer()}), + child: getDefaultButton('Ablehnen', () => {_sendAnswer(1)}), ), const SizedBox(width: 20), Expanded( - child: getDefaultButton('Annehmen', () => {}), + child: getDefaultButton('Annehmen', () => {_sendAnswer(2)}), ) ]) ], @@ -192,4 +194,14 @@ private void SendAnswer(int item) } */ -_sendAnswer() {} +_sendAnswer(int item) { + var answer = AcceptJobMessage(); + answer.reaction = Reaction(); + answer.reaction.id = Uuid().v4().toString(); + answer.reaction.track = Track(); + answer.reaction.track.time = DateTime.now().toUtc().toIso8601String(); + + var json = answer.toJson(); + + Util.logInfo('test'); +} diff --git a/lib/tools/mqtt_core.dart b/lib/tools/mqtt_core.dart index 5412adb..d59f9be 100644 --- a/lib/tools/mqtt_core.dart +++ b/lib/tools/mqtt_core.dart @@ -10,6 +10,7 @@ import 'package:stadtbote/model/bootstrap_response_payload.dart'; import 'package:stadtbote/model/device_object.dart'; import 'package:stadtbote/model/job.dart'; import 'package:stadtbote/model/message.dart'; +import 'package:stadtbote/model/payload_container.dart'; import 'package:stadtbote/model/start_session_message.dart'; import 'package:stadtbote/tools/connection_status.dart'; import 'package:stadtbote/tools/messages/job_received_message.dart'; @@ -97,6 +98,24 @@ class MqttCore { buffer.addAll(text.codeUnits); _mqttClient.publishMessage(topic, MqttQos.exactlyOnce, buffer); + + Util.logInfo("message $text send to $topic"); + } catch (e) { + Util.logException(e.toString()); + } + } + + publishPayloadMessage(String receiver, Map payload) { + try { + var payloadContainer = PayloadContainer(); + payloadContainer.id = const Uuid().v4().toString(); + payloadContainer.recv = receiver; + payloadContainer.store = true; + payloadContainer.payload = payload; + + var json = jsonEncode(payloadContainer.toJson()); + + publishText(_toServerTopic, json); } catch (e) { Util.logException(e.toString()); }