Erweiterungen

This commit is contained in:
Sven committed 2024-04-03 14:11:47 +02:00
1 parent f460763d53
commit 3578a4767a
3 files changed
+56 -149

No files matched your search

+11 -18
View File
@@ -96,25 +96,24 @@ class _MessagesPageState extends State<MessagesPage> {
void _handleSendPressed(types.PartialText text) async { void _handleSendPressed(types.PartialText text) async {
var now = DateTime.now(); var now = DateTime.now();
var message = MessageMessage(); var message = sbmessage.Message();
message.mssg = sbmessage.Message(); message.text = text.text;
message.mssg.text = [text.text]; message.from = _sid;
message.mssg.from = _sid; message.subj = '';
message.mssg.subj = ''; message.time = now.toUtc().toIso8601String();
message.mssg.time = now.toUtc().toIso8601String(); message.read = true;
message.mssg.read = true; message.id = await sbmessage.Message.getNextId();
message.mssg.id = await sbmessage.Message.getNextId();
await MyApp.isarInstance.writeTxn(() async { await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.messages.put(message.mssg); await MyApp.isarInstance.messages.put(message);
}); });
MqttCore.instance.publishMessage('set_location', jsonEncode(message.toJson())); MqttCore.instance.publishMessage('message', jsonEncode(message.toJson()));
_messages.insert(0, types.TextMessage( _messages.insert(0, types.TextMessage(
author: _user, author: _user,
createdAt: now.millisecondsSinceEpoch, createdAt: now.millisecondsSinceEpoch,
id: message.mssg.id.toString(), id: message.id.toString(),
text: text.text, text: text.text,
)); ));
@@ -126,17 +125,11 @@ class _MessagesPageState extends State<MessagesPage> {
var messages = await MyApp.isarInstance.messages.where().findAll(); var messages = await MyApp.isarInstance.messages.where().findAll();
for (var message in messages) { for (var message in messages) {
var text = message.subj.isNotEmpty ? '${message.subj}\n': '';
for (var textLine in message.text) {
text += '$textLine\n';
}
text = text.trim();
_messages.add(types.TextMessage( _messages.add(types.TextMessage(
author: message.from == _sid ? _user : _central, author: message.from == _sid ? _user : _central,
createdAt: DateTime.parse(message.time).toLocal().millisecondsSinceEpoch, createdAt: DateTime.parse(message.time).toLocal().millisecondsSinceEpoch,
id: message.id.toString(), id: message.id.toString(),
text: text, text: message.text,
)); ));
_messages.sort((a, b) => b.createdAt! > a.createdAt! ? 1 : 0); _messages.sort((a, b) => b.createdAt! > a.createdAt! ? 1 : 0);
+2 -13
View File
@@ -5,17 +5,6 @@ import 'package:stadtbote/tools/util.dart';
part 'message.g.dart'; part 'message.g.dart';
@JsonSerializable()
class MessageMessage {
late Message mssg;
MessageMessage();
factory MessageMessage.fromJson(Map<String, dynamic> json) => _$MessageMessageFromJson(json);
Map<String, dynamic> toJson() => _$MessageMessageToJson(this);
}
@collection @collection
@JsonSerializable() @JsonSerializable()
class Message { class Message {
@@ -27,7 +16,7 @@ class Message {
late String subj; late String subj;
late List<String> text; late String text;
late bool? read = false; late bool? read = false;
@@ -45,7 +34,7 @@ class Message {
availableMessage.time = json["time"]; availableMessage.time = json["time"];
availableMessage.from = json["from"]; availableMessage.from = json["from"];
availableMessage.subj = json["subj"]; availableMessage.subj = json["subj"];
availableMessage.text = (json['text'] as List<dynamic>).map((e) => e as String).toList(); availableMessage.text = json['text'];
return availableMessage; return availableMessage;
} else { } else {
+43 -118
View File
@@ -35,7 +35,7 @@ const MessageSchema = CollectionSchema(
r'text': PropertySchema( r'text': PropertySchema(
id: 3, id: 3,
name: r'text', name: r'text',
type: IsarType.stringList, type: IsarType.string,
), ),
r'time': PropertySchema( r'time': PropertySchema(
id: 4, id: 4,
@@ -66,12 +66,6 @@ int _messageEstimateSize(
bytesCount += 3 + object.from.length * 3; bytesCount += 3 + object.from.length * 3;
bytesCount += 3 + object.subj.length * 3; bytesCount += 3 + object.subj.length * 3;
bytesCount += 3 + object.text.length * 3; bytesCount += 3 + object.text.length * 3;
{
for (var i = 0; i < object.text.length; i++) {
final value = object.text[i];
bytesCount += value.length * 3;
}
}
bytesCount += 3 + object.time.length * 3; bytesCount += 3 + object.time.length * 3;
return bytesCount; return bytesCount;
} }
@@ -85,7 +79,7 @@ void _messageSerialize(
writer.writeString(offsets[0], object.from); writer.writeString(offsets[0], object.from);
writer.writeBool(offsets[1], object.read); writer.writeBool(offsets[1], object.read);
writer.writeString(offsets[2], object.subj); writer.writeString(offsets[2], object.subj);
writer.writeStringList(offsets[3], object.text); writer.writeString(offsets[3], object.text);
writer.writeString(offsets[4], object.time); writer.writeString(offsets[4], object.time);
} }
@@ -100,7 +94,7 @@ Message _messageDeserialize(
object.id = id; object.id = id;
object.read = reader.readBoolOrNull(offsets[1]); object.read = reader.readBoolOrNull(offsets[1]);
object.subj = reader.readString(offsets[2]); object.subj = reader.readString(offsets[2]);
object.text = reader.readStringList(offsets[3]) ?? []; object.text = reader.readString(offsets[3]);
object.time = reader.readString(offsets[4]); object.time = reader.readString(offsets[4]);
return object; return object;
} }
@@ -119,7 +113,7 @@ P _messageDeserializeProp<P>(
case 2: case 2:
return (reader.readString(offset)) as P; return (reader.readString(offset)) as P;
case 3: case 3:
return (reader.readStringList(offset) ?? []) as P; return (reader.readString(offset)) as P;
case 4: case 4:
return (reader.readString(offset)) as P; return (reader.readString(offset)) as P;
default: default:
@@ -554,7 +548,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementEqualTo( QueryBuilder<Message, Message, QAfterFilterCondition> textEqualTo(
String value, { String value, {
bool caseSensitive = true, bool caseSensitive = true,
}) { }) {
@@ -567,7 +561,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementGreaterThan( QueryBuilder<Message, Message, QAfterFilterCondition> textGreaterThan(
String value, { String value, {
bool include = false, bool include = false,
bool caseSensitive = true, bool caseSensitive = true,
@@ -582,7 +576,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementLessThan( QueryBuilder<Message, Message, QAfterFilterCondition> textLessThan(
String value, { String value, {
bool include = false, bool include = false,
bool caseSensitive = true, bool caseSensitive = true,
@@ -597,7 +591,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementBetween( QueryBuilder<Message, Message, QAfterFilterCondition> textBetween(
String lower, String lower,
String upper, { String upper, {
bool includeLower = true, bool includeLower = true,
@@ -616,7 +610,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementStartsWith( QueryBuilder<Message, Message, QAfterFilterCondition> textStartsWith(
String value, { String value, {
bool caseSensitive = true, bool caseSensitive = true,
}) { }) {
@@ -629,7 +623,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementEndsWith( QueryBuilder<Message, Message, QAfterFilterCondition> textEndsWith(
String value, { String value, {
bool caseSensitive = true, bool caseSensitive = true,
}) { }) {
@@ -642,7 +636,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementContains( QueryBuilder<Message, Message, QAfterFilterCondition> textContains(
String value, String value,
{bool caseSensitive = true}) { {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@@ -654,7 +648,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementMatches( QueryBuilder<Message, Message, QAfterFilterCondition> textMatches(
String pattern, String pattern,
{bool caseSensitive = true}) { {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@@ -666,7 +660,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textElementIsEmpty() { QueryBuilder<Message, Message, QAfterFilterCondition> textIsEmpty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo( return query.addFilterCondition(FilterCondition.equalTo(
property: r'text', property: r'text',
@@ -675,8 +669,7 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> QueryBuilder<Message, Message, QAfterFilterCondition> textIsNotEmpty() {
textElementIsNotEmpty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan( return query.addFilterCondition(FilterCondition.greaterThan(
property: r'text', property: r'text',
@@ -685,90 +678,6 @@ extension MessageQueryFilter
}); });
} }
QueryBuilder<Message, Message, QAfterFilterCondition> textLengthEqualTo(
int length) {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'text',
length,
true,
length,
true,
);
});
}
QueryBuilder<Message, Message, QAfterFilterCondition> textIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'text',
0,
true,
0,
true,
);
});
}
QueryBuilder<Message, Message, QAfterFilterCondition> textIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'text',
0,
false,
999999,
true,
);
});
}
QueryBuilder<Message, Message, QAfterFilterCondition> textLengthLessThan(
int length, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'text',
0,
true,
length,
include,
);
});
}
QueryBuilder<Message, Message, QAfterFilterCondition> textLengthGreaterThan(
int length, {
bool include = false,
}) {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'text',
length,
include,
999999,
true,
);
});
}
QueryBuilder<Message, Message, QAfterFilterCondition> textLengthBetween(
int lower,
int upper, {
bool includeLower = true,
bool includeUpper = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.listLength(
r'text',
lower,
includeLower,
upper,
includeUpper,
);
});
}
QueryBuilder<Message, Message, QAfterFilterCondition> timeEqualTo( QueryBuilder<Message, Message, QAfterFilterCondition> timeEqualTo(
String value, { String value, {
bool caseSensitive = true, bool caseSensitive = true,
@@ -943,6 +852,18 @@ extension MessageQuerySortBy on QueryBuilder<Message, Message, QSortBy> {
}); });
} }
QueryBuilder<Message, Message, QAfterSortBy> sortByText() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'text', Sort.asc);
});
}
QueryBuilder<Message, Message, QAfterSortBy> sortByTextDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'text', Sort.desc);
});
}
QueryBuilder<Message, Message, QAfterSortBy> sortByTime() { QueryBuilder<Message, Message, QAfterSortBy> sortByTime() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'time', Sort.asc); return query.addSortBy(r'time', Sort.asc);
@@ -1006,6 +927,18 @@ extension MessageQuerySortThenBy
}); });
} }
QueryBuilder<Message, Message, QAfterSortBy> thenByText() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'text', Sort.asc);
});
}
QueryBuilder<Message, Message, QAfterSortBy> thenByTextDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'text', Sort.desc);
});
}
QueryBuilder<Message, Message, QAfterSortBy> thenByTime() { QueryBuilder<Message, Message, QAfterSortBy> thenByTime() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'time', Sort.asc); return query.addSortBy(r'time', Sort.asc);
@@ -1041,9 +974,10 @@ extension MessageQueryWhereDistinct
}); });
} }
QueryBuilder<Message, Message, QDistinct> distinctByText() { QueryBuilder<Message, Message, QDistinct> distinctByText(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'text'); return query.addDistinctBy(r'text', caseSensitive: caseSensitive);
}); });
} }
@@ -1081,7 +1015,7 @@ extension MessageQueryProperty
}); });
} }
QueryBuilder<Message, List<String>, QQueryOperations> textProperty() { QueryBuilder<Message, String, QQueryOperations> textProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'text'); return query.addPropertyName(r'text');
}); });
@@ -1098,21 +1032,12 @@ extension MessageQueryProperty
// JsonSerializableGenerator // JsonSerializableGenerator
// ************************************************************************** // **************************************************************************
MessageMessage _$MessageMessageFromJson(Map<String, dynamic> json) =>
MessageMessage()
..mssg = Message.fromJson(json['mssg'] as Map<String, dynamic>);
Map<String, dynamic> _$MessageMessageToJson(MessageMessage instance) =>
<String, dynamic>{
'mssg': instance.mssg,
};
Message _$MessageFromJson(Map<String, dynamic> json) => Message() Message _$MessageFromJson(Map<String, dynamic> json) => Message()
..id = json['id'] as int ..id = json['id'] as int
..time = json['time'] as String ..time = json['time'] as String
..from = json['from'] as String ..from = json['from'] as String
..subj = json['subj'] as String ..subj = json['subj'] as String
..text = (json['text'] as List<dynamic>).map((e) => e as String).toList() ..text = json['text'] as String
..read = json['read'] as bool?; ..read = json['read'] as bool?;
Map<String, dynamic> _$MessageToJson(Message instance) => <String, dynamic>{ Map<String, dynamic> _$MessageToJson(Message instance) => <String, dynamic>{