Merge
This commit is contained in:
1 parent
880cdd65ff
commit
8586a23bfa
19 files changed
+169
-210
No files matched your search
@@ -1,16 +1,10 @@
|
||||
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/header_info.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/model/ranking.dart';
|
||||
import 'package:stadtbote/tools/constants.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';
|
||||
|
||||
enum ModeEnum {
|
||||
@@ -44,7 +38,7 @@ class ApproachAreaPage extends ContentViewWidget {
|
||||
}
|
||||
|
||||
class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
||||
late Ranking? _ranking;
|
||||
//late Ranking? _ranking;
|
||||
|
||||
late bool _initCompleted = false;
|
||||
|
||||
@@ -53,7 +47,7 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
||||
super.initState();
|
||||
|
||||
Future.delayed(const Duration(seconds: 0), () async {
|
||||
_ranking = await MyApp.isarInstance.rankings.where().findFirst();
|
||||
//_ranking = await MyApp.isarInstance.rankings.where().findFirst();
|
||||
|
||||
_initCompleted = true;
|
||||
|
||||
@@ -94,7 +88,7 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
||||
List<Widget> _fillColumns() {
|
||||
List<Widget> columns = [];
|
||||
|
||||
if (_ranking != null) {
|
||||
/*if (_ranking != null) {
|
||||
for (int i = 0; i < _ranking!.ranks.length; i++) {
|
||||
var rank = _ranking!.ranks[i];
|
||||
|
||||
@@ -171,12 +165,12 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
return columns;
|
||||
}
|
||||
|
||||
_sendZip(Rank rank, String zip, ModeEnum mode) {
|
||||
/*_sendZip(Rank rank, String zip, ModeEnum mode) {
|
||||
var zipMessage = ZipMessage();
|
||||
|
||||
if (mode == ModeEnum.set) {
|
||||
@@ -200,13 +194,13 @@ class _ApproachAreaPageState extends State<ApproachAreaPage> {
|
||||
}
|
||||
|
||||
MqttCore.instance.publishPayloadMessage("rank", zipMessage.toJson());
|
||||
}
|
||||
}*/
|
||||
|
||||
_initMessages() {
|
||||
MessageService().subscribe<RankingUpdated>(Constants.messageTopicRankingUpdated, this, (rankingUpdateMessage) async {
|
||||
/*MessageService().subscribe<RankingUpdated>(Constants.messageTopicRankingUpdated, this, (rankingUpdateMessage) async {
|
||||
_ranking = await MyApp.isarInstance.rankings.where().findFirst();
|
||||
|
||||
setState(() {});
|
||||
});
|
||||
});*/
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:expandable/expandable.dart';
|
||||
import 'package:flutter/material.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/fin_task_message.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 '../main.dart';
|
||||
@@ -86,12 +88,6 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> {
|
||||
|
||||
var jobs = await MyApp.isarInstance.jobs.filter().stateEqualTo(Constants.stateAssigned).findAll();
|
||||
for (var job in jobs) {
|
||||
String remarkString = '';
|
||||
for (var remark in job.rem) {
|
||||
remarkString += '$remark\n';
|
||||
}
|
||||
remarkString = remarkString.trim();
|
||||
|
||||
entries.add(ExpandableNotifier(
|
||||
child: ListTile(
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
|
||||
@@ -200,9 +196,9 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> {
|
||||
message.track = Track();
|
||||
message.track.time = DateTime.now().toUtc().toIso8601String();
|
||||
message.track.pos = FinTaskPos();
|
||||
message.track.pos.lat = currentPosition != null ? currentPosition.latitude : 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!.lat = currentPosition != null ? currentPosition.latitude : 0.0;
|
||||
message.track.pos!.long = currentPosition != null ? currentPosition.longitude : 0.0;
|
||||
message.track.pos!.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
|
||||
|
||||
MqttCore.instance.publishText("reaction", jsonEncode(message.toJson()));
|
||||
|
||||
@@ -216,4 +212,6 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> {
|
||||
|
||||
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/header_info.dart';
|
||||
import 'package:stadtbote/model/job.dart';
|
||||
import 'package:stadtbote/model/log_entry.dart';
|
||||
import 'package:stadtbote/model/message.dart';
|
||||
import 'package:stadtbote/model/session_status.dart';
|
||||
import 'package:stadtbote/model/status.dart';
|
||||
import 'package:stadtbote/popups/infos_popup.dart';
|
||||
import 'package:stadtbote/protocoll_messages/device_log_response.dart';
|
||||
import 'package:stadtbote/protocoll_messages/logout_message.dart';
|
||||
import 'package:stadtbote/tools/message_service.dart';
|
||||
import 'package:stadtbote/tools/messages/job_deleted_message.dart';
|
||||
@@ -25,7 +23,7 @@ import 'package:stadtbote/tools/messages/message_message.dart';
|
||||
import 'package:stadtbote/tools/messages/session_info_update.dart';
|
||||
import 'package:badges/badges.dart' as badges;
|
||||
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 '../main.dart';
|
||||
@@ -237,11 +235,7 @@ class _MainPageState extends State<MainPage> {
|
||||
_loggedOut ? 'Anmelden' : 'Abmelden',
|
||||
image: Image.asset(_loggedOut ? 'assets/anmelden.png' : 'assets/abmelden.png', width: 30, height: 30),
|
||||
() async {
|
||||
if (!kDebugMode) {
|
||||
_logout(context);
|
||||
} else {
|
||||
_test();
|
||||
}
|
||||
}),
|
||||
Expanded(
|
||||
child: Container(
|
||||
@@ -287,7 +281,7 @@ class _MainPageState extends State<MainPage> {
|
||||
_refreshBadges();
|
||||
});
|
||||
|
||||
MessageService().subscribe<UpdateBadgesMessage>(Constants.messageTopicUpdateBadges, this, (UpdateBadgesMessage message) {
|
||||
MessageService().subscribe<RefreshBadgesMessage>(Constants.messageTopicRefreshBadges, this, (RefreshBadgesMessage message) {
|
||||
_refreshBadges();
|
||||
});
|
||||
}
|
||||
@@ -380,10 +374,10 @@ class _MainPageState extends State<MainPage> {
|
||||
|
||||
var logoutMessage = LogoutMessage();
|
||||
if (position != null) {
|
||||
logoutMessage.time = position.timestamp.toIso8601String();
|
||||
logoutMessage.lat = position.latitude;
|
||||
logoutMessage.long = position.longitude;
|
||||
logoutMessage.acc = position.accuracy.toInt();
|
||||
logoutMessage.pos!.time = position.timestamp.toIso8601String();
|
||||
logoutMessage.pos!.lat = position.latitude;
|
||||
logoutMessage.pos!.long = position.longitude;
|
||||
logoutMessage.pos!.acc = position.accuracy.toInt();
|
||||
}
|
||||
|
||||
MqttCore.instance.publishText("session", jsonEncode(logoutMessage.toJson()));
|
||||
|
||||
@@ -109,8 +109,6 @@ class _MessagesPageState extends State<MessagesPage> {
|
||||
await MyApp.isarInstance.messages.put(message.mssg);
|
||||
});
|
||||
|
||||
var json = jsonEncode(message.toJson());
|
||||
|
||||
MqttCore.instance.publishText('set_location', jsonEncode(message.toJson()));
|
||||
|
||||
_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/fin_task_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/message_service.dart';
|
||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
||||
@@ -145,7 +144,7 @@ class _TaskListPageState extends State<TaskListPage> {
|
||||
left: 16.5,
|
||||
top: i == 0 ? 40 : 40,
|
||||
child: Container(
|
||||
height: i == widget.tour.tasks.length - 1 ? 0 : 20,
|
||||
height: i == widget.tour.tasks!.length - 1 ? 0 : 20,
|
||||
width: 6,
|
||||
color: isTaskActive(i) ? Constants.colorPrimary : Constants.colorPrimaryOpaque,
|
||||
),
|
||||
@@ -211,7 +210,7 @@ class _TaskListPageState extends State<TaskListPage> {
|
||||
Future<List<TaskInfo>> _fetchTaskList() async {
|
||||
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();
|
||||
if (taskInfo == null) {
|
||||
taskInfo = TaskInfo();
|
||||
@@ -445,7 +444,7 @@ class _TaskListPageState extends State<TaskListPage> {
|
||||
message.task.pos!.long = position.longitude;
|
||||
}
|
||||
|
||||
MqttCore.instance.publishPayloadMessage("job", finTaskMessage.toJson());
|
||||
MqttCore.instance.publishText("job", jsonEncode(message.toJson()));
|
||||
}
|
||||
|
||||
FinTourTask _createAnswerHeader(TaskInfo taskInfo) {
|
||||
@@ -456,9 +455,9 @@ class _TaskListPageState extends State<TaskListPage> {
|
||||
finTourTask.time = DateTime.now().toIso8601String();
|
||||
finTourTask.pos = FinTaskPos();
|
||||
if (position != null) {
|
||||
finTourTask.pos.lat = position.latitude;
|
||||
finTourTask.pos.long = position.longitude;
|
||||
finTourTask.pos.acc = position.accuracy.toInt();
|
||||
finTourTask.pos!.lat = position.latitude;
|
||||
finTourTask.pos!.long = position.longitude;
|
||||
finTourTask.pos!.acc = position.accuracy.toInt();
|
||||
}
|
||||
|
||||
return finTourTask;
|
||||
@@ -472,10 +471,10 @@ class _TaskListPageState extends State<TaskListPage> {
|
||||
var position = MyApp.currentPosition;
|
||||
if (position != null) {
|
||||
message.track = Track();
|
||||
message.track.time = DateTime.now().toIso8601String();
|
||||
message.track.pos = FinTaskPos();
|
||||
message.track.pos.lat = position.latitude;
|
||||
message.track.pos.long = position.longitude;
|
||||
message.track!.time = DateTime.now().toIso8601String();
|
||||
message.track!.pos = FinTaskPos();
|
||||
message.track!.pos!.lat = position.latitude;
|
||||
message.track!.pos!.long = position.longitude;
|
||||
}
|
||||
|
||||
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/log_entry.dart';
|
||||
import 'package:stadtbote/model/message.dart';
|
||||
import 'package:stadtbote/model/ranking.dart';
|
||||
import 'package:stadtbote/model/status.dart';
|
||||
import 'package:stadtbote/model/task_info.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/message_service.dart';
|
||||
import 'package:stadtbote/tools/messages/job_received_message.dart';
|
||||
import 'package:stadtbote/tools/messages/update_badges_message.dart';
|
||||
import 'package:stadtbote/tools/messages/refresh_badges_message.dart';
|
||||
import 'package:stadtbote/tools/mqtt_core.dart';
|
||||
|
||||
import 'content_views/main_page.dart';
|
||||
@@ -37,7 +36,6 @@ Future<void> main() async {
|
||||
JobSchema,
|
||||
TaskInfoSchema,
|
||||
MessageSchema,
|
||||
RankingSchema,
|
||||
EnqueuedMessageSchema,
|
||||
LogEntrySchema
|
||||
], 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(), () {
|
||||
_dialogOpened = false;
|
||||
|
||||
MessageService().publish(Constants.messageTopicUpdateBadges, arguments: UpdateBadgesMessage());
|
||||
MessageService().publish(Constants.messageTopicRefreshBadges, arguments: RefreshBadgesMessage());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ class JobsPayload {
|
||||
class Job {
|
||||
late Id id;
|
||||
@JsonKey(name: 'ver')
|
||||
late String ver;
|
||||
late int ver;
|
||||
@JsonKey(name: 'state')
|
||||
late int state;
|
||||
@JsonKey(name: 'cr_filter')
|
||||
|
||||
+13
-90
@@ -56,7 +56,7 @@ const JobSchema = CollectionSchema(
|
||||
r'ver': PropertySchema(
|
||||
id: 7,
|
||||
name: r'ver',
|
||||
type: IsarType.string,
|
||||
type: IsarType.long,
|
||||
),
|
||||
r'vhtId': PropertySchema(
|
||||
id: 8,
|
||||
@@ -105,7 +105,6 @@ int _jobEstimateSize(
|
||||
bytesCount += JobTourSchema.estimateSize(value, offsets, allOffsets);
|
||||
}
|
||||
}
|
||||
bytesCount += 3 + object.ver.length * 3;
|
||||
return bytesCount;
|
||||
}
|
||||
|
||||
@@ -127,7 +126,7 @@ void _jobSerialize(
|
||||
JobTourSchema.serialize,
|
||||
object.tours,
|
||||
);
|
||||
writer.writeString(offsets[7], object.ver);
|
||||
writer.writeLong(offsets[7], object.ver);
|
||||
writer.writeLong(offsets[8], object.vhtId);
|
||||
}
|
||||
|
||||
@@ -152,7 +151,7 @@ Job _jobDeserialize(
|
||||
JobTour(),
|
||||
) ??
|
||||
[];
|
||||
object.ver = reader.readString(offsets[7]);
|
||||
object.ver = reader.readLong(offsets[7]);
|
||||
object.vhtId = reader.readLong(offsets[8]);
|
||||
return object;
|
||||
}
|
||||
@@ -185,7 +184,7 @@ P _jobDeserializeProp<P>(
|
||||
) ??
|
||||
[]) as P;
|
||||
case 7:
|
||||
return (reader.readString(offset)) as P;
|
||||
return (reader.readLong(offset)) as P;
|
||||
case 8:
|
||||
return (reader.readLong(offset)) as P;
|
||||
default:
|
||||
@@ -929,55 +928,46 @@ extension JobQueryFilter on QueryBuilder<Job, Job, QFilterCondition> {
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Job, Job, QAfterFilterCondition> verEqualTo(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
QueryBuilder<Job, Job, QAfterFilterCondition> verEqualTo(int value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'ver',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Job, Job, QAfterFilterCondition> verGreaterThan(
|
||||
String value, {
|
||||
int value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'ver',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Job, Job, QAfterFilterCondition> verLessThan(
|
||||
String value, {
|
||||
int value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'ver',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Job, Job, QAfterFilterCondition> verBetween(
|
||||
String lower,
|
||||
String upper, {
|
||||
int lower,
|
||||
int upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.between(
|
||||
@@ -986,73 +976,6 @@ extension JobQueryFilter on QueryBuilder<Job, Job, QFilterCondition> {
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
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 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 query.addPropertyName(r'ver');
|
||||
});
|
||||
@@ -1460,7 +1383,7 @@ Map<String, dynamic> _$JobsPayloadToJson(JobsPayload instance) =>
|
||||
|
||||
Job _$JobFromJson(Map<String, dynamic> json) => Job()
|
||||
..id = json['id'] as int
|
||||
..ver = json['ver'] as String
|
||||
..ver = json['ver'] as int
|
||||
..state = json['state'] as int
|
||||
..crFilter = json['cr_filter'] as String?
|
||||
..ordertime = json['ordertime'] as String
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:expandable/expandable.dart';
|
||||
import 'package:flutter/material.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/protocoll_messages/fin_task_message.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/util.dart';
|
||||
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();
|
||||
|
||||
await showDialog<void>(
|
||||
@@ -18,8 +24,8 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
||||
builder: (BuildContext context) {
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsMap);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsMap);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsSet);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsSet);
|
||||
|
||||
Navigator.of(context).pop();
|
||||
|
||||
@@ -32,29 +38,27 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
||||
shadowColor: Colors.transparent,
|
||||
backgroundColor: Colors.white,
|
||||
content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
|
||||
if (jobsMap.isEmpty) {
|
||||
if (jobsSet.isEmpty) {
|
||||
Navigator.of(context).pop();
|
||||
|
||||
onFinished();
|
||||
}
|
||||
|
||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsMap);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsMap);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobDeleted, jobsSet);
|
||||
MessageService().unsubscribe(Constants.messageTopicJobReceived, jobsSet);
|
||||
|
||||
MessageService().subscribe<JobDeletedMessage>(Constants.messageTopicJobDeleted, jobsMap, (jobDeletedMessage) async {
|
||||
jobsMap.removeWhere((key, value) => key == jobDeletedMessage.jobId);
|
||||
MessageService().subscribe<JobDeletedMessage>(Constants.messageTopicJobDeleted, jobsSet, (jobDeletedMessage) async {
|
||||
jobsSet.removeWhere((value) => value.id == jobDeletedMessage.id);
|
||||
|
||||
if (context.mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
|
||||
MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, jobsMap, (jobdMessage) async {
|
||||
if (jobsMap.containsKey(jobdMessage.job.id)) {
|
||||
jobsMap.removeWhere((key, value) => key == jobdMessage.job.id);
|
||||
}
|
||||
MessageService().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, jobsSet, (jobdMessage) async {
|
||||
jobsSet.removeWhere((value) => value.id == jobdMessage.job.id);
|
||||
|
||||
jobsMap[jobdMessage.job.id] = jobdMessage.job;
|
||||
jobsSet.add(jobdMessage.job);
|
||||
|
||||
if (context.mounted) {
|
||||
setState(() {});
|
||||
@@ -69,15 +73,9 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
||||
height: 100,
|
||||
padding: const EdgeInsets.all(5),
|
||||
child: ListView.builder(
|
||||
itemCount: jobsMap.length,
|
||||
itemCount: jobsSet.length,
|
||||
itemBuilder: (_, i) {
|
||||
var job = jobsMap.values.toList()[i];
|
||||
|
||||
String remarkString = '';
|
||||
for (var remark in job.rem) {
|
||||
remarkString += '$remark\n';
|
||||
}
|
||||
remarkString = remarkString.trim();
|
||||
var job = jobsSet.toList()[i];
|
||||
|
||||
return ExpandableNotifier(
|
||||
child: ListTile(
|
||||
@@ -161,7 +159,7 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
||||
),
|
||||
child: Padding(
|
||||
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);
|
||||
|
||||
jobsMap.removeWhere((key, value) => key == job.id);
|
||||
jobsSet.removeWhere((value) => value.id == job.id);
|
||||
|
||||
setState(() {});
|
||||
}),
|
||||
@@ -185,7 +183,7 @@ Future<void> showAcceptJobsPopup(BuildContext context, List<Job> jobs) async {
|
||||
child: getDefaultButton('Annehmen', () {
|
||||
_sendAnswer(job, 1);
|
||||
|
||||
jobsMap.removeWhere((key, value) => key == job.id);
|
||||
jobsSet.removeWhere((value) => value.id == job.id);
|
||||
|
||||
setState(() {});
|
||||
}),
|
||||
@@ -215,9 +213,9 @@ _sendAnswer(Job job, int item) {
|
||||
message.track = Track();
|
||||
message.track.time = DateTime.now().toUtc().toIso8601String();
|
||||
message.track.pos = FinTaskPos();
|
||||
message.track.pos.lat = currentPosition != null ? currentPosition.latitude : 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!.lat = currentPosition != null ? currentPosition.latitude : 0.0;
|
||||
message.track.pos!.long = currentPosition != null ? currentPosition.longitude : 0.0;
|
||||
message.track.pos!.acc = currentPosition != null ? currentPosition.accuracy.toInt() : 0;
|
||||
|
||||
MqttCore.instance.publishText("reaction", jsonEncode(message.toJson()));
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'acknowledge_job.g.dart';
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:stadtbote/protocoll_messages/bootstrap_response_config.dart';
|
||||
|
||||
part 'bootstrap_response_payload.g.dart';
|
||||
|
||||
|
||||
@@ -8,12 +8,27 @@ part of 'logout_message.dart';
|
||||
|
||||
LogoutMessage _$LogoutMessageFromJson(Map<String, dynamic> json) =>
|
||||
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
|
||||
..lat = (json['lat'] as num).toDouble()
|
||||
..long = (json['long'] as num).toDouble()
|
||||
..acc = json['acc'] as int;
|
||||
|
||||
Map<String, dynamic> _$LogoutMessageToJson(LogoutMessage instance) =>
|
||||
Map<String, dynamic> _$LogoutMessagePositionToJson(
|
||||
LogoutMessagePosition instance) =>
|
||||
<String, dynamic>{
|
||||
'time': instance.time,
|
||||
'lat': instance.lat,
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:stadtbote/tools/util.dart';
|
||||
|
||||
part 'start_session_message.g.dart';
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ class Constants {
|
||||
static const String messageTopicRankingUpdated = "ranking_updated";
|
||||
static const String messageTopicJobReceived = "job_received";
|
||||
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 messageTopicPushContentView = "push_content_view";
|
||||
static const String messageTopicPopContentView = "pop_content_view";
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
class UpdateBadgesMessage {
|
||||
UpdateBadgesMessage();
|
||||
}
|
||||
+34
-26
@@ -9,7 +9,6 @@ import 'package:mqtt_client/mqtt_client.dart';
|
||||
import 'package:mqtt_client/mqtt_server_client.dart';
|
||||
import 'package:stadtbote/model/enqueued_message.dart';
|
||||
import 'package:stadtbote/model/log_entry.dart';
|
||||
import 'package:stadtbote/model/ranking.dart';
|
||||
import 'package:stadtbote/model/status.dart';
|
||||
import 'package:stadtbote/protocoll_messages/acknowledge_job.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_received_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/status_info_update.dart';
|
||||
// ignore: depend_on_referenced_packages
|
||||
@@ -269,7 +267,7 @@ class MqttCore {
|
||||
}
|
||||
|
||||
void _rankingMessageReceived(List<dynamic> payloadData) async {
|
||||
Map<String, dynamic> rankingMap = {};
|
||||
/*Map<String, dynamic> rankingMap = {};
|
||||
rankingMap["ranks"] = payloadData;
|
||||
var ranking = Ranking.fromJson(rankingMap);
|
||||
|
||||
@@ -277,7 +275,7 @@ class MqttCore {
|
||||
await MyApp.isarInstance.rankings.put(ranking);
|
||||
});
|
||||
|
||||
MessageService().publish<RankingUpdated>(Constants.messageTopicRankingUpdated, arguments: RankingUpdated());
|
||||
MessageService().publish<RankingUpdated>(Constants.messageTopicRankingUpdated, arguments: RankingUpdated());*/
|
||||
}
|
||||
|
||||
void _jobMessageReceived(payloadData) async {
|
||||
@@ -306,17 +304,14 @@ class MqttCore {
|
||||
}
|
||||
}
|
||||
|
||||
void _jobDeleteReceived(List<dynamic> payloadData) async {
|
||||
Map<String, dynamic> map = {};
|
||||
map["jobDel"] = payloadData;
|
||||
var jobDelMessage = JobDelMessage.fromJson(map);
|
||||
|
||||
for(var jobId in jobDelMessage.jobDel) {
|
||||
void _jobDeleteReceived(payloadData) async {
|
||||
for(var jobId in payloadData) {
|
||||
await MyApp.isarInstance.writeTxn(() async {
|
||||
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 {
|
||||
@@ -325,7 +320,7 @@ class MqttCore {
|
||||
_sendSyncMessage();
|
||||
}
|
||||
|
||||
void _messageMessageReceived(payloadData) async {
|
||||
void _messageMessageReceived(Map<String, dynamic> payloadData) async {
|
||||
var newMessage = await Message.mergeFromJson(payloadData);
|
||||
|
||||
await MyApp.isarInstance.writeTxn(() async {
|
||||
@@ -337,6 +332,22 @@ class MqttCore {
|
||||
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() {
|
||||
connectionState = ConnectionStateEnum.notConnected;
|
||||
|
||||
@@ -390,24 +401,21 @@ class MqttCore {
|
||||
handshakeMessage.deviceObject = deviceObject;
|
||||
handshakeMessage.ver = await Util.getAppVersion();
|
||||
|
||||
//var jsonMap = handshakeMessage.toJson();
|
||||
//var json = jsonEncode(jsonMap);
|
||||
var uri = "http://test-app-server.dns.army:8080/bootstrap";
|
||||
var jsonMap = handshakeMessage.toJson();
|
||||
var json = jsonEncode(jsonMap);
|
||||
var uri = "https://init-x.assecutor.de/bootstrap?get_mqtt_broker=$json";
|
||||
Util.logInfo("Bootstrap request: $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 = bootstrapResponse.broker.replaceFirst("mqtt://", "").split(":");
|
||||
var brokerUriAndPortArray = bootstrapResponsePayload.broker.replaceFirst("mqtt://", "").split(":");
|
||||
_brokerUri = brokerUriAndPortArray[0];
|
||||
_brokerPort = int.parse(brokerUriAndPortArray[1]);
|
||||
_clientId = bootstrapResponse.id;
|
||||
_fromServerTopic = bootstrapResponse.fromServer;
|
||||
_toServerTopic = bootstrapResponse.toServer;
|
||||
_fromServerTopic = bootstrapResponsePayload.fromServer;
|
||||
_toServerTopic = bootstrapResponsePayload.toServer;
|
||||
|
||||
_connectToBroker();
|
||||
} catch (ex) {
|
||||
@@ -438,13 +446,13 @@ class MqttCore {
|
||||
answer.sync.jobs.add(syncJob);
|
||||
}
|
||||
|
||||
MqttCore.instance.publishText("sync", jsonEncode(answer.toJson()));
|
||||
MqttCore.instance.publishPayloadMessage("server", answer.toJson());
|
||||
}
|
||||
|
||||
void _startTrackTimer() {
|
||||
_trackTimer ??= Timer.periodic(const Duration(seconds: 60), (Timer t) {
|
||||
var answer = MyApp.currentPosition;
|
||||
if (answer != null) {
|
||||
var position = MyApp.currentPosition;
|
||||
if (position != null) {
|
||||
var trackMessage = TrackMessage();
|
||||
trackMessage.pos = TrackPosition();
|
||||
trackMessage.pos!.time = position.timestamp.toIso8601String();
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import 'package:audioplayers/audioplayers.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.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:stadtbote/main.dart';
|
||||
import 'package:stadtbote/model/job.dart';
|
||||
|
||||
@@ -305,6 +305,22 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -912,6 +928,22 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1469,6 +1501,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
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
|
||||
# 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.
|
||||
version: 5.0.0+1
|
||||
version: 300.0.0+300
|
||||
|
||||
environment:
|
||||
sdk: '>=2.19.6 <3.0.0'
|
||||
@@ -68,6 +68,8 @@ dependencies:
|
||||
url_launcher: ^6.2.4
|
||||
audioplayers: ^5.2.1
|
||||
flutter_launcher_icons: ^0.13.1
|
||||
package_info_plus: ^5.0.1
|
||||
device_info_plus: ^9.1.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in new issue
Block a user