show multiple received messages stacked

This commit is contained in:
otsmr 2025-03-16 22:18:49 +01:00
parent 0b084f795a
commit 644e5125d8
6 changed files with 178 additions and 67 deletions

View file

@ -149,7 +149,17 @@ class _MessageSendStateIconState extends State<MessageSendStateIcon> {
if (icons.length == 2) { if (icons.length == 2) {
icon = Stack( icon = Stack(
children: icons, alignment: Alignment.center,
children: <Widget>[
// First icon (bottom icon)
icons[0],
Positioned(
top: 5.0,
left: 5.0,
child: icons[1],
),
// Second icon (top icon, slightly offset)
],
); );
} }

View file

@ -42,13 +42,13 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
Value<DateTime?> lastMessageSend = Value.absent(); Value<DateTime?> lastMessageSend = Value.absent();
Value<DateTime?> lastMessageReceived = Value.absent(); Value<DateTime?> lastMessageReceived = Value.absent();
Value<DateTime?> lastMessage = Value.absent(); Value<DateTime?> lastFlameCounterChange = Value.absent();
if (contact.lastMessage != null) { if (contact.lastFlameCounterChange != null) {
final now = DateTime.now(); final now = DateTime.now();
final startOfToday = DateTime(now.year, now.month, now.day); final startOfToday = DateTime(now.year, now.month, now.day);
if (contact.lastMessage!.isBefore(startOfToday)) { if (contact.lastFlameCounterChange!.isBefore(startOfToday)) {
// last flame update was yesterday. check if it can be updated. // last flame update was yesterday. check if it can be updated.
bool updateFlame = false; bool updateFlame = false;
if (received) { if (received) {
@ -62,12 +62,12 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
} }
if (updateFlame) { if (updateFlame) {
flameCounter += 1; flameCounter += 1;
lastMessage = Value(timestamp); lastFlameCounterChange = Value(timestamp);
} }
} }
} else { } else {
// There where no message until no... // There where no message until no...
lastMessage = Value(timestamp); lastFlameCounterChange = Value(timestamp);
} }
if (received) { if (received) {
@ -79,7 +79,7 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
return (update(contacts)..where((t) => t.userId.equals(contactId))).write( return (update(contacts)..where((t) => t.userId.equals(contactId))).write(
ContactsCompanion( ContactsCompanion(
totalMediaCounter: Value(totalMediaCounter), totalMediaCounter: Value(totalMediaCounter),
lastMessage: lastMessage, lastFlameCounterChange: lastFlameCounterChange,
lastMessageReceived: lastMessageReceived, lastMessageReceived: lastMessageReceived,
lastMessageSend: lastMessageSend, lastMessageSend: lastMessageSend,
flameCounter: Value(flameCounter), flameCounter: Value(flameCounter),
@ -100,6 +100,11 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
.write(updatedValues); .write(updatedValues);
} }
Future newMessageExchange(int userId) {
return updateContact(
userId, ContactsCompanion(lastMessageExchange: Value(DateTime.now())));
}
Stream<List<Contact>> watchNotAcceptedContacts() { Stream<List<Contact>> watchNotAcceptedContacts() {
return (select(contacts)..where((t) => t.accepted.equals(false))).watch(); return (select(contacts)..where((t) => t.accepted.equals(false))).watch();
// return (select(contacts)).watch(); // return (select(contacts)).watch();
@ -113,7 +118,7 @@ class ContactsDao extends DatabaseAccessor<TwonlyDatabase>
Stream<List<Contact>> watchContactsForChatList() { Stream<List<Contact>> watchContactsForChatList() {
return (select(contacts) return (select(contacts)
..where((t) => t.accepted.equals(true) & t.blocked.equals(false)) ..where((t) => t.accepted.equals(true) & t.blocked.equals(false))
..orderBy([(t) => OrderingTerm.desc(t.lastMessage)])) ..orderBy([(t) => OrderingTerm.desc(t.lastMessageExchange)]))
.watch(); .watch();
} }

View file

@ -1,5 +1,6 @@
import 'package:drift/drift.dart'; import 'package:drift/drift.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/database/tables/messages_table.dart'; import 'package:twonly/src/database/tables/messages_table.dart';
import 'package:twonly/src/database/twonly_database.dart'; import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/json_models/message.dart'; import 'package:twonly/src/json_models/message.dart';
@ -110,6 +111,8 @@ class MessagesDao extends DatabaseAccessor<TwonlyDatabase>
Future<int?> insertMessage(MessagesCompanion message) async { Future<int?> insertMessage(MessagesCompanion message) async {
try { try {
await twonlyDatabase.contactsDao
.newMessageExchange(message.contactId.value);
return await into(messages).insert(message); return await into(messages).insert(message);
} catch (e) { } catch (e) {
Logger("twonlyDatabase").shout("Error while inserting message: $e"); Logger("twonlyDatabase").shout("Error while inserting message: $e");

View file

@ -19,7 +19,9 @@ class Contacts extends Table {
DateTimeColumn get lastMessageSend => dateTime().nullable()(); DateTimeColumn get lastMessageSend => dateTime().nullable()();
DateTimeColumn get lastMessageReceived => dateTime().nullable()(); DateTimeColumn get lastMessageReceived => dateTime().nullable()();
DateTimeColumn get lastMessage => dateTime().nullable()(); DateTimeColumn get lastFlameCounterChange => dateTime().nullable()();
DateTimeColumn get lastMessageExchange =>
dateTime().withDefault(currentDateAndTime)();
IntColumn get flameCounter => integer().withDefault(Constant(0))(); IntColumn get flameCounter => integer().withDefault(Constant(0))();

View file

@ -101,12 +101,20 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
late final GeneratedColumn<DateTime> lastMessageReceived = late final GeneratedColumn<DateTime> lastMessageReceived =
GeneratedColumn<DateTime>('last_message_received', aliasedName, true, GeneratedColumn<DateTime>('last_message_received', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false); type: DriftSqlType.dateTime, requiredDuringInsert: false);
static const VerificationMeta _lastMessageMeta = static const VerificationMeta _lastFlameCounterChangeMeta =
const VerificationMeta('lastMessage'); const VerificationMeta('lastFlameCounterChange');
@override @override
late final GeneratedColumn<DateTime> lastMessage = GeneratedColumn<DateTime>( late final GeneratedColumn<DateTime> lastFlameCounterChange =
'last_message', aliasedName, true, GeneratedColumn<DateTime>('last_flame_counter_change', aliasedName, true,
type: DriftSqlType.dateTime, requiredDuringInsert: false); type: DriftSqlType.dateTime, requiredDuringInsert: false);
static const VerificationMeta _lastMessageExchangeMeta =
const VerificationMeta('lastMessageExchange');
@override
late final GeneratedColumn<DateTime> lastMessageExchange =
GeneratedColumn<DateTime>('last_message_exchange', aliasedName, false,
type: DriftSqlType.dateTime,
requiredDuringInsert: false,
defaultValue: currentDateAndTime);
static const VerificationMeta _flameCounterMeta = static const VerificationMeta _flameCounterMeta =
const VerificationMeta('flameCounter'); const VerificationMeta('flameCounter');
@override @override
@ -129,7 +137,8 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
totalMediaCounter, totalMediaCounter,
lastMessageSend, lastMessageSend,
lastMessageReceived, lastMessageReceived,
lastMessage, lastFlameCounterChange,
lastMessageExchange,
flameCounter flameCounter
]; ];
@override @override
@ -200,11 +209,17 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
lastMessageReceived.isAcceptableOrUnknown( lastMessageReceived.isAcceptableOrUnknown(
data['last_message_received']!, _lastMessageReceivedMeta)); data['last_message_received']!, _lastMessageReceivedMeta));
} }
if (data.containsKey('last_message')) { if (data.containsKey('last_flame_counter_change')) {
context.handle( context.handle(
_lastMessageMeta, _lastFlameCounterChangeMeta,
lastMessage.isAcceptableOrUnknown( lastFlameCounterChange.isAcceptableOrUnknown(
data['last_message']!, _lastMessageMeta)); data['last_flame_counter_change']!, _lastFlameCounterChangeMeta));
}
if (data.containsKey('last_message_exchange')) {
context.handle(
_lastMessageExchangeMeta,
lastMessageExchange.isAcceptableOrUnknown(
data['last_message_exchange']!, _lastMessageExchangeMeta));
} }
if (data.containsKey('flame_counter')) { if (data.containsKey('flame_counter')) {
context.handle( context.handle(
@ -246,8 +261,12 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
lastMessageReceived: attachedDatabase.typeMapping.read( lastMessageReceived: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime, DriftSqlType.dateTime,
data['${effectivePrefix}last_message_received']), data['${effectivePrefix}last_message_received']),
lastMessage: attachedDatabase.typeMapping lastFlameCounterChange: attachedDatabase.typeMapping.read(
.read(DriftSqlType.dateTime, data['${effectivePrefix}last_message']), DriftSqlType.dateTime,
data['${effectivePrefix}last_flame_counter_change']),
lastMessageExchange: attachedDatabase.typeMapping.read(
DriftSqlType.dateTime,
data['${effectivePrefix}last_message_exchange'])!,
flameCounter: attachedDatabase.typeMapping flameCounter: attachedDatabase.typeMapping
.read(DriftSqlType.int, data['${effectivePrefix}flame_counter'])!, .read(DriftSqlType.int, data['${effectivePrefix}flame_counter'])!,
); );
@ -272,7 +291,8 @@ class Contact extends DataClass implements Insertable<Contact> {
final int totalMediaCounter; final int totalMediaCounter;
final DateTime? lastMessageSend; final DateTime? lastMessageSend;
final DateTime? lastMessageReceived; final DateTime? lastMessageReceived;
final DateTime? lastMessage; final DateTime? lastFlameCounterChange;
final DateTime lastMessageExchange;
final int flameCounter; final int flameCounter;
const Contact( const Contact(
{required this.userId, {required this.userId,
@ -287,7 +307,8 @@ class Contact extends DataClass implements Insertable<Contact> {
required this.totalMediaCounter, required this.totalMediaCounter,
this.lastMessageSend, this.lastMessageSend,
this.lastMessageReceived, this.lastMessageReceived,
this.lastMessage, this.lastFlameCounterChange,
required this.lastMessageExchange,
required this.flameCounter}); required this.flameCounter});
@override @override
Map<String, Expression> toColumns(bool nullToAbsent) { Map<String, Expression> toColumns(bool nullToAbsent) {
@ -312,9 +333,11 @@ class Contact extends DataClass implements Insertable<Contact> {
if (!nullToAbsent || lastMessageReceived != null) { if (!nullToAbsent || lastMessageReceived != null) {
map['last_message_received'] = Variable<DateTime>(lastMessageReceived); map['last_message_received'] = Variable<DateTime>(lastMessageReceived);
} }
if (!nullToAbsent || lastMessage != null) { if (!nullToAbsent || lastFlameCounterChange != null) {
map['last_message'] = Variable<DateTime>(lastMessage); map['last_flame_counter_change'] =
Variable<DateTime>(lastFlameCounterChange);
} }
map['last_message_exchange'] = Variable<DateTime>(lastMessageExchange);
map['flame_counter'] = Variable<int>(flameCounter); map['flame_counter'] = Variable<int>(flameCounter);
return map; return map;
} }
@ -341,9 +364,10 @@ class Contact extends DataClass implements Insertable<Contact> {
lastMessageReceived: lastMessageReceived == null && nullToAbsent lastMessageReceived: lastMessageReceived == null && nullToAbsent
? const Value.absent() ? const Value.absent()
: Value(lastMessageReceived), : Value(lastMessageReceived),
lastMessage: lastMessage == null && nullToAbsent lastFlameCounterChange: lastFlameCounterChange == null && nullToAbsent
? const Value.absent() ? const Value.absent()
: Value(lastMessage), : Value(lastFlameCounterChange),
lastMessageExchange: Value(lastMessageExchange),
flameCounter: Value(flameCounter), flameCounter: Value(flameCounter),
); );
} }
@ -365,7 +389,10 @@ class Contact extends DataClass implements Insertable<Contact> {
lastMessageSend: serializer.fromJson<DateTime?>(json['lastMessageSend']), lastMessageSend: serializer.fromJson<DateTime?>(json['lastMessageSend']),
lastMessageReceived: lastMessageReceived:
serializer.fromJson<DateTime?>(json['lastMessageReceived']), serializer.fromJson<DateTime?>(json['lastMessageReceived']),
lastMessage: serializer.fromJson<DateTime?>(json['lastMessage']), lastFlameCounterChange:
serializer.fromJson<DateTime?>(json['lastFlameCounterChange']),
lastMessageExchange:
serializer.fromJson<DateTime>(json['lastMessageExchange']),
flameCounter: serializer.fromJson<int>(json['flameCounter']), flameCounter: serializer.fromJson<int>(json['flameCounter']),
); );
} }
@ -385,7 +412,9 @@ class Contact extends DataClass implements Insertable<Contact> {
'totalMediaCounter': serializer.toJson<int>(totalMediaCounter), 'totalMediaCounter': serializer.toJson<int>(totalMediaCounter),
'lastMessageSend': serializer.toJson<DateTime?>(lastMessageSend), 'lastMessageSend': serializer.toJson<DateTime?>(lastMessageSend),
'lastMessageReceived': serializer.toJson<DateTime?>(lastMessageReceived), 'lastMessageReceived': serializer.toJson<DateTime?>(lastMessageReceived),
'lastMessage': serializer.toJson<DateTime?>(lastMessage), 'lastFlameCounterChange':
serializer.toJson<DateTime?>(lastFlameCounterChange),
'lastMessageExchange': serializer.toJson<DateTime>(lastMessageExchange),
'flameCounter': serializer.toJson<int>(flameCounter), 'flameCounter': serializer.toJson<int>(flameCounter),
}; };
} }
@ -403,7 +432,8 @@ class Contact extends DataClass implements Insertable<Contact> {
int? totalMediaCounter, int? totalMediaCounter,
Value<DateTime?> lastMessageSend = const Value.absent(), Value<DateTime?> lastMessageSend = const Value.absent(),
Value<DateTime?> lastMessageReceived = const Value.absent(), Value<DateTime?> lastMessageReceived = const Value.absent(),
Value<DateTime?> lastMessage = const Value.absent(), Value<DateTime?> lastFlameCounterChange = const Value.absent(),
DateTime? lastMessageExchange,
int? flameCounter}) => int? flameCounter}) =>
Contact( Contact(
userId: userId ?? this.userId, userId: userId ?? this.userId,
@ -422,7 +452,10 @@ class Contact extends DataClass implements Insertable<Contact> {
lastMessageReceived: lastMessageReceived.present lastMessageReceived: lastMessageReceived.present
? lastMessageReceived.value ? lastMessageReceived.value
: this.lastMessageReceived, : this.lastMessageReceived,
lastMessage: lastMessage.present ? lastMessage.value : this.lastMessage, lastFlameCounterChange: lastFlameCounterChange.present
? lastFlameCounterChange.value
: this.lastFlameCounterChange,
lastMessageExchange: lastMessageExchange ?? this.lastMessageExchange,
flameCounter: flameCounter ?? this.flameCounter, flameCounter: flameCounter ?? this.flameCounter,
); );
Contact copyWithCompanion(ContactsCompanion data) { Contact copyWithCompanion(ContactsCompanion data) {
@ -446,8 +479,12 @@ class Contact extends DataClass implements Insertable<Contact> {
lastMessageReceived: data.lastMessageReceived.present lastMessageReceived: data.lastMessageReceived.present
? data.lastMessageReceived.value ? data.lastMessageReceived.value
: this.lastMessageReceived, : this.lastMessageReceived,
lastMessage: lastFlameCounterChange: data.lastFlameCounterChange.present
data.lastMessage.present ? data.lastMessage.value : this.lastMessage, ? data.lastFlameCounterChange.value
: this.lastFlameCounterChange,
lastMessageExchange: data.lastMessageExchange.present
? data.lastMessageExchange.value
: this.lastMessageExchange,
flameCounter: data.flameCounter.present flameCounter: data.flameCounter.present
? data.flameCounter.value ? data.flameCounter.value
: this.flameCounter, : this.flameCounter,
@ -469,7 +506,8 @@ class Contact extends DataClass implements Insertable<Contact> {
..write('totalMediaCounter: $totalMediaCounter, ') ..write('totalMediaCounter: $totalMediaCounter, ')
..write('lastMessageSend: $lastMessageSend, ') ..write('lastMessageSend: $lastMessageSend, ')
..write('lastMessageReceived: $lastMessageReceived, ') ..write('lastMessageReceived: $lastMessageReceived, ')
..write('lastMessage: $lastMessage, ') ..write('lastFlameCounterChange: $lastFlameCounterChange, ')
..write('lastMessageExchange: $lastMessageExchange, ')
..write('flameCounter: $flameCounter') ..write('flameCounter: $flameCounter')
..write(')')) ..write(')'))
.toString(); .toString();
@ -489,7 +527,8 @@ class Contact extends DataClass implements Insertable<Contact> {
totalMediaCounter, totalMediaCounter,
lastMessageSend, lastMessageSend,
lastMessageReceived, lastMessageReceived,
lastMessage, lastFlameCounterChange,
lastMessageExchange,
flameCounter); flameCounter);
@override @override
bool operator ==(Object other) => bool operator ==(Object other) =>
@ -507,7 +546,8 @@ class Contact extends DataClass implements Insertable<Contact> {
other.totalMediaCounter == this.totalMediaCounter && other.totalMediaCounter == this.totalMediaCounter &&
other.lastMessageSend == this.lastMessageSend && other.lastMessageSend == this.lastMessageSend &&
other.lastMessageReceived == this.lastMessageReceived && other.lastMessageReceived == this.lastMessageReceived &&
other.lastMessage == this.lastMessage && other.lastFlameCounterChange == this.lastFlameCounterChange &&
other.lastMessageExchange == this.lastMessageExchange &&
other.flameCounter == this.flameCounter); other.flameCounter == this.flameCounter);
} }
@ -524,7 +564,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
final Value<int> totalMediaCounter; final Value<int> totalMediaCounter;
final Value<DateTime?> lastMessageSend; final Value<DateTime?> lastMessageSend;
final Value<DateTime?> lastMessageReceived; final Value<DateTime?> lastMessageReceived;
final Value<DateTime?> lastMessage; final Value<DateTime?> lastFlameCounterChange;
final Value<DateTime> lastMessageExchange;
final Value<int> flameCounter; final Value<int> flameCounter;
const ContactsCompanion({ const ContactsCompanion({
this.userId = const Value.absent(), this.userId = const Value.absent(),
@ -539,7 +580,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
this.totalMediaCounter = const Value.absent(), this.totalMediaCounter = const Value.absent(),
this.lastMessageSend = const Value.absent(), this.lastMessageSend = const Value.absent(),
this.lastMessageReceived = const Value.absent(), this.lastMessageReceived = const Value.absent(),
this.lastMessage = const Value.absent(), this.lastFlameCounterChange = const Value.absent(),
this.lastMessageExchange = const Value.absent(),
this.flameCounter = const Value.absent(), this.flameCounter = const Value.absent(),
}); });
ContactsCompanion.insert({ ContactsCompanion.insert({
@ -555,7 +597,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
this.totalMediaCounter = const Value.absent(), this.totalMediaCounter = const Value.absent(),
this.lastMessageSend = const Value.absent(), this.lastMessageSend = const Value.absent(),
this.lastMessageReceived = const Value.absent(), this.lastMessageReceived = const Value.absent(),
this.lastMessage = const Value.absent(), this.lastFlameCounterChange = const Value.absent(),
this.lastMessageExchange = const Value.absent(),
this.flameCounter = const Value.absent(), this.flameCounter = const Value.absent(),
}) : username = Value(username); }) : username = Value(username);
static Insertable<Contact> custom({ static Insertable<Contact> custom({
@ -571,7 +614,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
Expression<int>? totalMediaCounter, Expression<int>? totalMediaCounter,
Expression<DateTime>? lastMessageSend, Expression<DateTime>? lastMessageSend,
Expression<DateTime>? lastMessageReceived, Expression<DateTime>? lastMessageReceived,
Expression<DateTime>? lastMessage, Expression<DateTime>? lastFlameCounterChange,
Expression<DateTime>? lastMessageExchange,
Expression<int>? flameCounter, Expression<int>? flameCounter,
}) { }) {
return RawValuesInsertable({ return RawValuesInsertable({
@ -588,7 +632,10 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
if (lastMessageSend != null) 'last_message_send': lastMessageSend, if (lastMessageSend != null) 'last_message_send': lastMessageSend,
if (lastMessageReceived != null) if (lastMessageReceived != null)
'last_message_received': lastMessageReceived, 'last_message_received': lastMessageReceived,
if (lastMessage != null) 'last_message': lastMessage, if (lastFlameCounterChange != null)
'last_flame_counter_change': lastFlameCounterChange,
if (lastMessageExchange != null)
'last_message_exchange': lastMessageExchange,
if (flameCounter != null) 'flame_counter': flameCounter, if (flameCounter != null) 'flame_counter': flameCounter,
}); });
} }
@ -606,7 +653,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
Value<int>? totalMediaCounter, Value<int>? totalMediaCounter,
Value<DateTime?>? lastMessageSend, Value<DateTime?>? lastMessageSend,
Value<DateTime?>? lastMessageReceived, Value<DateTime?>? lastMessageReceived,
Value<DateTime?>? lastMessage, Value<DateTime?>? lastFlameCounterChange,
Value<DateTime>? lastMessageExchange,
Value<int>? flameCounter}) { Value<int>? flameCounter}) {
return ContactsCompanion( return ContactsCompanion(
userId: userId ?? this.userId, userId: userId ?? this.userId,
@ -621,7 +669,9 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
totalMediaCounter: totalMediaCounter ?? this.totalMediaCounter, totalMediaCounter: totalMediaCounter ?? this.totalMediaCounter,
lastMessageSend: lastMessageSend ?? this.lastMessageSend, lastMessageSend: lastMessageSend ?? this.lastMessageSend,
lastMessageReceived: lastMessageReceived ?? this.lastMessageReceived, lastMessageReceived: lastMessageReceived ?? this.lastMessageReceived,
lastMessage: lastMessage ?? this.lastMessage, lastFlameCounterChange:
lastFlameCounterChange ?? this.lastFlameCounterChange,
lastMessageExchange: lastMessageExchange ?? this.lastMessageExchange,
flameCounter: flameCounter ?? this.flameCounter, flameCounter: flameCounter ?? this.flameCounter,
); );
} }
@ -666,8 +716,13 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
map['last_message_received'] = map['last_message_received'] =
Variable<DateTime>(lastMessageReceived.value); Variable<DateTime>(lastMessageReceived.value);
} }
if (lastMessage.present) { if (lastFlameCounterChange.present) {
map['last_message'] = Variable<DateTime>(lastMessage.value); map['last_flame_counter_change'] =
Variable<DateTime>(lastFlameCounterChange.value);
}
if (lastMessageExchange.present) {
map['last_message_exchange'] =
Variable<DateTime>(lastMessageExchange.value);
} }
if (flameCounter.present) { if (flameCounter.present) {
map['flame_counter'] = Variable<int>(flameCounter.value); map['flame_counter'] = Variable<int>(flameCounter.value);
@ -690,7 +745,8 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
..write('totalMediaCounter: $totalMediaCounter, ') ..write('totalMediaCounter: $totalMediaCounter, ')
..write('lastMessageSend: $lastMessageSend, ') ..write('lastMessageSend: $lastMessageSend, ')
..write('lastMessageReceived: $lastMessageReceived, ') ..write('lastMessageReceived: $lastMessageReceived, ')
..write('lastMessage: $lastMessage, ') ..write('lastFlameCounterChange: $lastFlameCounterChange, ')
..write('lastMessageExchange: $lastMessageExchange, ')
..write('flameCounter: $flameCounter') ..write('flameCounter: $flameCounter')
..write(')')) ..write(')'))
.toString(); .toString();
@ -2400,7 +2456,8 @@ typedef $$ContactsTableCreateCompanionBuilder = ContactsCompanion Function({
Value<int> totalMediaCounter, Value<int> totalMediaCounter,
Value<DateTime?> lastMessageSend, Value<DateTime?> lastMessageSend,
Value<DateTime?> lastMessageReceived, Value<DateTime?> lastMessageReceived,
Value<DateTime?> lastMessage, Value<DateTime?> lastFlameCounterChange,
Value<DateTime> lastMessageExchange,
Value<int> flameCounter, Value<int> flameCounter,
}); });
typedef $$ContactsTableUpdateCompanionBuilder = ContactsCompanion Function({ typedef $$ContactsTableUpdateCompanionBuilder = ContactsCompanion Function({
@ -2416,7 +2473,8 @@ typedef $$ContactsTableUpdateCompanionBuilder = ContactsCompanion Function({
Value<int> totalMediaCounter, Value<int> totalMediaCounter,
Value<DateTime?> lastMessageSend, Value<DateTime?> lastMessageSend,
Value<DateTime?> lastMessageReceived, Value<DateTime?> lastMessageReceived,
Value<DateTime?> lastMessage, Value<DateTime?> lastFlameCounterChange,
Value<DateTime> lastMessageExchange,
Value<int> flameCounter, Value<int> flameCounter,
}); });
@ -2488,8 +2546,13 @@ class $$ContactsTableFilterComposer
column: $table.lastMessageReceived, column: $table.lastMessageReceived,
builder: (column) => ColumnFilters(column)); builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get lastMessage => $composableBuilder( ColumnFilters<DateTime> get lastFlameCounterChange => $composableBuilder(
column: $table.lastMessage, builder: (column) => ColumnFilters(column)); column: $table.lastFlameCounterChange,
builder: (column) => ColumnFilters(column));
ColumnFilters<DateTime> get lastMessageExchange => $composableBuilder(
column: $table.lastMessageExchange,
builder: (column) => ColumnFilters(column));
ColumnFilters<int> get flameCounter => $composableBuilder( ColumnFilters<int> get flameCounter => $composableBuilder(
column: $table.flameCounter, builder: (column) => ColumnFilters(column)); column: $table.flameCounter, builder: (column) => ColumnFilters(column));
@ -2564,8 +2627,13 @@ class $$ContactsTableOrderingComposer
column: $table.lastMessageReceived, column: $table.lastMessageReceived,
builder: (column) => ColumnOrderings(column)); builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get lastMessage => $composableBuilder( ColumnOrderings<DateTime> get lastFlameCounterChange => $composableBuilder(
column: $table.lastMessage, builder: (column) => ColumnOrderings(column)); column: $table.lastFlameCounterChange,
builder: (column) => ColumnOrderings(column));
ColumnOrderings<DateTime> get lastMessageExchange => $composableBuilder(
column: $table.lastMessageExchange,
builder: (column) => ColumnOrderings(column));
ColumnOrderings<int> get flameCounter => $composableBuilder( ColumnOrderings<int> get flameCounter => $composableBuilder(
column: $table.flameCounter, column: $table.flameCounter,
@ -2617,8 +2685,11 @@ class $$ContactsTableAnnotationComposer
GeneratedColumn<DateTime> get lastMessageReceived => $composableBuilder( GeneratedColumn<DateTime> get lastMessageReceived => $composableBuilder(
column: $table.lastMessageReceived, builder: (column) => column); column: $table.lastMessageReceived, builder: (column) => column);
GeneratedColumn<DateTime> get lastMessage => $composableBuilder( GeneratedColumn<DateTime> get lastFlameCounterChange => $composableBuilder(
column: $table.lastMessage, builder: (column) => column); column: $table.lastFlameCounterChange, builder: (column) => column);
GeneratedColumn<DateTime> get lastMessageExchange => $composableBuilder(
column: $table.lastMessageExchange, builder: (column) => column);
GeneratedColumn<int> get flameCounter => $composableBuilder( GeneratedColumn<int> get flameCounter => $composableBuilder(
column: $table.flameCounter, builder: (column) => column); column: $table.flameCounter, builder: (column) => column);
@ -2680,7 +2751,8 @@ class $$ContactsTableTableManager extends RootTableManager<
Value<int> totalMediaCounter = const Value.absent(), Value<int> totalMediaCounter = const Value.absent(),
Value<DateTime?> lastMessageSend = const Value.absent(), Value<DateTime?> lastMessageSend = const Value.absent(),
Value<DateTime?> lastMessageReceived = const Value.absent(), Value<DateTime?> lastMessageReceived = const Value.absent(),
Value<DateTime?> lastMessage = const Value.absent(), Value<DateTime?> lastFlameCounterChange = const Value.absent(),
Value<DateTime> lastMessageExchange = const Value.absent(),
Value<int> flameCounter = const Value.absent(), Value<int> flameCounter = const Value.absent(),
}) => }) =>
ContactsCompanion( ContactsCompanion(
@ -2696,7 +2768,8 @@ class $$ContactsTableTableManager extends RootTableManager<
totalMediaCounter: totalMediaCounter, totalMediaCounter: totalMediaCounter,
lastMessageSend: lastMessageSend, lastMessageSend: lastMessageSend,
lastMessageReceived: lastMessageReceived, lastMessageReceived: lastMessageReceived,
lastMessage: lastMessage, lastFlameCounterChange: lastFlameCounterChange,
lastMessageExchange: lastMessageExchange,
flameCounter: flameCounter, flameCounter: flameCounter,
), ),
createCompanionCallback: ({ createCompanionCallback: ({
@ -2712,7 +2785,8 @@ class $$ContactsTableTableManager extends RootTableManager<
Value<int> totalMediaCounter = const Value.absent(), Value<int> totalMediaCounter = const Value.absent(),
Value<DateTime?> lastMessageSend = const Value.absent(), Value<DateTime?> lastMessageSend = const Value.absent(),
Value<DateTime?> lastMessageReceived = const Value.absent(), Value<DateTime?> lastMessageReceived = const Value.absent(),
Value<DateTime?> lastMessage = const Value.absent(), Value<DateTime?> lastFlameCounterChange = const Value.absent(),
Value<DateTime> lastMessageExchange = const Value.absent(),
Value<int> flameCounter = const Value.absent(), Value<int> flameCounter = const Value.absent(),
}) => }) =>
ContactsCompanion.insert( ContactsCompanion.insert(
@ -2728,7 +2802,8 @@ class $$ContactsTableTableManager extends RootTableManager<
totalMediaCounter: totalMediaCounter, totalMediaCounter: totalMediaCounter,
lastMessageSend: lastMessageSend, lastMessageSend: lastMessageSend,
lastMessageReceived: lastMessageReceived, lastMessageReceived: lastMessageReceived,
lastMessage: lastMessage, lastFlameCounterChange: lastFlameCounterChange,
lastMessageExchange: lastMessageExchange,
flameCounter: flameCounter, flameCounter: flameCounter,
), ),
withReferenceMapper: (p0) => p0 withReferenceMapper: (p0) => p0

View file

@ -212,19 +212,35 @@ class _UserListItem extends State<UserListItem> {
if (notOpenedMessagesSnapshot.data != null && if (notOpenedMessagesSnapshot.data != null &&
notOpenedMessagesSnapshot.data!.isNotEmpty) { notOpenedMessagesSnapshot.data!.isNotEmpty) {
// filter first for only received messages // filter first for only received messages
lastMessages = notOpenedMessagesSnapshot.data! var notOpenedMessages = notOpenedMessagesSnapshot.data!;
lastMessages = notOpenedMessages
.where((x) => x.messageOtherId != null) .where((x) => x.messageOtherId != null)
.toList(); .toList();
if (lastMessages.isEmpty) {
lastMessages = notOpenedMessagesSnapshot.data!;
}
var media = // For send images show only one
lastMessages.where((x) => x.kind == MessageKind.media); if (lastMessages.isEmpty) {
if (media.isNotEmpty) { var media = notOpenedMessages
currentMessage = media.first; .where((x) => x.kind == MessageKind.media);
if (media.isNotEmpty) {
currentMessage = media.first;
lastMessages = [currentMessage!];
} else {
currentMessage = notOpenedMessages.first;
lastMessages = [currentMessage!];
}
} else { } else {
currentMessage = lastMessages.first; // there are multiple messages received
var media =
lastMessages.where((x) => x.kind == MessageKind.media);
if (media.isNotEmpty) {
currentMessage = media.first;
} else {
currentMessage = lastMessages.first;
}
} }
} else { } else {
currentMessage = lastMessage; currentMessage = lastMessage;