Erweiterungen
This commit is contained in:
1 parent
20a1309946
commit
25a2455ce1
18 files changed
+2271
-1260
No files matched your search
@@ -10,6 +10,7 @@ import 'package:stadtbote/content_views/utils/content_view_widget.dart';
|
|||||||
import 'package:stadtbote/content_views/utils/header_info.dart';
|
import 'package:stadtbote/content_views/utils/header_info.dart';
|
||||||
import 'package:stadtbote/model/job.dart';
|
import 'package:stadtbote/model/job.dart';
|
||||||
import 'package:stadtbote/model/message.dart';
|
import 'package:stadtbote/model/message.dart';
|
||||||
|
import 'package:stadtbote/model/session_status.dart';
|
||||||
import 'package:stadtbote/model/status.dart';
|
import 'package:stadtbote/model/status.dart';
|
||||||
import 'package:stadtbote/popups/accept_jobs_popup.dart';
|
import 'package:stadtbote/popups/accept_jobs_popup.dart';
|
||||||
import 'package:stadtbote/popups/infos_popup.dart';
|
import 'package:stadtbote/popups/infos_popup.dart';
|
||||||
@@ -19,6 +20,7 @@ import 'package:stadtbote/tools/messages/job_received_message.dart';
|
|||||||
import 'package:stadtbote/tools/messages/message_message.dart';
|
import 'package:stadtbote/tools/messages/message_message.dart';
|
||||||
import 'package:stadtbote/tools/messages/session_info_update.dart';
|
import 'package:stadtbote/tools/messages/session_info_update.dart';
|
||||||
import 'package:badges/badges.dart' as badges;
|
import 'package:badges/badges.dart' as badges;
|
||||||
|
import 'package:stadtbote/tools/messages/status_info_update.dart';
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
import '../tools/constants.dart';
|
import '../tools/constants.dart';
|
||||||
@@ -28,13 +30,7 @@ class MainPage extends ContentViewWidget {
|
|||||||
final ValueNotifier<String> _zipValueNotifier = ValueNotifier("----");
|
final ValueNotifier<String> _zipValueNotifier = ValueNotifier("----");
|
||||||
final ValueNotifier<String> sidValueNotifier = ValueNotifier("----");
|
final ValueNotifier<String> sidValueNotifier = ValueNotifier("----");
|
||||||
|
|
||||||
MainPage({super.key}) {
|
MainPage({super.key});
|
||||||
Status? status = MyApp.isarInstance.status.where().findFirstSync();
|
|
||||||
if (status != null) {
|
|
||||||
_zipValueNotifier.value = status.locZip;
|
|
||||||
sidValueNotifier.value = status.sid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<MainPage> createState() => _MainPageState();
|
State<MainPage> createState() => _MainPageState();
|
||||||
@@ -77,7 +73,7 @@ class MainPage extends ContentViewWidget {
|
|||||||
rightButtonVisible: true,
|
rightButtonVisible: true,
|
||||||
rightButtonImage: Util.fetchFutureIcon(const Icon(Icons.info_outline, size: 20.0, color: Colors.white)),
|
rightButtonImage: Util.fetchFutureIcon(const Icon(Icons.info_outline, size: 20.0, color: Colors.white)),
|
||||||
rightButtonOnPressed: () async {
|
rightButtonOnPressed: () async {
|
||||||
showInfosPopup(context, await MyApp.isarInstance.status.where().findFirst());
|
showInfosPopup(context, await MyApp.isarInstance.sessionStatus.where().findFirst());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,6 +87,8 @@ class _MainPageState extends State<MainPage> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
|
_updateHeader();
|
||||||
|
|
||||||
_refreshBadges();
|
_refreshBadges();
|
||||||
|
|
||||||
_initMessages();
|
_initMessages();
|
||||||
@@ -240,8 +238,12 @@ class _MainPageState extends State<MainPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_initMessages() {
|
_initMessages() {
|
||||||
|
MessageService().subscribe<SessionStatusInfoUpdate>(Constants.messageTopicSessionStatusInfoUpdate, this, (sessionStatusInfoUpdateMessage) {
|
||||||
|
widget.sidValueNotifier.value = sessionStatusInfoUpdateMessage.status.sid;
|
||||||
|
});
|
||||||
|
|
||||||
MessageService().subscribe<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate, this, (statusInfoUpdateMessage) {
|
MessageService().subscribe<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate, this, (statusInfoUpdateMessage) {
|
||||||
widget.sidValueNotifier.value = statusInfoUpdateMessage.status.sid;
|
_updateHeader();
|
||||||
});
|
});
|
||||||
|
|
||||||
MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, this, (JobReceivedMessage jobReceivedMessage) {
|
MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, this, (JobReceivedMessage jobReceivedMessage) {
|
||||||
@@ -258,9 +260,9 @@ class _MainPageState extends State<MainPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _exitMessages() {
|
void _exitMessages() {
|
||||||
MessageService().unsubscribe<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate, this);
|
MessageService().unsubscribe<SessionStatusInfoUpdate>(Constants.messageTopicSessionStatusInfoUpdate, this);
|
||||||
|
|
||||||
MessageService().unsubscribe<StatusInfoUpdate>(Constants.messageTopicJobReceived, this);
|
MessageService().unsubscribe<SessionStatusInfoUpdate>(Constants.messageTopicJobReceived, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _refreshBadges() async {
|
void _refreshBadges() async {
|
||||||
@@ -272,4 +274,17 @@ class _MainPageState extends State<MainPage> {
|
|||||||
void _jobReceived(Job job) {
|
void _jobReceived(Job job) {
|
||||||
_refreshBadges();
|
_refreshBadges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _updateHeader() async {
|
||||||
|
var status = await MyApp.isarInstance.status.where().findFirst();
|
||||||
|
var sessionStatus = await MyApp.isarInstance.sessionStatus.where().findFirst();
|
||||||
|
|
||||||
|
if (status != null) {
|
||||||
|
widget._zipValueNotifier.value = '${status.pos.zip} (${status.pos.zipReal})';
|
||||||
|
} else if (sessionStatus != null) {
|
||||||
|
widget._zipValueNotifier.value = sessionStatus.sid;
|
||||||
|
} else {
|
||||||
|
widget._zipValueNotifier.value = "---";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,7 @@ import 'package:stadtbote/content_views/utils/content_view_widget.dart';
|
|||||||
import 'package:stadtbote/content_views/utils/header_info.dart';
|
import 'package:stadtbote/content_views/utils/header_info.dart';
|
||||||
import 'package:stadtbote/main.dart';
|
import 'package:stadtbote/main.dart';
|
||||||
import 'package:stadtbote/model/message.dart' as sbmessage;
|
import 'package:stadtbote/model/message.dart' as sbmessage;
|
||||||
import 'package:stadtbote/model/status.dart';
|
import 'package:stadtbote/model/session_status.dart';
|
||||||
import 'package:stadtbote/popups/infos_popup.dart';
|
import 'package:stadtbote/popups/infos_popup.dart';
|
||||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
import 'package:stadtbote/tools/mqtt_core.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
@@ -59,7 +59,7 @@ class _MessagesPageState extends State<MessagesPage> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
Future.delayed(const Duration(seconds: 0), () async {
|
Future.delayed(const Duration(seconds: 0), () async {
|
||||||
var status = await MyApp.isarInstance.status.where().findFirst();
|
var status = await MyApp.isarInstance.sessionStatus.where().findFirst();
|
||||||
_sid = status != null ? status.sid : 'Unbekannt';
|
_sid = status != null ? status.sid : 'Unbekannt';
|
||||||
|
|
||||||
await _fetchMessages();
|
await _fetchMessages();
|
||||||
|
|||||||
@@ -116,7 +116,11 @@ class _TourDetailsPageState extends State<TourDetailsPage> {
|
|||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
getDefaultButton('Karte', () =>
|
getDefaultButton('Karte', () =>
|
||||||
{
|
{
|
||||||
|
if (widget.tour.pos != null) {
|
||||||
showMapPopup(context, widget.tour, widget.job.tours)
|
showMapPopup(context, widget.tour, widget.job.tours)
|
||||||
|
} else {
|
||||||
|
showAlertDialog(context, 'Information', 'Es liegt keine Position für diese Station vor')
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
+4
-2
@@ -5,10 +5,11 @@ import 'package:geolocator/geolocator.dart';
|
|||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:stadtbote/model/message.dart';
|
import 'package:stadtbote/model/message.dart';
|
||||||
|
import 'package:stadtbote/model/status.dart';
|
||||||
import 'package:stadtbote/model/task_info.dart';
|
import 'package:stadtbote/model/task_info.dart';
|
||||||
import 'package:stadtbote/popups/accept_jobs_popup.dart';
|
import 'package:stadtbote/popups/accept_jobs_popup.dart';
|
||||||
import 'package:stadtbote/tools/colored_safe_area.dart';
|
import 'package:stadtbote/tools/colored_safe_area.dart';
|
||||||
import 'package:stadtbote/model/status.dart';
|
import 'package:stadtbote/model/session_status.dart';
|
||||||
import 'package:stadtbote/tools/connection_status.dart';
|
import 'package:stadtbote/tools/connection_status.dart';
|
||||||
import 'package:stadtbote/tools/message_service.dart';
|
import 'package:stadtbote/tools/message_service.dart';
|
||||||
import 'package:stadtbote/tools/messages/job_received_message.dart';
|
import 'package:stadtbote/tools/messages/job_received_message.dart';
|
||||||
@@ -26,6 +27,7 @@ Future<void> main() async {
|
|||||||
|
|
||||||
final dir = await getApplicationDocumentsDirectory();
|
final dir = await getApplicationDocumentsDirectory();
|
||||||
MyApp.isarInstance = await Isar.open([
|
MyApp.isarInstance = await Isar.open([
|
||||||
|
SessionStatusSchema,
|
||||||
StatusSchema,
|
StatusSchema,
|
||||||
JobSchema,
|
JobSchema,
|
||||||
TaskInfoSchema,
|
TaskInfoSchema,
|
||||||
@@ -72,7 +74,7 @@ class MyApp extends StatelessWidget {
|
|||||||
if (result) {
|
if (result) {
|
||||||
LocationSettings locationSettings = const LocationSettings(
|
LocationSettings locationSettings = const LocationSettings(
|
||||||
accuracy: LocationAccuracy.high,
|
accuracy: LocationAccuracy.high,
|
||||||
distanceFilter: 50,
|
distanceFilter: 0,
|
||||||
);
|
);
|
||||||
|
|
||||||
Geolocator.getPositionStream(locationSettings: locationSettings).listen((Position? position) {
|
Geolocator.getPositionStream(locationSettings: locationSettings).listen((Position? position) {
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import 'package:isar/isar.dart';
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'session_status.g.dart';
|
||||||
|
|
||||||
|
@collection
|
||||||
|
@JsonSerializable()
|
||||||
|
class SessionStatus {
|
||||||
|
final Id id = 0;
|
||||||
|
|
||||||
|
@JsonKey(name: 'cust_id')
|
||||||
|
late int custId;
|
||||||
|
@JsonKey(name: 'hq_id')
|
||||||
|
late int hqId;
|
||||||
|
@JsonKey(name: 'usr_id')
|
||||||
|
late int usrId;
|
||||||
|
@JsonKey(name: 'cr_id')
|
||||||
|
late int crId;
|
||||||
|
@JsonKey(name: 'sid')
|
||||||
|
late String sid;
|
||||||
|
@JsonKey(name: 'vht_id')
|
||||||
|
late int vhtId;
|
||||||
|
@JsonKey(name: 'loc_zip')
|
||||||
|
late String locZip;
|
||||||
|
@JsonKey(name: 'server_version')
|
||||||
|
late String serverVersion;
|
||||||
|
@JsonKey(name: 'server_instance')
|
||||||
|
late String serverInstance;
|
||||||
|
|
||||||
|
SessionStatus();
|
||||||
|
|
||||||
|
factory SessionStatus.fromJson(Map<String, dynamic> json) => _$SessionStatusFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$SessionStatusToJson(this);
|
||||||
|
}
|
||||||
File diff suppressed because it is too large.
Load diff
+19
-19
@@ -6,26 +6,9 @@ part 'status.g.dart';
|
|||||||
@collection
|
@collection
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
class Status {
|
class Status {
|
||||||
final Id id = 0;
|
late Id? id;
|
||||||
|
|
||||||
@JsonKey(name: 'cust_id')
|
late StatusPos pos;
|
||||||
late int custId;
|
|
||||||
@JsonKey(name: 'hq_id')
|
|
||||||
late int hqId;
|
|
||||||
@JsonKey(name: 'usr_id')
|
|
||||||
late int usrId;
|
|
||||||
@JsonKey(name: 'cr_id')
|
|
||||||
late int crId;
|
|
||||||
@JsonKey(name: 'sid')
|
|
||||||
late String sid;
|
|
||||||
@JsonKey(name: 'vht_id')
|
|
||||||
late int vhtId;
|
|
||||||
@JsonKey(name: 'loc_zip')
|
|
||||||
late String locZip;
|
|
||||||
@JsonKey(name: 'server_version')
|
|
||||||
late String serverVersion;
|
|
||||||
@JsonKey(name: 'server_instance')
|
|
||||||
late String serverInstance;
|
|
||||||
|
|
||||||
Status();
|
Status();
|
||||||
|
|
||||||
@@ -33,3 +16,20 @@ class Status {
|
|||||||
|
|
||||||
Map<String, dynamic> toJson() => _$StatusToJson(this);
|
Map<String, dynamic> toJson() => _$StatusToJson(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@embedded
|
||||||
|
@JsonSerializable()
|
||||||
|
class StatusPos {
|
||||||
|
late String zip;
|
||||||
|
|
||||||
|
late String area;
|
||||||
|
|
||||||
|
@JsonKey(name:'zip_real')
|
||||||
|
late String zipReal;
|
||||||
|
|
||||||
|
StatusPos();
|
||||||
|
|
||||||
|
factory StatusPos.fromJson(Map<String, dynamic> json) => _$StatusPosFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$StatusPosToJson(this);
|
||||||
|
}
|
||||||
+550
-1204
File diff suppressed because it is too large.
Load diff
@@ -1,11 +1,11 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:kumi_popup_window/kumi_popup_window.dart';
|
import 'package:kumi_popup_window/kumi_popup_window.dart';
|
||||||
import 'package:stadtbote/main.dart';
|
import 'package:stadtbote/main.dart';
|
||||||
import 'package:stadtbote/model/status.dart';
|
import 'package:stadtbote/model/session_status.dart';
|
||||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
import 'package:stadtbote/tools/mqtt_core.dart';
|
||||||
import 'package:stadtbote/tools/util.dart';
|
import 'package:stadtbote/tools/util.dart';
|
||||||
|
|
||||||
void showInfosPopup(BuildContext context, Status? status) {
|
void showInfosPopup(BuildContext context, SessionStatus? status) {
|
||||||
var text = "Versionsnummer: a203\n";
|
var text = "Versionsnummer: a203\n";
|
||||||
text += "Verbindungsstatus: ${MqttCore.instance.connectionState == ConnectionStateEnum.connected ? "Verbunden" : "NICHT verbunden"}\n";
|
text += "Verbindungsstatus: ${MqttCore.instance.connectionState == ConnectionStateEnum.connected ? "Verbunden" : "NICHT verbunden"}\n";
|
||||||
text += "GPS-Status: ${MyApp.currentPosition != null ? "Position gefunden" : "Position NICHT gefunden"}\n";
|
text += "GPS-Status: ${MyApp.currentPosition != null ? "Position gefunden" : "Position NICHT gefunden"}\n";
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ part 'sync_jobs_message.g.dart';
|
|||||||
|
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
class SyncJobsMessage {
|
class SyncJobsMessage {
|
||||||
|
@JsonKey(name: 'utc_unix_time')
|
||||||
|
late int utcUnixTime;
|
||||||
|
|
||||||
late SyncJobMessageSync sync;
|
late SyncJobMessageSync sync;
|
||||||
|
|
||||||
SyncJobsMessage();
|
SyncJobsMessage();
|
||||||
@@ -15,8 +18,6 @@ class SyncJobsMessage {
|
|||||||
|
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
class SyncJobMessageSync {
|
class SyncJobMessageSync {
|
||||||
late int utcUnixTime;
|
|
||||||
|
|
||||||
late List<SyncJobMessageJob> jobs;
|
late List<SyncJobMessageJob> jobs;
|
||||||
|
|
||||||
SyncJobMessageSync();
|
SyncJobMessageSync();
|
||||||
@@ -30,7 +31,7 @@ class SyncJobMessageSync {
|
|||||||
class SyncJobMessageJob {
|
class SyncJobMessageJob {
|
||||||
late int id;
|
late int id;
|
||||||
|
|
||||||
late int ver;
|
late String ver;
|
||||||
|
|
||||||
late int state;
|
late int state;
|
||||||
|
|
||||||
|
|||||||
@@ -8,31 +8,31 @@ part of 'sync_jobs_message.dart';
|
|||||||
|
|
||||||
SyncJobsMessage _$SyncJobsMessageFromJson(Map<String, dynamic> json) =>
|
SyncJobsMessage _$SyncJobsMessageFromJson(Map<String, dynamic> json) =>
|
||||||
SyncJobsMessage()
|
SyncJobsMessage()
|
||||||
|
..utcUnixTime = json['utc_unix_time'] as int
|
||||||
..sync =
|
..sync =
|
||||||
SyncJobMessageSync.fromJson(json['sync'] as Map<String, dynamic>);
|
SyncJobMessageSync.fromJson(json['sync'] as Map<String, dynamic>);
|
||||||
|
|
||||||
Map<String, dynamic> _$SyncJobsMessageToJson(SyncJobsMessage instance) =>
|
Map<String, dynamic> _$SyncJobsMessageToJson(SyncJobsMessage instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
|
'utc_unix_time': instance.utcUnixTime,
|
||||||
'sync': instance.sync,
|
'sync': instance.sync,
|
||||||
};
|
};
|
||||||
|
|
||||||
SyncJobMessageSync _$SyncJobMessageSyncFromJson(Map<String, dynamic> json) =>
|
SyncJobMessageSync _$SyncJobMessageSyncFromJson(Map<String, dynamic> json) =>
|
||||||
SyncJobMessageSync()
|
SyncJobMessageSync()
|
||||||
..utcUnixTime = json['utcUnixTime'] as int
|
|
||||||
..jobs = (json['jobs'] as List<dynamic>)
|
..jobs = (json['jobs'] as List<dynamic>)
|
||||||
.map((e) => SyncJobMessageJob.fromJson(e as Map<String, dynamic>))
|
.map((e) => SyncJobMessageJob.fromJson(e as Map<String, dynamic>))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
Map<String, dynamic> _$SyncJobMessageSyncToJson(SyncJobMessageSync instance) =>
|
Map<String, dynamic> _$SyncJobMessageSyncToJson(SyncJobMessageSync instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'utcUnixTime': instance.utcUnixTime,
|
|
||||||
'jobs': instance.jobs,
|
'jobs': instance.jobs,
|
||||||
};
|
};
|
||||||
|
|
||||||
SyncJobMessageJob _$SyncJobMessageJobFromJson(Map<String, dynamic> json) =>
|
SyncJobMessageJob _$SyncJobMessageJobFromJson(Map<String, dynamic> json) =>
|
||||||
SyncJobMessageJob()
|
SyncJobMessageJob()
|
||||||
..id = json['id'] as int
|
..id = json['id'] as int
|
||||||
..ver = json['ver'] as int
|
..ver = json['ver'] as String
|
||||||
..state = json['state'] as int;
|
..state = json['state'] as int;
|
||||||
|
|
||||||
Map<String, dynamic> _$SyncJobMessageJobToJson(SyncJobMessageJob instance) =>
|
Map<String, dynamic> _$SyncJobMessageJobToJson(SyncJobMessageJob instance) =>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ part 'track_message.g.dart';
|
|||||||
|
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
class TrackMessage {
|
class TrackMessage {
|
||||||
late FinTaskPos pos;
|
late TrackPosition pos;
|
||||||
|
|
||||||
TrackMessage();
|
TrackMessage();
|
||||||
|
|
||||||
@@ -14,3 +14,20 @@ class TrackMessage {
|
|||||||
Map<String, dynamic> toJson() => _$TrackMessageToJson(this);
|
Map<String, dynamic> toJson() => _$TrackMessageToJson(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class TrackPosition {
|
||||||
|
late String time;
|
||||||
|
|
||||||
|
late double lat;
|
||||||
|
|
||||||
|
late double long;
|
||||||
|
|
||||||
|
late int acc;
|
||||||
|
|
||||||
|
TrackPosition();
|
||||||
|
|
||||||
|
factory TrackPosition.fromJson(Map<String, dynamic> json) => _$TrackPositionFromJson(json);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$TrackPositionToJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -7,9 +7,24 @@ part of 'track_message.dart';
|
|||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
TrackMessage _$TrackMessageFromJson(Map<String, dynamic> json) => TrackMessage()
|
TrackMessage _$TrackMessageFromJson(Map<String, dynamic> json) => TrackMessage()
|
||||||
..pos = FinTaskPos.fromJson(json['pos'] as Map<String, dynamic>);
|
..pos = TrackPosition.fromJson(json['pos'] as Map<String, dynamic>);
|
||||||
|
|
||||||
Map<String, dynamic> _$TrackMessageToJson(TrackMessage instance) =>
|
Map<String, dynamic> _$TrackMessageToJson(TrackMessage instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'pos': instance.pos,
|
'pos': instance.pos,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TrackPosition _$TrackPositionFromJson(Map<String, dynamic> json) =>
|
||||||
|
TrackPosition()
|
||||||
|
..time = json['time'] as String
|
||||||
|
..lat = (json['lat'] as num).toDouble()
|
||||||
|
..long = (json['long'] as num).toDouble()
|
||||||
|
..acc = json['acc'] as int;
|
||||||
|
|
||||||
|
Map<String, dynamic> _$TrackPositionToJson(TrackPosition instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'time': instance.time,
|
||||||
|
'lat': instance.lat,
|
||||||
|
'long': instance.long,
|
||||||
|
'acc': instance.acc,
|
||||||
|
};
|
||||||
@@ -6,7 +6,8 @@ class Constants {
|
|||||||
|
|
||||||
static const String messageTopicConnectionStatusChanged = "connection_status_changed";
|
static const String messageTopicConnectionStatusChanged = "connection_status_changed";
|
||||||
static const String messageTopicSessionInfoUpdate = "status_info_updated";
|
static const String messageTopicSessionInfoUpdate = "status_info_updated";
|
||||||
static const String messageTopicStatusInfoUpdate = "session_info_updated";
|
static const String messageTopicSessionStatusInfoUpdate = "session_status_info_updated";
|
||||||
|
static const String messageTopicStatusInfoUpdate = "status_info_updated";
|
||||||
static const String messageTopicJobReceived = "job_received";
|
static const String messageTopicJobReceived = "job_received";
|
||||||
static const String messageTopicJobDeleted = "job_deleted";
|
static const String messageTopicJobDeleted = "job_deleted";
|
||||||
static const String messageTopicMessageReceived = "message_received";
|
static const String messageTopicMessageReceived = "message_received";
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
import 'package:stadtbote/model/status.dart';
|
import 'package:stadtbote/model/session_status.dart';
|
||||||
|
|
||||||
class StatusInfoUpdate {
|
class SessionStatusInfoUpdate {
|
||||||
StatusInfoUpdate({required this.status});
|
SessionStatusInfoUpdate({required this.status});
|
||||||
|
|
||||||
final Status status;
|
final SessionStatus status;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import 'package:stadtbote/model/status.dart';
|
||||||
|
|
||||||
|
class StatusInfoUpdate {
|
||||||
|
StatusInfoUpdate({required this.status});
|
||||||
|
|
||||||
|
final Status status;
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import 'package:isar/isar.dart';
|
|||||||
import 'package:mqtt_client/mqtt_client.dart';
|
import 'package:mqtt_client/mqtt_client.dart';
|
||||||
import 'package:mqtt_client/mqtt_server_client.dart';
|
import 'package:mqtt_client/mqtt_server_client.dart';
|
||||||
import 'package:stadtbote/model/job_tour.dart';
|
import 'package:stadtbote/model/job_tour.dart';
|
||||||
|
import 'package:stadtbote/model/status.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/bootstrap_request.dart';
|
import 'package:stadtbote/protocoll_messages/bootstrap_request.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/bootstrap_response_payload.dart';
|
import 'package:stadtbote/protocoll_messages/bootstrap_response_payload.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/device_object.dart';
|
import 'package:stadtbote/protocoll_messages/device_object.dart';
|
||||||
@@ -23,13 +24,14 @@ import 'package:stadtbote/tools/messages/job_deleted_message.dart';
|
|||||||
import 'package:stadtbote/tools/messages/job_received_message.dart';
|
import 'package:stadtbote/tools/messages/job_received_message.dart';
|
||||||
import 'package:stadtbote/tools/messages/message_message.dart';
|
import 'package:stadtbote/tools/messages/message_message.dart';
|
||||||
import 'package:stadtbote/tools/messages/session_info_update.dart';
|
import 'package:stadtbote/tools/messages/session_info_update.dart';
|
||||||
|
import 'package:stadtbote/tools/messages/status_info_update.dart';
|
||||||
// ignore: depend_on_referenced_packages
|
// ignore: depend_on_referenced_packages
|
||||||
import 'package:typed_data/typed_buffers.dart';
|
import 'package:typed_data/typed_buffers.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
import '../model/status.dart';
|
import '../model/session_status.dart';
|
||||||
import 'constants.dart';
|
import 'constants.dart';
|
||||||
import 'util.dart';
|
import 'util.dart';
|
||||||
|
|
||||||
@@ -164,6 +166,10 @@ class MqttCore {
|
|||||||
_sessionMessageReceived(payloadData);
|
_sessionMessageReceived(payloadData);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'status':
|
||||||
|
_statusMessageReceived(payloadData);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'ranks':
|
case 'ranks':
|
||||||
_rankingMessageReceived(payloadData);
|
_rankingMessageReceived(payloadData);
|
||||||
break;
|
break;
|
||||||
@@ -207,15 +213,27 @@ class MqttCore {
|
|||||||
|
|
||||||
await _sendSyncMessage();
|
await _sendSyncMessage();
|
||||||
|
|
||||||
var statusMessage = Status.fromJson(payloadData['status']);
|
var sessionStatusMessage = SessionStatus.fromJson(payloadData['status']);
|
||||||
|
|
||||||
await MyApp.isarInstance.writeTxn(() async {
|
await MyApp.isarInstance.writeTxn(() async {
|
||||||
|
await MyApp.isarInstance.sessionStatus.clear();
|
||||||
|
await MyApp.isarInstance.sessionStatus.put(sessionStatusMessage);
|
||||||
|
});
|
||||||
|
|
||||||
|
MessageService().publish<SessionStatusInfoUpdate>(Constants.messageTopicSessionStatusInfoUpdate, arguments: SessionStatusInfoUpdate(status: sessionStatusMessage));
|
||||||
|
|
||||||
|
_startTrackTimer();
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
await MyApp.isarInstance.status.put(statusMessage);
|
||||||
});
|
});
|
||||||
|
|
||||||
MessageService().publish<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate, arguments: StatusInfoUpdate(status: statusMessage));
|
MessageService().publish<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate, arguments: StatusInfoUpdate(status: statusMessage));
|
||||||
|
|
||||||
_startTrackTimer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _rankingMessageReceived(payloadData) async {
|
void _rankingMessageReceived(payloadData) async {
|
||||||
@@ -372,14 +390,14 @@ class MqttCore {
|
|||||||
var jobs = await MyApp.isarInstance.jobs.filter().stateGreaterThan(-1).findAll();
|
var jobs = await MyApp.isarInstance.jobs.filter().stateGreaterThan(-1).findAll();
|
||||||
|
|
||||||
var answer = SyncJobsMessage();
|
var answer = SyncJobsMessage();
|
||||||
|
answer.utcUnixTime = DateTime.now().toUtc().millisecondsSinceEpoch ~/ 1000;
|
||||||
answer.sync = SyncJobMessageSync();
|
answer.sync = SyncJobMessageSync();
|
||||||
answer.sync.jobs = [];
|
answer.sync.jobs = [];
|
||||||
answer.sync.utcUnixTime = DateTime.now().toUtc().millisecondsSinceEpoch ~/ 1000;
|
|
||||||
for (var job in jobs) {
|
for (var job in jobs) {
|
||||||
SyncJobMessageJob syncJob = SyncJobMessageJob();
|
SyncJobMessageJob syncJob = SyncJobMessageJob();
|
||||||
syncJob.state = job.state;
|
syncJob.state = job.state;
|
||||||
syncJob.id = job.id;
|
syncJob.id = job.id;
|
||||||
syncJob.ver = job.ver;
|
syncJob.ver = job.ver.toString();
|
||||||
answer.sync.jobs.add(syncJob);
|
answer.sync.jobs.add(syncJob);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -391,7 +409,8 @@ class MqttCore {
|
|||||||
var position = MyApp.currentPosition;
|
var position = MyApp.currentPosition;
|
||||||
if (position != null) {
|
if (position != null) {
|
||||||
var trackMessage = TrackMessage();
|
var trackMessage = TrackMessage();
|
||||||
trackMessage.pos = FinTaskPos();
|
trackMessage.pos = TrackPosition();
|
||||||
|
trackMessage.pos.time = position.timestamp.toIso8601String();
|
||||||
trackMessage.pos.lat = position.latitude;
|
trackMessage.pos.lat = position.latitude;
|
||||||
trackMessage.pos.long = position.longitude;
|
trackMessage.pos.long = position.longitude;
|
||||||
trackMessage.pos.acc = position.accuracy.toInt();
|
trackMessage.pos.acc = position.accuracy.toInt();
|
||||||
|
|||||||
@@ -320,3 +320,21 @@ String mapTourMode(String mode) {
|
|||||||
|
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> showAlertDialog(BuildContext context, String title, String message) async {
|
||||||
|
await showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: Text(title),
|
||||||
|
content: Text(message),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.pop(context),
|
||||||
|
child: const Text('OK'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in new issue
Block a user