Merge
This commit is contained in:
1 parent
880cdd65ff
commit
8586a23bfa
19 files changed
+179
-220
No files matched your search
@@ -1,16 +1,10 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:isar/isar.dart';
|
|
||||||
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
|
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/ranking.dart';
|
//import 'package:stadtbote/model/ranking.dart';
|
||||||
import 'package:stadtbote/popups/tasks_popups/zip_popup.dart';
|
|
||||||
import 'package:stadtbote/protocoll_messages/zip_message.dart';
|
|
||||||
import 'package:stadtbote/tools/constants.dart';
|
import 'package:stadtbote/tools/constants.dart';
|
||||||
import 'package:stadtbote/tools/message_service.dart';
|
import 'package:stadtbote/tools/message_service.dart';
|
||||||
import 'package:stadtbote/tools/messages/ranking_updated.dart';
|
|
||||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
|
||||||
|
|
||||||
import '../main.dart';
|
|
||||||
import '../tools/util.dart';
|
import '../tools/util.dart';
|
||||||
|
|
||||||
enum ModeEnum {
|
enum ModeEnum {
|
||||||
@@ -44,7 +38,7 @@ class ApproachAreaPage extends ContentViewWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
||||||
late Ranking? _ranking;
|
//late Ranking? _ranking;
|
||||||
|
|
||||||
late bool _initCompleted = false;
|
late bool _initCompleted = false;
|
||||||
|
|
||||||
@@ -53,7 +47,7 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
Future.delayed(const Duration(seconds: 0), () async {
|
Future.delayed(const Duration(seconds: 0), () async {
|
||||||
_ranking = await MyApp.isarInstance.rankings.where().findFirst();
|
//_ranking = await MyApp.isarInstance.rankings.where().findFirst();
|
||||||
|
|
||||||
_initCompleted = true;
|
_initCompleted = true;
|
||||||
|
|
||||||
@@ -94,7 +88,7 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
|||||||
List<Widget> _fillColumns() {
|
List<Widget> _fillColumns() {
|
||||||
List<Widget> columns = [];
|
List<Widget> columns = [];
|
||||||
|
|
||||||
if (_ranking != null) {
|
/*if (_ranking != null) {
|
||||||
for (int i = 0; i < _ranking!.ranks.length; i++) {
|
for (int i = 0; i < _ranking!.ranks.length; i++) {
|
||||||
var rank = _ranking!.ranks[i];
|
var rank = _ranking!.ranks[i];
|
||||||
|
|
||||||
@@ -171,12 +165,12 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
|||||||
),
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
return columns;
|
return columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
_sendZip(Rank rank, String zip, ModeEnum mode) {
|
/*_sendZip(Rank rank, String zip, ModeEnum mode) {
|
||||||
var zipMessage = ZipMessage();
|
var zipMessage = ZipMessage();
|
||||||
|
|
||||||
if (mode == ModeEnum.set) {
|
if (mode == ModeEnum.set) {
|
||||||
@@ -200,13 +194,13 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MqttCore.instance.publishPayloadMessage("rank", zipMessage.toJson());
|
MqttCore.instance.publishPayloadMessage("rank", zipMessage.toJson());
|
||||||
}
|
}*/
|
||||||
|
|
||||||
_initMessages() {
|
_initMessages() {
|
||||||
MessageService().subscribe<RankingUpdated>(Constants.messageTopicRankingUpdated, this, (rankingUpdateMessage) async {
|
/*MessageService().subscribe<RankingUpdated>(Constants.messageTopicRankingUpdated, this, (rankingUpdateMessage) async {
|
||||||
_ranking = await MyApp.isarInstance.rankings.where().findFirst();
|
_ranking = await MyApp.isarInstance.rankings.where().findFirst();
|
||||||
|
|
||||||
setState(() {});
|
setState(() {});
|
||||||
});
|
});*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:expandable/expandable.dart';
|
import 'package:expandable/expandable.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
@@ -8,7 +10,7 @@ import 'package:badges/badges.dart' as badges;
|
|||||||
import 'package:stadtbote/protocoll_messages/accept_job_message.dart';
|
import 'package:stadtbote/protocoll_messages/accept_job_message.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/fin_task_message.dart';
|
import 'package:stadtbote/protocoll_messages/fin_task_message.dart';
|
||||||
import 'package:stadtbote/tools/message_service.dart';
|
import 'package:stadtbote/tools/message_service.dart';
|
||||||
import 'package:stadtbote/tools/messages/job_deleted_message.dart';
|
import 'package:stadtbote/tools/messages/refresh_badges_message.dart';
|
||||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
import 'package:stadtbote/tools/mqtt_core.dart';
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
@@ -86,12 +88,6 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> {
|
|||||||
|
|
||||||
var jobs = await MyApp.isarInstance.jobs.filter().stateEqualTo(Constants.stateAssigned).findAll();
|
var jobs = await MyApp.isarInstance.jobs.filter().stateEqualTo(Constants.stateAssigned).findAll();
|
||||||
for (var job in jobs) {
|
for (var job in jobs) {
|
||||||
String remarkString = '';
|
|
||||||
for (var remark in job.rem) {
|
|
||||||
remarkString += '$remark\n';
|
|
||||||
}
|
|
||||||
remarkString = remarkString.trim();
|
|
||||||
|
|
||||||
entries.add(ExpandableNotifier(
|
entries.add(ExpandableNotifier(
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
contentPadding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
|
contentPadding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
|
||||||
@@ -200,9 +196,9 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> {
|
|||||||
message.track = Track();
|
message.track = Track();
|
||||||
message.track.time = DateTime.now().toUtc().toIso8601String();
|
message.track.time = DateTime.now().toUtc().toIso8601String();
|
||||||
message.track.pos = FinTaskPos();
|
message.track.pos = FinTaskPos();
|
||||||
message.track.pos.lat = currentPosition != null ? currentPosition.latitude : 0.0;
|
message.track.pos!.lat = currentPosition != null ? currentPosition.latitude : 0.0;
|
||||||
message.track.pos.long = currentPosition != null ? currentPosition.longitude : 0.0;
|
message.track.pos!.long = currentPosition != null ? currentPosition.longitude : 0.0;
|
||||||
message.track.pos.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
|
message.track.pos!.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
|
||||||
|
|
||||||
MqttCore.instance.publishText("reaction", jsonEncode(message.toJson()));
|
MqttCore.instance.publishText("reaction", jsonEncode(message.toJson()));
|
||||||
|
|
||||||
@@ -216,4 +212,6 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> {
|
|||||||
|
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _initMessages() {}
|
||||||
}
|
}
|
||||||
@@ -11,12 +11,10 @@ import 'package:stadtbote/content_views/messages_page.dart';
|
|||||||
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
|
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/log_entry.dart';
|
|
||||||
import 'package:stadtbote/model/message.dart';
|
import 'package:stadtbote/model/message.dart';
|
||||||
import 'package:stadtbote/model/session_status.dart';
|
import 'package:stadtbote/model/session_status.dart';
|
||||||
import 'package:stadtbote/model/status.dart';
|
import 'package:stadtbote/model/status.dart';
|
||||||
import 'package:stadtbote/popups/infos_popup.dart';
|
import 'package:stadtbote/popups/infos_popup.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/device_log_response.dart';
|
|
||||||
import 'package:stadtbote/protocoll_messages/logout_message.dart';
|
import 'package:stadtbote/protocoll_messages/logout_message.dart';
|
||||||
import 'package:stadtbote/tools/message_service.dart';
|
import 'package:stadtbote/tools/message_service.dart';
|
||||||
import 'package:stadtbote/tools/messages/job_deleted_message.dart';
|
import 'package:stadtbote/tools/messages/job_deleted_message.dart';
|
||||||
@@ -25,7 +23,7 @@ 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 'package:stadtbote/tools/messages/status_info_update.dart';
|
||||||
import 'package:stadtbote/tools/messages/update_badges_message.dart';
|
import 'package:stadtbote/tools/messages/refresh_badges_message.dart';
|
||||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
import 'package:stadtbote/tools/mqtt_core.dart';
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
@@ -237,11 +235,7 @@ class _MainPageState extends State<MainPage> {
|
|||||||
_loggedOut ? 'Anmelden' : 'Abmelden',
|
_loggedOut ? 'Anmelden' : 'Abmelden',
|
||||||
image: Image.asset(_loggedOut ? 'assets/anmelden.png' : 'assets/abmelden.png', width: 30, height: 30),
|
image: Image.asset(_loggedOut ? 'assets/anmelden.png' : 'assets/abmelden.png', width: 30, height: 30),
|
||||||
() async {
|
() async {
|
||||||
if (!kDebugMode) {
|
_logout(context);
|
||||||
_logout(context);
|
|
||||||
} else {
|
|
||||||
_test();
|
|
||||||
}
|
|
||||||
}),
|
}),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Container(
|
child: Container(
|
||||||
@@ -287,7 +281,7 @@ class _MainPageState extends State<MainPage> {
|
|||||||
_refreshBadges();
|
_refreshBadges();
|
||||||
});
|
});
|
||||||
|
|
||||||
MessageService().subscribe<UpdateBadgesMessage>(Constants.messageTopicUpdateBadges, this, (UpdateBadgesMessage message) {
|
MessageService().subscribe<RefreshBadgesMessage>(Constants.messageTopicRefreshBadges, this, (RefreshBadgesMessage message) {
|
||||||
_refreshBadges();
|
_refreshBadges();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -380,10 +374,10 @@ class _MainPageState extends State<MainPage> {
|
|||||||
|
|
||||||
var logoutMessage = LogoutMessage();
|
var logoutMessage = LogoutMessage();
|
||||||
if (position != null) {
|
if (position != null) {
|
||||||
logoutMessage.time = position.timestamp.toIso8601String();
|
logoutMessage.pos!.time = position.timestamp.toIso8601String();
|
||||||
logoutMessage.lat = position.latitude;
|
logoutMessage.pos!.lat = position.latitude;
|
||||||
logoutMessage.long = position.longitude;
|
logoutMessage.pos!.long = position.longitude;
|
||||||
logoutMessage.acc = position.accuracy.toInt();
|
logoutMessage.pos!.acc = position.accuracy.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
MqttCore.instance.publishText("session", jsonEncode(logoutMessage.toJson()));
|
MqttCore.instance.publishText("session", jsonEncode(logoutMessage.toJson()));
|
||||||
|
|||||||
@@ -109,8 +109,6 @@ class _MessagesPageState extends State<MessagesPage> {
|
|||||||
await MyApp.isarInstance.messages.put(message.mssg);
|
await MyApp.isarInstance.messages.put(message.mssg);
|
||||||
});
|
});
|
||||||
|
|
||||||
var json = jsonEncode(message.toJson());
|
|
||||||
|
|
||||||
MqttCore.instance.publishText('set_location', jsonEncode(message.toJson()));
|
MqttCore.instance.publishText('set_location', jsonEncode(message.toJson()));
|
||||||
|
|
||||||
_messages.insert(0, types.TextMessage(
|
_messages.insert(0, types.TextMessage(
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import 'package:stadtbote/popups/tasks_popups/take_photos_popup.dart';
|
|||||||
import 'package:stadtbote/protocoll_messages/accept_job_message.dart';
|
import 'package:stadtbote/protocoll_messages/accept_job_message.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/fin_task_message.dart';
|
import 'package:stadtbote/protocoll_messages/fin_task_message.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/fin_tour_message.dart';
|
import 'package:stadtbote/protocoll_messages/fin_tour_message.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/pic_message.dart';
|
|
||||||
import 'package:stadtbote/tools/constants.dart';
|
import 'package:stadtbote/tools/constants.dart';
|
||||||
import 'package:stadtbote/tools/message_service.dart';
|
import 'package:stadtbote/tools/message_service.dart';
|
||||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
import 'package:stadtbote/tools/mqtt_core.dart';
|
||||||
@@ -145,7 +144,7 @@ class _TaskListPageState extends State<TaskListPage> {
|
|||||||
left: 16.5,
|
left: 16.5,
|
||||||
top: i == 0 ? 40 : 40,
|
top: i == 0 ? 40 : 40,
|
||||||
child: Container(
|
child: Container(
|
||||||
height: i == widget.tour.tasks.length - 1 ? 0 : 20,
|
height: i == widget.tour.tasks!.length - 1 ? 0 : 20,
|
||||||
width: 6,
|
width: 6,
|
||||||
color: isTaskActive(i) ? Constants.colorPrimary : Constants.colorPrimaryOpaque,
|
color: isTaskActive(i) ? Constants.colorPrimary : Constants.colorPrimaryOpaque,
|
||||||
),
|
),
|
||||||
@@ -211,7 +210,7 @@ class _TaskListPageState extends State<TaskListPage> {
|
|||||||
Future<List<TaskInfo>> _fetchTaskList() async {
|
Future<List<TaskInfo>> _fetchTaskList() async {
|
||||||
List<TaskInfo> taskList = [];
|
List<TaskInfo> taskList = [];
|
||||||
|
|
||||||
for(var task in widget.tour.tasks) {
|
for(var task in widget.tour.tasks!) {
|
||||||
var taskInfo = await MyApp.isarInstance.taskInfos.filter().sIdEqualTo(task.sId).findFirst();
|
var taskInfo = await MyApp.isarInstance.taskInfos.filter().sIdEqualTo(task.sId).findFirst();
|
||||||
if (taskInfo == null) {
|
if (taskInfo == null) {
|
||||||
taskInfo = TaskInfo();
|
taskInfo = TaskInfo();
|
||||||
@@ -445,7 +444,7 @@ class _TaskListPageState extends State<TaskListPage> {
|
|||||||
message.task.pos!.long = position.longitude;
|
message.task.pos!.long = position.longitude;
|
||||||
}
|
}
|
||||||
|
|
||||||
MqttCore.instance.publishPayloadMessage("job", finTaskMessage.toJson());
|
MqttCore.instance.publishText("job", jsonEncode(message.toJson()));
|
||||||
}
|
}
|
||||||
|
|
||||||
FinTourTask _createAnswerHeader(TaskInfo taskInfo) {
|
FinTourTask _createAnswerHeader(TaskInfo taskInfo) {
|
||||||
@@ -456,9 +455,9 @@ class _TaskListPageState extends State<TaskListPage> {
|
|||||||
finTourTask.time = DateTime.now().toIso8601String();
|
finTourTask.time = DateTime.now().toIso8601String();
|
||||||
finTourTask.pos = FinTaskPos();
|
finTourTask.pos = FinTaskPos();
|
||||||
if (position != null) {
|
if (position != null) {
|
||||||
finTourTask.pos.lat = position.latitude;
|
finTourTask.pos!.lat = position.latitude;
|
||||||
finTourTask.pos.long = position.longitude;
|
finTourTask.pos!.long = position.longitude;
|
||||||
finTourTask.pos.acc = position.accuracy.toInt();
|
finTourTask.pos!.acc = position.accuracy.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
return finTourTask;
|
return finTourTask;
|
||||||
@@ -472,10 +471,10 @@ class _TaskListPageState extends State<TaskListPage> {
|
|||||||
var position = MyApp.currentPosition;
|
var position = MyApp.currentPosition;
|
||||||
if (position != null) {
|
if (position != null) {
|
||||||
message.track = Track();
|
message.track = Track();
|
||||||
message.track.time = DateTime.now().toIso8601String();
|
message.track!.time = DateTime.now().toIso8601String();
|
||||||
message.track.pos = FinTaskPos();
|
message.track!.pos = FinTaskPos();
|
||||||
message.track.pos.lat = position.latitude;
|
message.track!.pos!.lat = position.latitude;
|
||||||
message.track.pos.long = position.longitude;
|
message.track!.pos!.long = position.longitude;
|
||||||
}
|
}
|
||||||
|
|
||||||
message.tasks = [];
|
message.tasks = [];
|
||||||
|
|||||||
+2
-4
@@ -8,7 +8,6 @@ import 'package:stadtbote/messages/pop_content_view_message.dart';
|
|||||||
import 'package:stadtbote/model/enqueued_message.dart';
|
import 'package:stadtbote/model/enqueued_message.dart';
|
||||||
import 'package:stadtbote/model/log_entry.dart';
|
import 'package:stadtbote/model/log_entry.dart';
|
||||||
import 'package:stadtbote/model/message.dart';
|
import 'package:stadtbote/model/message.dart';
|
||||||
import 'package:stadtbote/model/ranking.dart';
|
|
||||||
import 'package:stadtbote/model/status.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';
|
||||||
@@ -17,7 +16,7 @@ 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';
|
||||||
import 'package:stadtbote/tools/messages/update_badges_message.dart';
|
import 'package:stadtbote/tools/messages/refresh_badges_message.dart';
|
||||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
import 'package:stadtbote/tools/mqtt_core.dart';
|
||||||
|
|
||||||
import 'content_views/main_page.dart';
|
import 'content_views/main_page.dart';
|
||||||
@@ -37,7 +36,6 @@ Future<void> main() async {
|
|||||||
JobSchema,
|
JobSchema,
|
||||||
TaskInfoSchema,
|
TaskInfoSchema,
|
||||||
MessageSchema,
|
MessageSchema,
|
||||||
RankingSchema,
|
|
||||||
EnqueuedMessageSchema,
|
EnqueuedMessageSchema,
|
||||||
LogEntrySchema
|
LogEntrySchema
|
||||||
], directory: dir.path);
|
], directory: dir.path);
|
||||||
@@ -434,7 +432,7 @@ class _MainState extends State<Main> with SingleTickerProviderStateMixin {
|
|||||||
await showAcceptJobsPopup(context, await MyApp.isarInstance.jobs.filter().stateEqualTo(0).findAll(), () {
|
await showAcceptJobsPopup(context, await MyApp.isarInstance.jobs.filter().stateEqualTo(0).findAll(), () {
|
||||||
_dialogOpened = false;
|
_dialogOpened = false;
|
||||||
|
|
||||||
MessageService().publish(Constants.messageTopicUpdateBadges, arguments: UpdateBadgesMessage());
|
MessageService().publish(Constants.messageTopicRefreshBadges, arguments: RefreshBadgesMessage());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ class JobsPayload {
|
|||||||
class Job {
|
class Job {
|
||||||
late Id id;
|
late Id id;
|
||||||
@JsonKey(name: 'ver')
|
@JsonKey(name: 'ver')
|
||||||
late String ver;
|
late int ver;
|
||||||
@JsonKey(name: 'state')
|
@JsonKey(name: 'state')
|
||||||
late int state;
|
late int state;
|
||||||
@JsonKey(name: 'cr_filter')
|
@JsonKey(name: 'cr_filter')
|
||||||
|
|||||||
+13
-90
@@ -56,7 +56,7 @@ const JobSchema = CollectionSchema(
|
|||||||
r'ver': PropertySchema(
|
r'ver': PropertySchema(
|
||||||
id: 7,
|
id: 7,
|
||||||
name: r'ver',
|
name: r'ver',
|
||||||
type: IsarType.string,
|
type: IsarType.long,
|
||||||
),
|
),
|
||||||
r'vhtId': PropertySchema(
|
r'vhtId': PropertySchema(
|
||||||
id: 8,
|
id: 8,
|
||||||
@@ -105,7 +105,6 @@ int _jobEstimateSize(
|
|||||||
bytesCount += JobTourSchema.estimateSize(value, offsets, allOffsets);
|
bytesCount += JobTourSchema.estimateSize(value, offsets, allOffsets);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bytesCount += 3 + object.ver.length * 3;
|
|
||||||
return bytesCount;
|
return bytesCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,7 +126,7 @@ void _jobSerialize(
|
|||||||
JobTourSchema.serialize,
|
JobTourSchema.serialize,
|
||||||
object.tours,
|
object.tours,
|
||||||
);
|
);
|
||||||
writer.writeString(offsets[7], object.ver);
|
writer.writeLong(offsets[7], object.ver);
|
||||||
writer.writeLong(offsets[8], object.vhtId);
|
writer.writeLong(offsets[8], object.vhtId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,7 +151,7 @@ Job _jobDeserialize(
|
|||||||
JobTour(),
|
JobTour(),
|
||||||
) ??
|
) ??
|
||||||
[];
|
[];
|
||||||
object.ver = reader.readString(offsets[7]);
|
object.ver = reader.readLong(offsets[7]);
|
||||||
object.vhtId = reader.readLong(offsets[8]);
|
object.vhtId = reader.readLong(offsets[8]);
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
@@ -185,7 +184,7 @@ P _jobDeserializeProp<P>(
|
|||||||
) ??
|
) ??
|
||||||
[]) as P;
|
[]) as P;
|
||||||
case 7:
|
case 7:
|
||||||
return (reader.readString(offset)) as P;
|
return (reader.readLong(offset)) as P;
|
||||||
case 8:
|
case 8:
|
||||||
return (reader.readLong(offset)) as P;
|
return (reader.readLong(offset)) as P;
|
||||||
default:
|
default:
|
||||||
@@ -929,55 +928,46 @@ extension JobQueryFilter on QueryBuilder<Job, Job, QFilterCondition> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verEqualTo(
|
QueryBuilder<Job, Job, QAfterFilterCondition> verEqualTo(int value) {
|
||||||
String value, {
|
|
||||||
bool caseSensitive = true,
|
|
||||||
}) {
|
|
||||||
return QueryBuilder.apply(this, (query) {
|
return QueryBuilder.apply(this, (query) {
|
||||||
return query.addFilterCondition(FilterCondition.equalTo(
|
return query.addFilterCondition(FilterCondition.equalTo(
|
||||||
property: r'ver',
|
property: r'ver',
|
||||||
value: value,
|
value: value,
|
||||||
caseSensitive: caseSensitive,
|
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verGreaterThan(
|
QueryBuilder<Job, Job, QAfterFilterCondition> verGreaterThan(
|
||||||
String value, {
|
int value, {
|
||||||
bool include = false,
|
bool include = false,
|
||||||
bool caseSensitive = true,
|
|
||||||
}) {
|
}) {
|
||||||
return QueryBuilder.apply(this, (query) {
|
return QueryBuilder.apply(this, (query) {
|
||||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||||
include: include,
|
include: include,
|
||||||
property: r'ver',
|
property: r'ver',
|
||||||
value: value,
|
value: value,
|
||||||
caseSensitive: caseSensitive,
|
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verLessThan(
|
QueryBuilder<Job, Job, QAfterFilterCondition> verLessThan(
|
||||||
String value, {
|
int value, {
|
||||||
bool include = false,
|
bool include = false,
|
||||||
bool caseSensitive = true,
|
|
||||||
}) {
|
}) {
|
||||||
return QueryBuilder.apply(this, (query) {
|
return QueryBuilder.apply(this, (query) {
|
||||||
return query.addFilterCondition(FilterCondition.lessThan(
|
return query.addFilterCondition(FilterCondition.lessThan(
|
||||||
include: include,
|
include: include,
|
||||||
property: r'ver',
|
property: r'ver',
|
||||||
value: value,
|
value: value,
|
||||||
caseSensitive: caseSensitive,
|
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verBetween(
|
QueryBuilder<Job, Job, QAfterFilterCondition> verBetween(
|
||||||
String lower,
|
int lower,
|
||||||
String upper, {
|
int upper, {
|
||||||
bool includeLower = true,
|
bool includeLower = true,
|
||||||
bool includeUpper = true,
|
bool includeUpper = true,
|
||||||
bool caseSensitive = true,
|
|
||||||
}) {
|
}) {
|
||||||
return QueryBuilder.apply(this, (query) {
|
return QueryBuilder.apply(this, (query) {
|
||||||
return query.addFilterCondition(FilterCondition.between(
|
return query.addFilterCondition(FilterCondition.between(
|
||||||
@@ -986,73 +976,6 @@ extension JobQueryFilter on QueryBuilder<Job, Job, QFilterCondition> {
|
|||||||
includeLower: includeLower,
|
includeLower: includeLower,
|
||||||
upper: upper,
|
upper: upper,
|
||||||
includeUpper: includeUpper,
|
includeUpper: includeUpper,
|
||||||
caseSensitive: caseSensitive,
|
|
||||||
));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verStartsWith(
|
|
||||||
String value, {
|
|
||||||
bool caseSensitive = true,
|
|
||||||
}) {
|
|
||||||
return QueryBuilder.apply(this, (query) {
|
|
||||||
return query.addFilterCondition(FilterCondition.startsWith(
|
|
||||||
property: r'ver',
|
|
||||||
value: value,
|
|
||||||
caseSensitive: caseSensitive,
|
|
||||||
));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verEndsWith(
|
|
||||||
String value, {
|
|
||||||
bool caseSensitive = true,
|
|
||||||
}) {
|
|
||||||
return QueryBuilder.apply(this, (query) {
|
|
||||||
return query.addFilterCondition(FilterCondition.endsWith(
|
|
||||||
property: r'ver',
|
|
||||||
value: value,
|
|
||||||
caseSensitive: caseSensitive,
|
|
||||||
));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verContains(String value,
|
|
||||||
{bool caseSensitive = true}) {
|
|
||||||
return QueryBuilder.apply(this, (query) {
|
|
||||||
return query.addFilterCondition(FilterCondition.contains(
|
|
||||||
property: r'ver',
|
|
||||||
value: value,
|
|
||||||
caseSensitive: caseSensitive,
|
|
||||||
));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verMatches(String pattern,
|
|
||||||
{bool caseSensitive = true}) {
|
|
||||||
return QueryBuilder.apply(this, (query) {
|
|
||||||
return query.addFilterCondition(FilterCondition.matches(
|
|
||||||
property: r'ver',
|
|
||||||
wildcard: pattern,
|
|
||||||
caseSensitive: caseSensitive,
|
|
||||||
));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verIsEmpty() {
|
|
||||||
return QueryBuilder.apply(this, (query) {
|
|
||||||
return query.addFilterCondition(FilterCondition.equalTo(
|
|
||||||
property: r'ver',
|
|
||||||
value: '',
|
|
||||||
));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QAfterFilterCondition> verIsNotEmpty() {
|
|
||||||
return QueryBuilder.apply(this, (query) {
|
|
||||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
|
||||||
property: r'ver',
|
|
||||||
value: '',
|
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1368,9 +1291,9 @@ extension JobQueryWhereDistinct on QueryBuilder<Job, Job, QDistinct> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryBuilder<Job, Job, QDistinct> distinctByVer({bool caseSensitive = true}) {
|
QueryBuilder<Job, Job, QDistinct> distinctByVer() {
|
||||||
return QueryBuilder.apply(this, (query) {
|
return QueryBuilder.apply(this, (query) {
|
||||||
return query.addDistinctBy(r'ver', caseSensitive: caseSensitive);
|
return query.addDistinctBy(r'ver');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1430,7 +1353,7 @@ extension JobQueryProperty on QueryBuilder<Job, Job, QQueryProperty> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryBuilder<Job, String, QQueryOperations> verProperty() {
|
QueryBuilder<Job, int, QQueryOperations> verProperty() {
|
||||||
return QueryBuilder.apply(this, (query) {
|
return QueryBuilder.apply(this, (query) {
|
||||||
return query.addPropertyName(r'ver');
|
return query.addPropertyName(r'ver');
|
||||||
});
|
});
|
||||||
@@ -1460,7 +1383,7 @@ Map<String, dynamic> _$JobsPayloadToJson(JobsPayload instance) =>
|
|||||||
|
|
||||||
Job _$JobFromJson(Map<String, dynamic> json) => Job()
|
Job _$JobFromJson(Map<String, dynamic> json) => Job()
|
||||||
..id = json['id'] as int
|
..id = json['id'] as int
|
||||||
..ver = json['ver'] as String
|
..ver = json['ver'] as int
|
||||||
..state = json['state'] as int
|
..state = json['state'] as int
|
||||||
..crFilter = json['cr_filter'] as String?
|
..crFilter = json['cr_filter'] as String?
|
||||||
..ordertime = json['ordertime'] as String
|
..ordertime = json['ordertime'] as String
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:expandable/expandable.dart';
|
import 'package:expandable/expandable.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
@@ -6,11 +8,15 @@ import 'package:stadtbote/protocoll_messages/accept_job_message.dart';
|
|||||||
import 'package:stadtbote/model/job.dart';
|
import 'package:stadtbote/model/job.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/fin_task_message.dart';
|
import 'package:stadtbote/protocoll_messages/fin_task_message.dart';
|
||||||
import 'package:stadtbote/tools/constants.dart';
|
import 'package:stadtbote/tools/constants.dart';
|
||||||
|
import 'package:stadtbote/tools/message_service.dart';
|
||||||
|
import 'package:stadtbote/tools/messages/job_deleted_message.dart';
|
||||||
|
import 'package:stadtbote/tools/messages/job_received_message.dart';
|
||||||
|
import 'package:stadtbote/tools/messages/refresh_badges_message.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';
|
||||||
import 'package:badges/badges.dart' as badges;
|
import 'package:badges/badges.dart' as badges;
|
||||||
|
|
||||||
Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs, Function() onFinished) async {
|
||||||
var jobsSet = jobs.toSet();
|
var jobsSet = jobs.toSet();
|
||||||
|
|
||||||
await showDialog<void>(
|
await showDialog<void>(
|
||||||
@@ -18,8 +24,8 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
|||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return WillPopScope(
|
return WillPopScope(
|
||||||
onWillPop: () async {
|
onWillPop: () async {
|
||||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsMap);
|
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsSet);
|
||||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsMap);
|
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsSet);
|
||||||
|
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
|
|
||||||
@@ -32,29 +38,27 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
|||||||
shadowColor: Colors.transparent,
|
shadowColor: Colors.transparent,
|
||||||
backgroundColor: Colors.white,
|
backgroundColor: Colors.white,
|
||||||
content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
|
content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
|
||||||
if (jobsMap.isEmpty) {
|
if (jobsSet.isEmpty) {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
|
|
||||||
onFinished();
|
onFinished();
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsMap);
|
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsSet);
|
||||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsMap);
|
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsSet);
|
||||||
|
|
||||||
MessageService().subscribe<JobDeletedMessage>(Constants.messageTopicJobDeleted, jobsMap, (jobDeletedMessage) async {
|
MessageService().subscribe<JobDeletedMessage>(Constants.messageTopicJobDeleted, jobsSet, (jobDeletedMessage) async {
|
||||||
jobsMap.removeWhere((key, value) => key == jobDeletedMessage.jobId);
|
jobsSet.removeWhere((value) => value.id == jobDeletedMessage.id);
|
||||||
|
|
||||||
if (context.mounted) {
|
if (context.mounted) {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, jobsMap, (jobdMessage) async {
|
MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, jobsSet, (jobdMessage) async {
|
||||||
if (jobsMap.containsKey(jobdMessage.job.id)) {
|
jobsSet.removeWhere((value) => value.id == jobdMessage.job.id);
|
||||||
jobsMap.removeWhere((key, value) => key == jobdMessage.job.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
jobsMap[jobdMessage.job.id] = jobdMessage.job;
|
jobsSet.add(jobdMessage.job);
|
||||||
|
|
||||||
if (context.mounted) {
|
if (context.mounted) {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
@@ -69,15 +73,9 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
|||||||
height: 100,
|
height: 100,
|
||||||
padding: const EdgeInsets.all(5),
|
padding: const EdgeInsets.all(5),
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
itemCount: jobsMap.length,
|
itemCount: jobsSet.length,
|
||||||
itemBuilder: (_, i) {
|
itemBuilder: (_, i) {
|
||||||
var job = jobsMap.values.toList()[i];
|
var job = jobsSet.toList()[i];
|
||||||
|
|
||||||
String remarkString = '';
|
|
||||||
for (var remark in job.rem) {
|
|
||||||
remarkString += '$remark\n';
|
|
||||||
}
|
|
||||||
remarkString = remarkString.trim();
|
|
||||||
|
|
||||||
return ExpandableNotifier(
|
return ExpandableNotifier(
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
@@ -161,7 +159,7 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
|||||||
),
|
),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: Text(remarkString),
|
child: Text(job.rem),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -175,7 +173,7 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
|||||||
() {
|
() {
|
||||||
_sendAnswer(job, !job.global ? 2 : 3);
|
_sendAnswer(job, !job.global ? 2 : 3);
|
||||||
|
|
||||||
jobsMap.removeWhere((key, value) => key == job.id);
|
jobsSet.removeWhere((value) => value.id == job.id);
|
||||||
|
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}),
|
}),
|
||||||
@@ -185,7 +183,7 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
|||||||
child: getDefaultButton('Annehmen', () {
|
child: getDefaultButton('Annehmen', () {
|
||||||
_sendAnswer(job, 1);
|
_sendAnswer(job, 1);
|
||||||
|
|
||||||
jobsMap.removeWhere((key, value) => key == job.id);
|
jobsSet.removeWhere((value) => value.id == job.id);
|
||||||
|
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}),
|
}),
|
||||||
@@ -215,9 +213,9 @@ _sendAnswer(Job job, int item) {
|
|||||||
message.track = Track();
|
message.track = Track();
|
||||||
message.track.time = DateTime.now().toUtc().toIso8601String();
|
message.track.time = DateTime.now().toUtc().toIso8601String();
|
||||||
message.track.pos = FinTaskPos();
|
message.track.pos = FinTaskPos();
|
||||||
message.track.pos.lat = currentPosition != null ? currentPosition.latitude : 0.0;
|
message.track.pos!.lat = currentPosition != null ? currentPosition.latitude : 0.0;
|
||||||
message.track.pos.long = currentPosition != null ? currentPosition.longitude : 0.0;
|
message.track.pos!.long = currentPosition != null ? currentPosition.longitude : 0.0;
|
||||||
message.track.pos.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
|
message.track.pos!.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
|
||||||
|
|
||||||
MqttCore.instance.publishText("reaction", jsonEncode(message.toJson()));
|
MqttCore.instance.publishText("reaction", jsonEncode(message.toJson()));
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:isar/isar.dart';
|
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
part 'acknowledge_job.g.dart';
|
part 'acknowledge_job.g.dart';
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/bootstrap_response_config.dart';
|
|
||||||
|
|
||||||
part 'bootstrap_response_payload.g.dart';
|
part 'bootstrap_response_payload.g.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,27 @@ part of 'logout_message.dart';
|
|||||||
|
|
||||||
LogoutMessage _$LogoutMessageFromJson(Map<String, dynamic> json) =>
|
LogoutMessage _$LogoutMessageFromJson(Map<String, dynamic> json) =>
|
||||||
LogoutMessage()
|
LogoutMessage()
|
||||||
|
..logout = json['logout'] as bool
|
||||||
|
..pos = json['pos'] == null
|
||||||
|
? null
|
||||||
|
: LogoutMessagePosition.fromJson(json['pos'] as Map<String, dynamic>);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$LogoutMessageToJson(LogoutMessage instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'logout': instance.logout,
|
||||||
|
'pos': instance.pos,
|
||||||
|
};
|
||||||
|
|
||||||
|
LogoutMessagePosition _$LogoutMessagePositionFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
LogoutMessagePosition()
|
||||||
..time = json['time'] as String
|
..time = json['time'] as String
|
||||||
..lat = (json['lat'] as num).toDouble()
|
..lat = (json['lat'] as num).toDouble()
|
||||||
..long = (json['long'] as num).toDouble()
|
..long = (json['long'] as num).toDouble()
|
||||||
..acc = json['acc'] as int;
|
..acc = json['acc'] as int;
|
||||||
|
|
||||||
Map<String, dynamic> _$LogoutMessageToJson(LogoutMessage instance) =>
|
Map<String, dynamic> _$LogoutMessagePositionToJson(
|
||||||
|
LogoutMessagePosition instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'time': instance.time,
|
'time': instance.time,
|
||||||
'lat': instance.lat,
|
'lat': instance.lat,
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import 'package:isar/isar.dart';
|
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
import 'package:stadtbote/tools/util.dart';
|
|
||||||
|
|
||||||
part 'start_session_message.g.dart';
|
part 'start_session_message.g.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class Constants {
|
|||||||
static const String messageTopicRankingUpdated = "ranking_updated";
|
static const String messageTopicRankingUpdated = "ranking_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 messageTopicUpdateBadges = "update_badges";
|
static const String messageTopicRefreshBadges = "refresh_badges";
|
||||||
static const String messageTopicMessageReceived = "message_received";
|
static const String messageTopicMessageReceived = "message_received";
|
||||||
static const String messageTopicPushContentView = "push_content_view";
|
static const String messageTopicPushContentView = "push_content_view";
|
||||||
static const String messageTopicPopContentView = "pop_content_view";
|
static const String messageTopicPopContentView = "pop_content_view";
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
class UpdateBadgesMessage {
|
|
||||||
UpdateBadgesMessage();
|
|
||||||
}
|
|
||||||
+43
-35
@@ -9,7 +9,6 @@ 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/enqueued_message.dart';
|
import 'package:stadtbote/model/enqueued_message.dart';
|
||||||
import 'package:stadtbote/model/log_entry.dart';
|
import 'package:stadtbote/model/log_entry.dart';
|
||||||
import 'package:stadtbote/model/ranking.dart';
|
|
||||||
import 'package:stadtbote/model/status.dart';
|
import 'package:stadtbote/model/status.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/acknowledge_job.dart';
|
import 'package:stadtbote/protocoll_messages/acknowledge_job.dart';
|
||||||
import 'package:stadtbote/protocoll_messages/bootstrap_request.dart';
|
import 'package:stadtbote/protocoll_messages/bootstrap_request.dart';
|
||||||
@@ -28,7 +27,6 @@ import 'package:stadtbote/tools/message_service.dart';
|
|||||||
import 'package:stadtbote/tools/messages/job_deleted_message.dart';
|
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/ranking_updated.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';
|
import 'package:stadtbote/tools/messages/status_info_update.dart';
|
||||||
// ignore: depend_on_referenced_packages
|
// ignore: depend_on_referenced_packages
|
||||||
@@ -269,7 +267,7 @@ class MqttCore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _rankingMessageReceived(List<dynamic> payloadData) async {
|
void _rankingMessageReceived(List<dynamic> payloadData) async {
|
||||||
Map<String, dynamic> rankingMap = {};
|
/*Map<String, dynamic> rankingMap = {};
|
||||||
rankingMap["ranks"] = payloadData;
|
rankingMap["ranks"] = payloadData;
|
||||||
var ranking = Ranking.fromJson(rankingMap);
|
var ranking = Ranking.fromJson(rankingMap);
|
||||||
|
|
||||||
@@ -277,7 +275,7 @@ class MqttCore {
|
|||||||
await MyApp.isarInstance.rankings.put(ranking);
|
await MyApp.isarInstance.rankings.put(ranking);
|
||||||
});
|
});
|
||||||
|
|
||||||
MessageService().publish<RankingUpdated>(Constants.messageTopicRankingUpdated, arguments: RankingUpdated());
|
MessageService().publish<RankingUpdated>(Constants.messageTopicRankingUpdated, arguments: RankingUpdated());*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void _jobMessageReceived(payloadData) async {
|
void _jobMessageReceived(payloadData) async {
|
||||||
@@ -306,17 +304,14 @@ class MqttCore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _jobDeleteReceived(List<dynamic> payloadData) async {
|
void _jobDeleteReceived(payloadData) async {
|
||||||
Map<String, dynamic> map = {};
|
for(var jobId in payloadData) {
|
||||||
map["jobDel"] = payloadData;
|
|
||||||
var jobDelMessage = JobDelMessage.fromJson(map);
|
|
||||||
|
|
||||||
for(var jobId in jobDelMessage.jobDel) {
|
|
||||||
await MyApp.isarInstance.writeTxn(() async {
|
await MyApp.isarInstance.writeTxn(() async {
|
||||||
await MyApp.isarInstance.jobs.delete(jobId);
|
await MyApp.isarInstance.jobs.delete(jobId);
|
||||||
});
|
});
|
||||||
|
|
||||||
MessageService().publish<JobDeletedMessage>(Constants.messageTopicJobDeleted, arguments: JobDeletedMessage(id: jobDelMessage.id));
|
MessageService().publish<JobDeletedMessage>(Constants.messageTopicJobDeleted, arguments: JobDeletedMessage(id: jobId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _syncRequestReceived(payloadData) async {
|
void _syncRequestReceived(payloadData) async {
|
||||||
@@ -325,7 +320,7 @@ class MqttCore {
|
|||||||
_sendSyncMessage();
|
_sendSyncMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _messageMessageReceived(payloadData) async {
|
void _messageMessageReceived(Map<String, dynamic> payloadData) async {
|
||||||
var newMessage = await Message.mergeFromJson(payloadData);
|
var newMessage = await Message.mergeFromJson(payloadData);
|
||||||
|
|
||||||
await MyApp.isarInstance.writeTxn(() async {
|
await MyApp.isarInstance.writeTxn(() async {
|
||||||
@@ -337,6 +332,22 @@ class MqttCore {
|
|||||||
MessageService().publish<MessageReceivedMessage>(Constants.messageTopicMessageReceived, arguments: MessageReceivedMessage(message: newMessage));
|
MessageService().publish<MessageReceivedMessage>(Constants.messageTopicMessageReceived, arguments: MessageReceivedMessage(message: newMessage));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _messageUploadDeviceLogReceived(payloadData) async {
|
||||||
|
var deviceLogRequest = DeviceLogRequest.fromJson(payloadData);
|
||||||
|
|
||||||
|
var logEintries = await MyApp.isarInstance.logEntrys.filter().timeGreaterThan(deviceLogRequest.startDateTime).findAll();
|
||||||
|
|
||||||
|
var deviceLog = DeviceLogResponse();
|
||||||
|
deviceLog.entries = logEintries;
|
||||||
|
|
||||||
|
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() {
|
void _startReconnectTimer() {
|
||||||
connectionState = ConnectionStateEnum.notConnected;
|
connectionState = ConnectionStateEnum.notConnected;
|
||||||
|
|
||||||
@@ -390,24 +401,21 @@ class MqttCore {
|
|||||||
handshakeMessage.deviceObject = deviceObject;
|
handshakeMessage.deviceObject = deviceObject;
|
||||||
handshakeMessage.ver = await Util.getAppVersion();
|
handshakeMessage.ver = await Util.getAppVersion();
|
||||||
|
|
||||||
//var jsonMap = handshakeMessage.toJson();
|
var jsonMap = handshakeMessage.toJson();
|
||||||
//var json = jsonEncode(jsonMap);
|
var json = jsonEncode(jsonMap);
|
||||||
var uri = "http://test-app-server.dns.army:8080/bootstrap";
|
var uri = "https://init-x.assecutor.de/bootstrap?get_mqtt_broker=$json";
|
||||||
Util.logInfo("Bootstrap request: $uri");
|
Util.logInfo("Bootstrap request: $uri");
|
||||||
|
|
||||||
var response = await http.get(Uri.parse(uri));
|
var response = await http.get(Uri.parse(uri));
|
||||||
responseText = response.body;
|
var responseText = response.body;
|
||||||
|
|
||||||
Util.logInfo("Bootstrap response: $responseText");
|
var bootstrapResponsePayload = BootstrapResponse.fromJson(jsonDecode(responseText)["payload"]);
|
||||||
|
|
||||||
var bootstrapResponse = BootstrapResponse.fromJson(jsonDecode(responseText));
|
var brokerUriAndPortArray = bootstrapResponsePayload.broker.replaceFirst("mqtt://", "").split(":");
|
||||||
|
|
||||||
var brokerUriAndPortArray = bootstrapResponse.broker.replaceFirst("mqtt://", "").split(":");
|
|
||||||
_brokerUri = brokerUriAndPortArray[0];
|
_brokerUri = brokerUriAndPortArray[0];
|
||||||
_brokerPort = int.parse(brokerUriAndPortArray[1]);
|
_brokerPort = int.parse(brokerUriAndPortArray[1]);
|
||||||
_clientId = bootstrapResponse.id;
|
_fromServerTopic = bootstrapResponsePayload.fromServer;
|
||||||
_fromServerTopic = bootstrapResponse.fromServer;
|
_toServerTopic = bootstrapResponsePayload.toServer;
|
||||||
_toServerTopic = bootstrapResponse.toServer;
|
|
||||||
|
|
||||||
_connectToBroker();
|
_connectToBroker();
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
@@ -438,23 +446,23 @@ class MqttCore {
|
|||||||
answer.sync.jobs.add(syncJob);
|
answer.sync.jobs.add(syncJob);
|
||||||
}
|
}
|
||||||
|
|
||||||
MqttCore.instance.publishText("sync", jsonEncode(answer.toJson()));
|
MqttCore.instance.publishPayloadMessage("server", answer.toJson());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _startTrackTimer() {
|
void _startTrackTimer() {
|
||||||
_trackTimer ??= Timer.periodic(const Duration(seconds: 60), (Timer t) {
|
_trackTimer ??= Timer.periodic(const Duration(seconds: 60), (Timer t) {
|
||||||
var answer = MyApp.currentPosition;
|
var position = MyApp.currentPosition;
|
||||||
if (answer != null) {
|
if (position != null) {
|
||||||
var trackMessage = TrackMessage();
|
var trackMessage = TrackMessage();
|
||||||
trackMessage.pos = TrackPosition();
|
trackMessage.pos = TrackPosition();
|
||||||
trackMessage.pos!.time = position.timestamp.toIso8601String();
|
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();
|
||||||
|
|
||||||
publishPayloadMessage("track", trackMessage.toJson());
|
publishPayloadMessage("track", trackMessage.toJson());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _cancelTrackTimer() {
|
void _cancelTrackTimer() {
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ import 'package:audioplayers/audioplayers.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:package_info/package_info.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:stadtbote/main.dart';
|
import 'package:stadtbote/main.dart';
|
||||||
import 'package:stadtbote/model/job.dart';
|
import 'package:stadtbote/model/job.dart';
|
||||||
|
|||||||
@@ -305,6 +305,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.0"
|
||||||
|
device_info_plus:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: device_info_plus
|
||||||
|
sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "9.1.2"
|
||||||
|
device_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: device_info_plus_platform_interface
|
||||||
|
sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.0"
|
||||||
diffutil_dart:
|
diffutil_dart:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -912,6 +928,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.0"
|
||||||
|
package_info_plus:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: package_info_plus
|
||||||
|
sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.0.1"
|
||||||
|
package_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_platform_interface
|
||||||
|
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.1"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1469,6 +1501,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.2.0"
|
version: "5.2.0"
|
||||||
|
win32_registry:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: win32_registry
|
||||||
|
sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.2"
|
||||||
wkt_parser:
|
wkt_parser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
+3
-1
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 5.0.0+1
|
version: 300.0.0+300
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.19.6 <3.0.0'
|
sdk: '>=2.19.6 <3.0.0'
|
||||||
@@ -68,6 +68,8 @@ dependencies:
|
|||||||
url_launcher: ^6.2.4
|
url_launcher: ^6.2.4
|
||||||
audioplayers: ^5.2.1
|
audioplayers: ^5.2.1
|
||||||
flutter_launcher_icons: ^0.13.1
|
flutter_launcher_icons: ^0.13.1
|
||||||
|
package_info_plus: ^5.0.1
|
||||||
|
device_info_plus: ^9.1.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in new issue
Block a user