Erweiterungen

This commit is contained in:
Sven committed 2024-01-29 17:10:43 +01:00
1 parent 5384964e3d
commit 3cc8ec47fc
7 files changed
+205 -7

No files matched your search

+25 -4
View File
@@ -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<AssignedJobsPage> {
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<AssignedJobsPage> {
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');
}}
+54
View File
@@ -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<String, dynamic> json) => _$AcceptJobMessageFromJson(json);
Map<String, dynamic> toJson() => _$AcceptJobMessageToJson(this);
}
@JsonSerializable()
class Reaction {
late String id;
late String ver;
late int item;
late Track track;
Reaction();
factory Reaction.fromJson(Map<String, dynamic> json) => _$ReactionFromJson(json);
Map<String, dynamic> toJson() => _$ReactionToJson(this);
}
@JsonSerializable()
@JsonSerializable()class Track {
late String time;
late Pos pos;
Track();
factory Track.fromJson(Map<String, dynamic> json) => _$TrackFromJson(json);
Map<String, dynamic> toJson() => _$TrackToJson(this);
}
@JsonSerializable()
class Pos {
late double lat;
late double long;
late double acc;
Pos();
factory Pos.fromJson(Map<String, dynamic> json) => _$PosFromJson(json);
Map<String, dynamic> toJson() => _$PosToJson(this);
}
+49
View File
@@ -0,0 +1,49 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'accept_job_message.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
AcceptJobMessage _$AcceptJobMessageFromJson(Map<String, dynamic> json) =>
AcceptJobMessage()
..reaction = Reaction.fromJson(json['reaction'] as Map<String, dynamic>);
Map<String, dynamic> _$AcceptJobMessageToJson(AcceptJobMessage instance) =>
<String, dynamic>{
'reaction': instance.reaction,
};
Reaction _$ReactionFromJson(Map<String, dynamic> json) => Reaction()
..id = json['id'] as String
..ver = json['ver'] as String
..item = json['item'] as int
..track = Track.fromJson(json['track'] as Map<String, dynamic>);
Map<String, dynamic> _$ReactionToJson(Reaction instance) => <String, dynamic>{
'id': instance.id,
'ver': instance.ver,
'item': instance.item,
'track': instance.track,
};
Track _$TrackFromJson(Map<String, dynamic> json) => Track()
..time = json['time'] as String
..pos = Pos.fromJson(json['pos'] as Map<String, dynamic>);
Map<String, dynamic> _$TrackToJson(Track instance) => <String, dynamic>{
'time': instance.time,
'pos': instance.pos,
};
Pos _$PosFromJson(Map<String, dynamic> json) => Pos()
..lat = (json['lat'] as num).toDouble()
..long = (json['long'] as num).toDouble()
..acc = (json['acc'] as num).toDouble();
Map<String, dynamic> _$PosToJson(Pos instance) => <String, dynamic>{
'lat': instance.lat,
'long': instance.long,
'acc': instance.acc,
};
+21
View File
@@ -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<String, dynamic> payload;
PayloadContainer();
factory PayloadContainer.fromJson(Map<String, dynamic> json) => _$PayloadContainerFromJson(json);
Map<String, dynamic> toJson() => _$PayloadContainerToJson(this);
}
+22
View File
@@ -0,0 +1,22 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'payload_container.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
PayloadContainer _$PayloadContainerFromJson(Map<String, dynamic> json) =>
PayloadContainer()
..recv = json['recv'] as String
..store = json['store'] as bool
..id = json['id'] as String
..payload = json['payload'] as Map<String, dynamic>;
Map<String, dynamic> _$PayloadContainerToJson(PayloadContainer instance) =>
<String, dynamic>{
'recv': instance.recv,
'store': instance.store,
'id': instance.id,
'payload': instance.payload,
};
+15 -3
View File
@@ -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<List<Widget>> _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');
}
+19
View File
@@ -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<String, dynamic> 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());
}