Fehlerkorrekturen

This commit is contained in:
Sven committed 2024-02-28 20:42:22 +01:00
1 parent 5411da55b7
commit 4070fc81a6
6 files changed
+706 -26

No files matched your search

+3 -1
View File
@@ -130,7 +130,7 @@ class _MessagesPageState extends State<MessagesPage> {
}
text = text.trim();
_messages.insert(0, types.TextMessage(
_messages.add(types.TextMessage(
author: message.from == _sid ? _user : _central,
createdAt: DateTime
.parse(message.time)
@@ -139,6 +139,8 @@ class _MessagesPageState extends State<MessagesPage> {
text: text,
));
_messages.sort((a, b) => b.createdAt! > a.createdAt! ? 1 : 0);
message.read = true;
MyApp.isarInstance.writeTxnSync(() {
MyApp.isarInstance.messages.putSync(message);
+11 -6
View File
@@ -163,12 +163,16 @@ class _TaskListPageState extends State<TaskListPage> {
),
),
const SizedBox(height: 5),
Text(
taskInfo.additionalText ?? '',
textAlign: TextAlign.left,
style: TextStyle(
color: textColor,
fontSize: 12.0,
SizedBox(
width: MediaQuery.of(context).size.width * 0.7,
child: Text(
taskInfo.additionalText ?? '',
textAlign: TextAlign.left,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: textColor,
fontSize: 12.0,
),
),
),
],
@@ -317,6 +321,7 @@ class _TaskListPageState extends State<TaskListPage> {
answer.val = notice;
taskInfo.answer = jsonEncode(answer.toJson());
taskInfo.additionalText = notice;
taskInfo.completed = true;
_finishTaskProcessing(taskInfo);
+3 -1
View File
@@ -5,6 +5,7 @@ import 'package:geolocator/geolocator.dart';
import 'package:isar/isar.dart';
import 'package:path_provider/path_provider.dart';
import 'package:stadtbote/messages/pop_content_view_message.dart';
import 'package:stadtbote/model/enqueued_message.dart';
import 'package:stadtbote/model/message.dart';
import 'package:stadtbote/model/ranking.dart';
import 'package:stadtbote/model/status.dart';
@@ -34,7 +35,8 @@ Future<void> main() async {
JobSchema,
TaskInfoSchema,
MessageSchema,
RankingSchema
RankingSchema,
EnqueuedMessageSchema,
], directory: dir.path);
runZonedGuarded(() {}, (error, stackTrace) {
+14
View File
@@ -0,0 +1,14 @@
import 'package:isar/isar.dart';
import 'package:json_annotation/json_annotation.dart';
part 'enqueued_message.g.dart';
@collection
class EnqueuedMessage {
Id id = DateTime.now().millisecondsSinceEpoch;
late String topic;
late String payload;
}
+633
View File
@@ -0,0 +1,633 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'enqueued_message.dart';
// **************************************************************************
// IsarCollectionGenerator
// **************************************************************************
// coverage:ignore-file
// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types
extension GetEnqueuedMessageCollection on Isar {
IsarCollection<EnqueuedMessage> get enqueuedMessages => this.collection();
}
const EnqueuedMessageSchema = CollectionSchema(
name: r'EnqueuedMessage',
id: 884922652682878785,
properties: {
r'payload': PropertySchema(
id: 0,
name: r'payload',
type: IsarType.string,
),
r'receiver': PropertySchema(
id: 1,
name: r'receiver',
type: IsarType.string,
)
},
estimateSize: _enqueuedMessageEstimateSize,
serialize: _enqueuedMessageSerialize,
deserialize: _enqueuedMessageDeserialize,
deserializeProp: _enqueuedMessageDeserializeProp,
idName: r'id',
indexes: {},
links: {},
embeddedSchemas: {},
getId: _enqueuedMessageGetId,
getLinks: _enqueuedMessageGetLinks,
attach: _enqueuedMessageAttach,
version: '3.1.0+1',
);
int _enqueuedMessageEstimateSize(
EnqueuedMessage object,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
var bytesCount = offsets.last;
bytesCount += 3 + object.payload.length * 3;
bytesCount += 3 + object.topic.length * 3;
return bytesCount;
}
void _enqueuedMessageSerialize(
EnqueuedMessage object,
IsarWriter writer,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
writer.writeString(offsets[0], object.payload);
writer.writeString(offsets[1], object.topic);
}
EnqueuedMessage _enqueuedMessageDeserialize(
Id id,
IsarReader reader,
List<int> offsets,
Map<Type, List<int>> allOffsets,
) {
final object = EnqueuedMessage();
object.id = id;
object.payload = reader.readString(offsets[0]);
object.topic = reader.readString(offsets[1]);
return object;
}
P _enqueuedMessageDeserializeProp<P>(
IsarReader reader,
int propertyId,
int offset,
Map<Type, List<int>> allOffsets,
) {
switch (propertyId) {
case 0:
return (reader.readString(offset)) as P;
case 1:
return (reader.readString(offset)) as P;
default:
throw IsarError('Unknown property with id $propertyId');
}
}
Id _enqueuedMessageGetId(EnqueuedMessage object) {
return object.id;
}
List<IsarLinkBase<dynamic>> _enqueuedMessageGetLinks(EnqueuedMessage object) {
return [];
}
void _enqueuedMessageAttach(
IsarCollection<dynamic> col, Id id, EnqueuedMessage object) {
object.id = id;
}
extension EnqueuedMessageQueryWhereSort
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QWhere> {
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterWhere> anyId() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(const IdWhereClause.any());
});
}
}
extension EnqueuedMessageQueryWhere
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QWhereClause> {
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterWhereClause> idEqualTo(
Id id) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(
lower: id,
upper: id,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterWhereClause>
idNotEqualTo(Id id) {
return QueryBuilder.apply(this, (query) {
if (query.whereSort == Sort.asc) {
return query
.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: false),
)
.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: false),
);
} else {
return query
.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: false),
)
.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: false),
);
}
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterWhereClause>
idGreaterThan(Id id, {bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.greaterThan(lower: id, includeLower: include),
);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterWhereClause> idLessThan(
Id id,
{bool include = false}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(
IdWhereClause.lessThan(upper: id, includeUpper: include),
);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterWhereClause> idBetween(
Id lowerId,
Id upperId, {
bool includeLower = true,
bool includeUpper = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IdWhereClause.between(
lower: lowerId,
includeLower: includeLower,
upper: upperId,
includeUpper: includeUpper,
));
});
}
}
extension EnqueuedMessageQueryFilter
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QFilterCondition> {
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
idEqualTo(Id value) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'id',
value: value,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
idGreaterThan(
Id value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'id',
value: value,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
idLessThan(
Id value, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'id',
value: value,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
idBetween(
Id lower,
Id upper, {
bool includeLower = true,
bool includeUpper = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'id',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadEqualTo(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'payload',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadGreaterThan(
String value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'payload',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadLessThan(
String value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'payload',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadBetween(
String lower,
String upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'payload',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'payload',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'payload',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'payload',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'payload',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'payload',
value: '',
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
payloadIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'payload',
value: '',
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverEqualTo(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'receiver',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverGreaterThan(
String value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'receiver',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverLessThan(
String value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'receiver',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverBetween(
String lower,
String upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'receiver',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'receiver',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'receiver',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'receiver',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'receiver',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'receiver',
value: '',
));
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterFilterCondition>
receiverIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'receiver',
value: '',
));
});
}
}
extension EnqueuedMessageQueryObject
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QFilterCondition> {}
extension EnqueuedMessageQueryLinks
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QFilterCondition> {}
extension EnqueuedMessageQuerySortBy
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QSortBy> {
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy> sortByPayload() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'payload', Sort.asc);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy>
sortByPayloadDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'payload', Sort.desc);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy>
sortByReceiver() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'receiver', Sort.asc);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy>
sortByReceiverDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'receiver', Sort.desc);
});
}
}
extension EnqueuedMessageQuerySortThenBy
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QSortThenBy> {
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.asc);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'id', Sort.desc);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy> thenByPayload() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'payload', Sort.asc);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy>
thenByPayloadDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'payload', Sort.desc);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy>
thenByReceiver() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'receiver', Sort.asc);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QAfterSortBy>
thenByReceiverDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'receiver', Sort.desc);
});
}
}
extension EnqueuedMessageQueryWhereDistinct
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QDistinct> {
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QDistinct> distinctByPayload(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'payload', caseSensitive: caseSensitive);
});
}
QueryBuilder<EnqueuedMessage, EnqueuedMessage, QDistinct> distinctByReceiver(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'receiver', caseSensitive: caseSensitive);
});
}
}
extension EnqueuedMessageQueryProperty
on QueryBuilder<EnqueuedMessage, EnqueuedMessage, QQueryProperty> {
QueryBuilder<EnqueuedMessage, int, QQueryOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'id');
});
}
QueryBuilder<EnqueuedMessage, String, QQueryOperations> payloadProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'payload');
});
}
QueryBuilder<EnqueuedMessage, String, QQueryOperations> receiverProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'receiver');
});
}
}
+42 -18
View File
@@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
import 'package:isar/isar.dart';
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/ranking.dart';
import 'package:stadtbote/model/status.dart';
import 'package:stadtbote/protocoll_messages/bootstrap_request.dart';
@@ -131,31 +132,27 @@ class MqttCore {
}
publishText(String topic, String text) {
try {
var buffer = Uint8Buffer();
buffer.addAll(text.codeUnits);
var buffer = Uint8Buffer();
buffer.addAll(text.codeUnits);
_mqttClient.publishMessage(topic, MqttQos.exactlyOnce, buffer);
_mqttClient.publishMessage(topic, MqttQos.exactlyOnce, buffer);
Util.logInfo("message $text send to $topic");
} catch (e) {
Util.logException(e.toString());
}
Util.logInfo("message $text send to $topic");
}
publishPayloadMessage(String receiver, Map<String, dynamic> payload) {
publishPayloadMessage(String topic, Map<String, dynamic> payload) {
var payloadContainer = PayloadContainer();
payloadContainer.id = const Uuid().v4().toString();
payloadContainer.recv = topic;
payloadContainer.store = true;
payloadContainer.payload = payload;
var json = jsonEncode(payloadContainer.toJson());
try {
var payloadContainer = PayloadContainer();
payloadContainer.id = const Uuid().v4().toString();
payloadContainer.recv = receiver;
payloadContainer.store = true;
payloadContainer.payload = payload;
var json = jsonEncode(payloadContainer.toJson());
publishText(_toServerTopic, json);
} catch (e) {
Util.logException(e.toString());
_enqueueMessage(topic, jsonEncode(payloadContainer.toJson()));
}
}
@@ -234,6 +231,8 @@ class MqttCore {
await _sendSyncMessage();
await _sendEnqueuedMessages();
var sessionStatusMessage = SessionStatus.fromJson(payloadData['status']);
await MyApp.isarInstance.writeTxn(() async {
@@ -457,4 +456,29 @@ class MqttCore {
_trackTimer = null;
}
}
void _enqueueMessage(String receiver, String payload) async {
var enqueuedMessage = EnqueuedMessage();
enqueuedMessage.topic = receiver;
enqueuedMessage.payload = payload;
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.enqueuedMessages.put(enqueuedMessage);
});
}
_sendEnqueuedMessages() async {
var enqueuedMessages = await MyApp.isarInstance.enqueuedMessages.where().findAll();
if (enqueuedMessages.isNotEmpty) {
for (var enqueuedMessage in enqueuedMessages) {
try {
publishText(enqueuedMessage.topic, enqueuedMessage.payload);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.enqueuedMessages.delete(enqueuedMessage.id);
});
} catch (ex) {}
}
}
}
}