Erweiterungen
This commit is contained in:
1 parent
f460763d53
commit
3578a4767a
3 files changed
+56
-149
No files matched your search
@@ -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
@@ -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
@@ -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>{
|
||||||
|
|||||||
Reference in new issue
Block a user