mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 14:48:41 +00:00
fix #131
This commit is contained in:
parent
776108d9e7
commit
580dc3c3cf
16 changed files with 3331 additions and 55 deletions
1
drift_schemas/twonly_database/drift_schema_v7.json
Normal file
1
drift_schemas/twonly_database/drift_schema_v7.json
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -15,6 +15,7 @@ class Contacts extends Table {
|
||||||
BoolColumn get blocked => boolean().withDefault(Constant(false))();
|
BoolColumn get blocked => boolean().withDefault(Constant(false))();
|
||||||
BoolColumn get verified => boolean().withDefault(Constant(false))();
|
BoolColumn get verified => boolean().withDefault(Constant(false))();
|
||||||
BoolColumn get archived => boolean().withDefault(Constant(false))();
|
BoolColumn get archived => boolean().withDefault(Constant(false))();
|
||||||
|
BoolColumn get pinned => boolean().withDefault(Constant(false))();
|
||||||
|
|
||||||
IntColumn get deleteMessagesAfterXMinutes =>
|
IntColumn get deleteMessagesAfterXMinutes =>
|
||||||
integer().withDefault(Constant(60 * 24))();
|
integer().withDefault(Constant(60 * 24))();
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ class TwonlyDatabase extends _$TwonlyDatabase {
|
||||||
TwonlyDatabase.forTesting(DatabaseConnection super.connection);
|
TwonlyDatabase.forTesting(DatabaseConnection super.connection);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get schemaVersion => 6;
|
int get schemaVersion => 7;
|
||||||
|
|
||||||
static QueryExecutor _openConnection() {
|
static QueryExecutor _openConnection() {
|
||||||
return driftDatabase(
|
return driftDatabase(
|
||||||
|
|
@ -57,21 +57,30 @@ class TwonlyDatabase extends _$TwonlyDatabase {
|
||||||
@override
|
@override
|
||||||
MigrationStrategy get migration {
|
MigrationStrategy get migration {
|
||||||
return MigrationStrategy(
|
return MigrationStrategy(
|
||||||
onUpgrade: stepByStep(from1To2: (m, schema) async {
|
onUpgrade: stepByStep(
|
||||||
|
from1To2: (m, schema) async {
|
||||||
m.addColumn(schema.messages, schema.messages.errorWhileSending);
|
m.addColumn(schema.messages, schema.messages.errorWhileSending);
|
||||||
}, from2To3: (m, schema) async {
|
},
|
||||||
|
from2To3: (m, schema) async {
|
||||||
m.addColumn(schema.contacts, schema.contacts.archived);
|
m.addColumn(schema.contacts, schema.contacts.archived);
|
||||||
m.addColumn(
|
m.addColumn(
|
||||||
schema.contacts, schema.contacts.deleteMessagesAfterXMinutes);
|
schema.contacts, schema.contacts.deleteMessagesAfterXMinutes);
|
||||||
}, from3To4: (m, schema) async {
|
},
|
||||||
|
from3To4: (m, schema) async {
|
||||||
m.createTable(mediaUploads);
|
m.createTable(mediaUploads);
|
||||||
}, from4To5: (m, schema) async {
|
},
|
||||||
|
from4To5: (m, schema) async {
|
||||||
m.createTable(mediaDownloads);
|
m.createTable(mediaDownloads);
|
||||||
m.addColumn(schema.messages, schema.messages.mediaDownloadId);
|
m.addColumn(schema.messages, schema.messages.mediaDownloadId);
|
||||||
m.addColumn(schema.messages, schema.messages.mediaUploadId);
|
m.addColumn(schema.messages, schema.messages.mediaUploadId);
|
||||||
}, from5To6: (m, schema) async {
|
},
|
||||||
|
from5To6: (m, schema) async {
|
||||||
m.addColumn(schema.messages, schema.messages.mediaStored);
|
m.addColumn(schema.messages, schema.messages.mediaStored);
|
||||||
}),
|
},
|
||||||
|
from6To7: (m, schema) async {
|
||||||
|
m.addColumn(schema.contacts, schema.contacts.pinned);
|
||||||
|
},
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,15 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
|
||||||
defaultConstraints:
|
defaultConstraints:
|
||||||
GeneratedColumn.constraintIsAlways('CHECK ("archived" IN (0, 1))'),
|
GeneratedColumn.constraintIsAlways('CHECK ("archived" IN (0, 1))'),
|
||||||
defaultValue: Constant(false));
|
defaultValue: Constant(false));
|
||||||
|
static const VerificationMeta _pinnedMeta = const VerificationMeta('pinned');
|
||||||
|
@override
|
||||||
|
late final GeneratedColumn<bool> pinned = GeneratedColumn<bool>(
|
||||||
|
'pinned', aliasedName, false,
|
||||||
|
type: DriftSqlType.bool,
|
||||||
|
requiredDuringInsert: false,
|
||||||
|
defaultConstraints:
|
||||||
|
GeneratedColumn.constraintIsAlways('CHECK ("pinned" IN (0, 1))'),
|
||||||
|
defaultValue: Constant(false));
|
||||||
static const VerificationMeta _deleteMessagesAfterXMinutesMeta =
|
static const VerificationMeta _deleteMessagesAfterXMinutesMeta =
|
||||||
const VerificationMeta('deleteMessagesAfterXMinutes');
|
const VerificationMeta('deleteMessagesAfterXMinutes');
|
||||||
@override
|
@override
|
||||||
|
|
@ -169,6 +178,7 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
|
||||||
blocked,
|
blocked,
|
||||||
verified,
|
verified,
|
||||||
archived,
|
archived,
|
||||||
|
pinned,
|
||||||
deleteMessagesAfterXMinutes,
|
deleteMessagesAfterXMinutes,
|
||||||
createdAt,
|
createdAt,
|
||||||
totalMediaCounter,
|
totalMediaCounter,
|
||||||
|
|
@ -238,6 +248,10 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
|
||||||
context.handle(_archivedMeta,
|
context.handle(_archivedMeta,
|
||||||
archived.isAcceptableOrUnknown(data['archived']!, _archivedMeta));
|
archived.isAcceptableOrUnknown(data['archived']!, _archivedMeta));
|
||||||
}
|
}
|
||||||
|
if (data.containsKey('pinned')) {
|
||||||
|
context.handle(_pinnedMeta,
|
||||||
|
pinned.isAcceptableOrUnknown(data['pinned']!, _pinnedMeta));
|
||||||
|
}
|
||||||
if (data.containsKey('delete_messages_after_x_minutes')) {
|
if (data.containsKey('delete_messages_after_x_minutes')) {
|
||||||
context.handle(
|
context.handle(
|
||||||
_deleteMessagesAfterXMinutesMeta,
|
_deleteMessagesAfterXMinutesMeta,
|
||||||
|
|
@ -316,6 +330,8 @@ class $ContactsTable extends Contacts with TableInfo<$ContactsTable, Contact> {
|
||||||
.read(DriftSqlType.bool, data['${effectivePrefix}verified'])!,
|
.read(DriftSqlType.bool, data['${effectivePrefix}verified'])!,
|
||||||
archived: attachedDatabase.typeMapping
|
archived: attachedDatabase.typeMapping
|
||||||
.read(DriftSqlType.bool, data['${effectivePrefix}archived'])!,
|
.read(DriftSqlType.bool, data['${effectivePrefix}archived'])!,
|
||||||
|
pinned: attachedDatabase.typeMapping
|
||||||
|
.read(DriftSqlType.bool, data['${effectivePrefix}pinned'])!,
|
||||||
deleteMessagesAfterXMinutes: attachedDatabase.typeMapping.read(
|
deleteMessagesAfterXMinutes: attachedDatabase.typeMapping.read(
|
||||||
DriftSqlType.int,
|
DriftSqlType.int,
|
||||||
data['${effectivePrefix}delete_messages_after_x_minutes'])!,
|
data['${effectivePrefix}delete_messages_after_x_minutes'])!,
|
||||||
|
|
@ -357,6 +373,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
final bool blocked;
|
final bool blocked;
|
||||||
final bool verified;
|
final bool verified;
|
||||||
final bool archived;
|
final bool archived;
|
||||||
|
final bool pinned;
|
||||||
final int deleteMessagesAfterXMinutes;
|
final int deleteMessagesAfterXMinutes;
|
||||||
final DateTime createdAt;
|
final DateTime createdAt;
|
||||||
final int totalMediaCounter;
|
final int totalMediaCounter;
|
||||||
|
|
@ -377,6 +394,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
required this.blocked,
|
required this.blocked,
|
||||||
required this.verified,
|
required this.verified,
|
||||||
required this.archived,
|
required this.archived,
|
||||||
|
required this.pinned,
|
||||||
required this.deleteMessagesAfterXMinutes,
|
required this.deleteMessagesAfterXMinutes,
|
||||||
required this.createdAt,
|
required this.createdAt,
|
||||||
required this.totalMediaCounter,
|
required this.totalMediaCounter,
|
||||||
|
|
@ -405,6 +423,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
map['blocked'] = Variable<bool>(blocked);
|
map['blocked'] = Variable<bool>(blocked);
|
||||||
map['verified'] = Variable<bool>(verified);
|
map['verified'] = Variable<bool>(verified);
|
||||||
map['archived'] = Variable<bool>(archived);
|
map['archived'] = Variable<bool>(archived);
|
||||||
|
map['pinned'] = Variable<bool>(pinned);
|
||||||
map['delete_messages_after_x_minutes'] =
|
map['delete_messages_after_x_minutes'] =
|
||||||
Variable<int>(deleteMessagesAfterXMinutes);
|
Variable<int>(deleteMessagesAfterXMinutes);
|
||||||
map['created_at'] = Variable<DateTime>(createdAt);
|
map['created_at'] = Variable<DateTime>(createdAt);
|
||||||
|
|
@ -443,6 +462,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
blocked: Value(blocked),
|
blocked: Value(blocked),
|
||||||
verified: Value(verified),
|
verified: Value(verified),
|
||||||
archived: Value(archived),
|
archived: Value(archived),
|
||||||
|
pinned: Value(pinned),
|
||||||
deleteMessagesAfterXMinutes: Value(deleteMessagesAfterXMinutes),
|
deleteMessagesAfterXMinutes: Value(deleteMessagesAfterXMinutes),
|
||||||
createdAt: Value(createdAt),
|
createdAt: Value(createdAt),
|
||||||
totalMediaCounter: Value(totalMediaCounter),
|
totalMediaCounter: Value(totalMediaCounter),
|
||||||
|
|
@ -475,6 +495,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
blocked: serializer.fromJson<bool>(json['blocked']),
|
blocked: serializer.fromJson<bool>(json['blocked']),
|
||||||
verified: serializer.fromJson<bool>(json['verified']),
|
verified: serializer.fromJson<bool>(json['verified']),
|
||||||
archived: serializer.fromJson<bool>(json['archived']),
|
archived: serializer.fromJson<bool>(json['archived']),
|
||||||
|
pinned: serializer.fromJson<bool>(json['pinned']),
|
||||||
deleteMessagesAfterXMinutes:
|
deleteMessagesAfterXMinutes:
|
||||||
serializer.fromJson<int>(json['deleteMessagesAfterXMinutes']),
|
serializer.fromJson<int>(json['deleteMessagesAfterXMinutes']),
|
||||||
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
||||||
|
|
@ -504,6 +525,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
'blocked': serializer.toJson<bool>(blocked),
|
'blocked': serializer.toJson<bool>(blocked),
|
||||||
'verified': serializer.toJson<bool>(verified),
|
'verified': serializer.toJson<bool>(verified),
|
||||||
'archived': serializer.toJson<bool>(archived),
|
'archived': serializer.toJson<bool>(archived),
|
||||||
|
'pinned': serializer.toJson<bool>(pinned),
|
||||||
'deleteMessagesAfterXMinutes':
|
'deleteMessagesAfterXMinutes':
|
||||||
serializer.toJson<int>(deleteMessagesAfterXMinutes),
|
serializer.toJson<int>(deleteMessagesAfterXMinutes),
|
||||||
'createdAt': serializer.toJson<DateTime>(createdAt),
|
'createdAt': serializer.toJson<DateTime>(createdAt),
|
||||||
|
|
@ -529,6 +551,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
bool? blocked,
|
bool? blocked,
|
||||||
bool? verified,
|
bool? verified,
|
||||||
bool? archived,
|
bool? archived,
|
||||||
|
bool? pinned,
|
||||||
int? deleteMessagesAfterXMinutes,
|
int? deleteMessagesAfterXMinutes,
|
||||||
DateTime? createdAt,
|
DateTime? createdAt,
|
||||||
int? totalMediaCounter,
|
int? totalMediaCounter,
|
||||||
|
|
@ -549,6 +572,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
blocked: blocked ?? this.blocked,
|
blocked: blocked ?? this.blocked,
|
||||||
verified: verified ?? this.verified,
|
verified: verified ?? this.verified,
|
||||||
archived: archived ?? this.archived,
|
archived: archived ?? this.archived,
|
||||||
|
pinned: pinned ?? this.pinned,
|
||||||
deleteMessagesAfterXMinutes:
|
deleteMessagesAfterXMinutes:
|
||||||
deleteMessagesAfterXMinutes ?? this.deleteMessagesAfterXMinutes,
|
deleteMessagesAfterXMinutes ?? this.deleteMessagesAfterXMinutes,
|
||||||
createdAt: createdAt ?? this.createdAt,
|
createdAt: createdAt ?? this.createdAt,
|
||||||
|
|
@ -581,6 +605,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
blocked: data.blocked.present ? data.blocked.value : this.blocked,
|
blocked: data.blocked.present ? data.blocked.value : this.blocked,
|
||||||
verified: data.verified.present ? data.verified.value : this.verified,
|
verified: data.verified.present ? data.verified.value : this.verified,
|
||||||
archived: data.archived.present ? data.archived.value : this.archived,
|
archived: data.archived.present ? data.archived.value : this.archived,
|
||||||
|
pinned: data.pinned.present ? data.pinned.value : this.pinned,
|
||||||
deleteMessagesAfterXMinutes: data.deleteMessagesAfterXMinutes.present
|
deleteMessagesAfterXMinutes: data.deleteMessagesAfterXMinutes.present
|
||||||
? data.deleteMessagesAfterXMinutes.value
|
? data.deleteMessagesAfterXMinutes.value
|
||||||
: this.deleteMessagesAfterXMinutes,
|
: this.deleteMessagesAfterXMinutes,
|
||||||
|
|
@ -620,6 +645,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
..write('blocked: $blocked, ')
|
..write('blocked: $blocked, ')
|
||||||
..write('verified: $verified, ')
|
..write('verified: $verified, ')
|
||||||
..write('archived: $archived, ')
|
..write('archived: $archived, ')
|
||||||
|
..write('pinned: $pinned, ')
|
||||||
..write('deleteMessagesAfterXMinutes: $deleteMessagesAfterXMinutes, ')
|
..write('deleteMessagesAfterXMinutes: $deleteMessagesAfterXMinutes, ')
|
||||||
..write('createdAt: $createdAt, ')
|
..write('createdAt: $createdAt, ')
|
||||||
..write('totalMediaCounter: $totalMediaCounter, ')
|
..write('totalMediaCounter: $totalMediaCounter, ')
|
||||||
|
|
@ -645,6 +671,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
blocked,
|
blocked,
|
||||||
verified,
|
verified,
|
||||||
archived,
|
archived,
|
||||||
|
pinned,
|
||||||
deleteMessagesAfterXMinutes,
|
deleteMessagesAfterXMinutes,
|
||||||
createdAt,
|
createdAt,
|
||||||
totalMediaCounter,
|
totalMediaCounter,
|
||||||
|
|
@ -668,6 +695,7 @@ class Contact extends DataClass implements Insertable<Contact> {
|
||||||
other.blocked == this.blocked &&
|
other.blocked == this.blocked &&
|
||||||
other.verified == this.verified &&
|
other.verified == this.verified &&
|
||||||
other.archived == this.archived &&
|
other.archived == this.archived &&
|
||||||
|
other.pinned == this.pinned &&
|
||||||
other.deleteMessagesAfterXMinutes ==
|
other.deleteMessagesAfterXMinutes ==
|
||||||
this.deleteMessagesAfterXMinutes &&
|
this.deleteMessagesAfterXMinutes &&
|
||||||
other.createdAt == this.createdAt &&
|
other.createdAt == this.createdAt &&
|
||||||
|
|
@ -691,6 +719,7 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
final Value<bool> blocked;
|
final Value<bool> blocked;
|
||||||
final Value<bool> verified;
|
final Value<bool> verified;
|
||||||
final Value<bool> archived;
|
final Value<bool> archived;
|
||||||
|
final Value<bool> pinned;
|
||||||
final Value<int> deleteMessagesAfterXMinutes;
|
final Value<int> deleteMessagesAfterXMinutes;
|
||||||
final Value<DateTime> createdAt;
|
final Value<DateTime> createdAt;
|
||||||
final Value<int> totalMediaCounter;
|
final Value<int> totalMediaCounter;
|
||||||
|
|
@ -711,6 +740,7 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
this.blocked = const Value.absent(),
|
this.blocked = const Value.absent(),
|
||||||
this.verified = const Value.absent(),
|
this.verified = const Value.absent(),
|
||||||
this.archived = const Value.absent(),
|
this.archived = const Value.absent(),
|
||||||
|
this.pinned = const Value.absent(),
|
||||||
this.deleteMessagesAfterXMinutes = const Value.absent(),
|
this.deleteMessagesAfterXMinutes = const Value.absent(),
|
||||||
this.createdAt = const Value.absent(),
|
this.createdAt = const Value.absent(),
|
||||||
this.totalMediaCounter = const Value.absent(),
|
this.totalMediaCounter = const Value.absent(),
|
||||||
|
|
@ -732,6 +762,7 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
this.blocked = const Value.absent(),
|
this.blocked = const Value.absent(),
|
||||||
this.verified = const Value.absent(),
|
this.verified = const Value.absent(),
|
||||||
this.archived = const Value.absent(),
|
this.archived = const Value.absent(),
|
||||||
|
this.pinned = const Value.absent(),
|
||||||
this.deleteMessagesAfterXMinutes = const Value.absent(),
|
this.deleteMessagesAfterXMinutes = const Value.absent(),
|
||||||
this.createdAt = const Value.absent(),
|
this.createdAt = const Value.absent(),
|
||||||
this.totalMediaCounter = const Value.absent(),
|
this.totalMediaCounter = const Value.absent(),
|
||||||
|
|
@ -753,6 +784,7 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
Expression<bool>? blocked,
|
Expression<bool>? blocked,
|
||||||
Expression<bool>? verified,
|
Expression<bool>? verified,
|
||||||
Expression<bool>? archived,
|
Expression<bool>? archived,
|
||||||
|
Expression<bool>? pinned,
|
||||||
Expression<int>? deleteMessagesAfterXMinutes,
|
Expression<int>? deleteMessagesAfterXMinutes,
|
||||||
Expression<DateTime>? createdAt,
|
Expression<DateTime>? createdAt,
|
||||||
Expression<int>? totalMediaCounter,
|
Expression<int>? totalMediaCounter,
|
||||||
|
|
@ -774,6 +806,7 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
if (blocked != null) 'blocked': blocked,
|
if (blocked != null) 'blocked': blocked,
|
||||||
if (verified != null) 'verified': verified,
|
if (verified != null) 'verified': verified,
|
||||||
if (archived != null) 'archived': archived,
|
if (archived != null) 'archived': archived,
|
||||||
|
if (pinned != null) 'pinned': pinned,
|
||||||
if (deleteMessagesAfterXMinutes != null)
|
if (deleteMessagesAfterXMinutes != null)
|
||||||
'delete_messages_after_x_minutes': deleteMessagesAfterXMinutes,
|
'delete_messages_after_x_minutes': deleteMessagesAfterXMinutes,
|
||||||
if (createdAt != null) 'created_at': createdAt,
|
if (createdAt != null) 'created_at': createdAt,
|
||||||
|
|
@ -801,6 +834,7 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
Value<bool>? blocked,
|
Value<bool>? blocked,
|
||||||
Value<bool>? verified,
|
Value<bool>? verified,
|
||||||
Value<bool>? archived,
|
Value<bool>? archived,
|
||||||
|
Value<bool>? pinned,
|
||||||
Value<int>? deleteMessagesAfterXMinutes,
|
Value<int>? deleteMessagesAfterXMinutes,
|
||||||
Value<DateTime>? createdAt,
|
Value<DateTime>? createdAt,
|
||||||
Value<int>? totalMediaCounter,
|
Value<int>? totalMediaCounter,
|
||||||
|
|
@ -821,6 +855,7 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
blocked: blocked ?? this.blocked,
|
blocked: blocked ?? this.blocked,
|
||||||
verified: verified ?? this.verified,
|
verified: verified ?? this.verified,
|
||||||
archived: archived ?? this.archived,
|
archived: archived ?? this.archived,
|
||||||
|
pinned: pinned ?? this.pinned,
|
||||||
deleteMessagesAfterXMinutes:
|
deleteMessagesAfterXMinutes:
|
||||||
deleteMessagesAfterXMinutes ?? this.deleteMessagesAfterXMinutes,
|
deleteMessagesAfterXMinutes ?? this.deleteMessagesAfterXMinutes,
|
||||||
createdAt: createdAt ?? this.createdAt,
|
createdAt: createdAt ?? this.createdAt,
|
||||||
|
|
@ -870,6 +905,9 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
if (archived.present) {
|
if (archived.present) {
|
||||||
map['archived'] = Variable<bool>(archived.value);
|
map['archived'] = Variable<bool>(archived.value);
|
||||||
}
|
}
|
||||||
|
if (pinned.present) {
|
||||||
|
map['pinned'] = Variable<bool>(pinned.value);
|
||||||
|
}
|
||||||
if (deleteMessagesAfterXMinutes.present) {
|
if (deleteMessagesAfterXMinutes.present) {
|
||||||
map['delete_messages_after_x_minutes'] =
|
map['delete_messages_after_x_minutes'] =
|
||||||
Variable<int>(deleteMessagesAfterXMinutes.value);
|
Variable<int>(deleteMessagesAfterXMinutes.value);
|
||||||
|
|
@ -915,6 +953,7 @@ class ContactsCompanion extends UpdateCompanion<Contact> {
|
||||||
..write('blocked: $blocked, ')
|
..write('blocked: $blocked, ')
|
||||||
..write('verified: $verified, ')
|
..write('verified: $verified, ')
|
||||||
..write('archived: $archived, ')
|
..write('archived: $archived, ')
|
||||||
|
..write('pinned: $pinned, ')
|
||||||
..write('deleteMessagesAfterXMinutes: $deleteMessagesAfterXMinutes, ')
|
..write('deleteMessagesAfterXMinutes: $deleteMessagesAfterXMinutes, ')
|
||||||
..write('createdAt: $createdAt, ')
|
..write('createdAt: $createdAt, ')
|
||||||
..write('totalMediaCounter: $totalMediaCounter, ')
|
..write('totalMediaCounter: $totalMediaCounter, ')
|
||||||
|
|
@ -3445,6 +3484,7 @@ typedef $$ContactsTableCreateCompanionBuilder = ContactsCompanion Function({
|
||||||
Value<bool> blocked,
|
Value<bool> blocked,
|
||||||
Value<bool> verified,
|
Value<bool> verified,
|
||||||
Value<bool> archived,
|
Value<bool> archived,
|
||||||
|
Value<bool> pinned,
|
||||||
Value<int> deleteMessagesAfterXMinutes,
|
Value<int> deleteMessagesAfterXMinutes,
|
||||||
Value<DateTime> createdAt,
|
Value<DateTime> createdAt,
|
||||||
Value<int> totalMediaCounter,
|
Value<int> totalMediaCounter,
|
||||||
|
|
@ -3466,6 +3506,7 @@ typedef $$ContactsTableUpdateCompanionBuilder = ContactsCompanion Function({
|
||||||
Value<bool> blocked,
|
Value<bool> blocked,
|
||||||
Value<bool> verified,
|
Value<bool> verified,
|
||||||
Value<bool> archived,
|
Value<bool> archived,
|
||||||
|
Value<bool> pinned,
|
||||||
Value<int> deleteMessagesAfterXMinutes,
|
Value<int> deleteMessagesAfterXMinutes,
|
||||||
Value<DateTime> createdAt,
|
Value<DateTime> createdAt,
|
||||||
Value<int> totalMediaCounter,
|
Value<int> totalMediaCounter,
|
||||||
|
|
@ -3539,6 +3580,9 @@ class $$ContactsTableFilterComposer
|
||||||
ColumnFilters<bool> get archived => $composableBuilder(
|
ColumnFilters<bool> get archived => $composableBuilder(
|
||||||
column: $table.archived, builder: (column) => ColumnFilters(column));
|
column: $table.archived, builder: (column) => ColumnFilters(column));
|
||||||
|
|
||||||
|
ColumnFilters<bool> get pinned => $composableBuilder(
|
||||||
|
column: $table.pinned, builder: (column) => ColumnFilters(column));
|
||||||
|
|
||||||
ColumnFilters<int> get deleteMessagesAfterXMinutes => $composableBuilder(
|
ColumnFilters<int> get deleteMessagesAfterXMinutes => $composableBuilder(
|
||||||
column: $table.deleteMessagesAfterXMinutes,
|
column: $table.deleteMessagesAfterXMinutes,
|
||||||
builder: (column) => ColumnFilters(column));
|
builder: (column) => ColumnFilters(column));
|
||||||
|
|
@ -3634,6 +3678,9 @@ class $$ContactsTableOrderingComposer
|
||||||
ColumnOrderings<bool> get archived => $composableBuilder(
|
ColumnOrderings<bool> get archived => $composableBuilder(
|
||||||
column: $table.archived, builder: (column) => ColumnOrderings(column));
|
column: $table.archived, builder: (column) => ColumnOrderings(column));
|
||||||
|
|
||||||
|
ColumnOrderings<bool> get pinned => $composableBuilder(
|
||||||
|
column: $table.pinned, builder: (column) => ColumnOrderings(column));
|
||||||
|
|
||||||
ColumnOrderings<int> get deleteMessagesAfterXMinutes => $composableBuilder(
|
ColumnOrderings<int> get deleteMessagesAfterXMinutes => $composableBuilder(
|
||||||
column: $table.deleteMessagesAfterXMinutes,
|
column: $table.deleteMessagesAfterXMinutes,
|
||||||
builder: (column) => ColumnOrderings(column));
|
builder: (column) => ColumnOrderings(column));
|
||||||
|
|
@ -3708,6 +3755,9 @@ class $$ContactsTableAnnotationComposer
|
||||||
GeneratedColumn<bool> get archived =>
|
GeneratedColumn<bool> get archived =>
|
||||||
$composableBuilder(column: $table.archived, builder: (column) => column);
|
$composableBuilder(column: $table.archived, builder: (column) => column);
|
||||||
|
|
||||||
|
GeneratedColumn<bool> get pinned =>
|
||||||
|
$composableBuilder(column: $table.pinned, builder: (column) => column);
|
||||||
|
|
||||||
GeneratedColumn<int> get deleteMessagesAfterXMinutes => $composableBuilder(
|
GeneratedColumn<int> get deleteMessagesAfterXMinutes => $composableBuilder(
|
||||||
column: $table.deleteMessagesAfterXMinutes, builder: (column) => column);
|
column: $table.deleteMessagesAfterXMinutes, builder: (column) => column);
|
||||||
|
|
||||||
|
|
@ -3788,6 +3838,7 @@ class $$ContactsTableTableManager extends RootTableManager<
|
||||||
Value<bool> blocked = const Value.absent(),
|
Value<bool> blocked = const Value.absent(),
|
||||||
Value<bool> verified = const Value.absent(),
|
Value<bool> verified = const Value.absent(),
|
||||||
Value<bool> archived = const Value.absent(),
|
Value<bool> archived = const Value.absent(),
|
||||||
|
Value<bool> pinned = const Value.absent(),
|
||||||
Value<int> deleteMessagesAfterXMinutes = const Value.absent(),
|
Value<int> deleteMessagesAfterXMinutes = const Value.absent(),
|
||||||
Value<DateTime> createdAt = const Value.absent(),
|
Value<DateTime> createdAt = const Value.absent(),
|
||||||
Value<int> totalMediaCounter = const Value.absent(),
|
Value<int> totalMediaCounter = const Value.absent(),
|
||||||
|
|
@ -3809,6 +3860,7 @@ class $$ContactsTableTableManager extends RootTableManager<
|
||||||
blocked: blocked,
|
blocked: blocked,
|
||||||
verified: verified,
|
verified: verified,
|
||||||
archived: archived,
|
archived: archived,
|
||||||
|
pinned: pinned,
|
||||||
deleteMessagesAfterXMinutes: deleteMessagesAfterXMinutes,
|
deleteMessagesAfterXMinutes: deleteMessagesAfterXMinutes,
|
||||||
createdAt: createdAt,
|
createdAt: createdAt,
|
||||||
totalMediaCounter: totalMediaCounter,
|
totalMediaCounter: totalMediaCounter,
|
||||||
|
|
@ -3830,6 +3882,7 @@ class $$ContactsTableTableManager extends RootTableManager<
|
||||||
Value<bool> blocked = const Value.absent(),
|
Value<bool> blocked = const Value.absent(),
|
||||||
Value<bool> verified = const Value.absent(),
|
Value<bool> verified = const Value.absent(),
|
||||||
Value<bool> archived = const Value.absent(),
|
Value<bool> archived = const Value.absent(),
|
||||||
|
Value<bool> pinned = const Value.absent(),
|
||||||
Value<int> deleteMessagesAfterXMinutes = const Value.absent(),
|
Value<int> deleteMessagesAfterXMinutes = const Value.absent(),
|
||||||
Value<DateTime> createdAt = const Value.absent(),
|
Value<DateTime> createdAt = const Value.absent(),
|
||||||
Value<int> totalMediaCounter = const Value.absent(),
|
Value<int> totalMediaCounter = const Value.absent(),
|
||||||
|
|
@ -3851,6 +3904,7 @@ class $$ContactsTableTableManager extends RootTableManager<
|
||||||
blocked: blocked,
|
blocked: blocked,
|
||||||
verified: verified,
|
verified: verified,
|
||||||
archived: archived,
|
archived: archived,
|
||||||
|
pinned: pinned,
|
||||||
deleteMessagesAfterXMinutes: deleteMessagesAfterXMinutes,
|
deleteMessagesAfterXMinutes: deleteMessagesAfterXMinutes,
|
||||||
createdAt: createdAt,
|
createdAt: createdAt,
|
||||||
totalMediaCounter: totalMediaCounter,
|
totalMediaCounter: totalMediaCounter,
|
||||||
|
|
|
||||||
|
|
@ -1242,12 +1242,238 @@ i1.GeneratedColumn<bool> _column_52(String aliasedName) =>
|
||||||
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
|
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
|
||||||
'CHECK ("media_stored" IN (0, 1))'),
|
'CHECK ("media_stored" IN (0, 1))'),
|
||||||
defaultValue: const CustomExpression('0'));
|
defaultValue: const CustomExpression('0'));
|
||||||
|
|
||||||
|
final class Schema7 extends i0.VersionedSchema {
|
||||||
|
Schema7({required super.database}) : super(version: 7);
|
||||||
|
@override
|
||||||
|
late final List<i1.DatabaseSchemaEntity> entities = [
|
||||||
|
contacts,
|
||||||
|
messages,
|
||||||
|
mediaUploads,
|
||||||
|
mediaDownloads,
|
||||||
|
signalIdentityKeyStores,
|
||||||
|
signalPreKeyStores,
|
||||||
|
signalSenderKeyStores,
|
||||||
|
signalSessionStores,
|
||||||
|
];
|
||||||
|
late final Shape11 contacts = Shape11(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'contacts',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [
|
||||||
|
'PRIMARY KEY(user_id)',
|
||||||
|
],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_1,
|
||||||
|
_column_2,
|
||||||
|
_column_3,
|
||||||
|
_column_4,
|
||||||
|
_column_5,
|
||||||
|
_column_6,
|
||||||
|
_column_7,
|
||||||
|
_column_8,
|
||||||
|
_column_9,
|
||||||
|
_column_39,
|
||||||
|
_column_53,
|
||||||
|
_column_40,
|
||||||
|
_column_10,
|
||||||
|
_column_11,
|
||||||
|
_column_12,
|
||||||
|
_column_13,
|
||||||
|
_column_14,
|
||||||
|
_column_15,
|
||||||
|
_column_16,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape10 messages = Shape10(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'messages',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_17,
|
||||||
|
_column_18,
|
||||||
|
_column_19,
|
||||||
|
_column_48,
|
||||||
|
_column_49,
|
||||||
|
_column_20,
|
||||||
|
_column_21,
|
||||||
|
_column_22,
|
||||||
|
_column_52,
|
||||||
|
_column_23,
|
||||||
|
_column_24,
|
||||||
|
_column_25,
|
||||||
|
_column_26,
|
||||||
|
_column_27,
|
||||||
|
_column_28,
|
||||||
|
_column_29,
|
||||||
|
_column_30,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape7 mediaUploads = Shape7(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'media_uploads',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_41,
|
||||||
|
_column_42,
|
||||||
|
_column_43,
|
||||||
|
_column_44,
|
||||||
|
_column_45,
|
||||||
|
_column_46,
|
||||||
|
_column_47,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape9 mediaDownloads = Shape9(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'media_downloads',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_50,
|
||||||
|
_column_51,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape2 signalIdentityKeyStores = Shape2(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'signal_identity_key_stores',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [
|
||||||
|
'PRIMARY KEY(device_id, name)',
|
||||||
|
],
|
||||||
|
columns: [
|
||||||
|
_column_31,
|
||||||
|
_column_32,
|
||||||
|
_column_33,
|
||||||
|
_column_10,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape3 signalPreKeyStores = Shape3(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'signal_pre_key_stores',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [
|
||||||
|
'PRIMARY KEY(pre_key_id)',
|
||||||
|
],
|
||||||
|
columns: [
|
||||||
|
_column_34,
|
||||||
|
_column_35,
|
||||||
|
_column_10,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape4 signalSenderKeyStores = Shape4(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'signal_sender_key_stores',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [
|
||||||
|
'PRIMARY KEY(sender_key_name)',
|
||||||
|
],
|
||||||
|
columns: [
|
||||||
|
_column_36,
|
||||||
|
_column_37,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape5 signalSessionStores = Shape5(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'signal_session_stores',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [
|
||||||
|
'PRIMARY KEY(device_id, name)',
|
||||||
|
],
|
||||||
|
columns: [
|
||||||
|
_column_31,
|
||||||
|
_column_32,
|
||||||
|
_column_38,
|
||||||
|
_column_10,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Shape11 extends i0.VersionedTable {
|
||||||
|
Shape11({required super.source, required super.alias}) : super.aliased();
|
||||||
|
i1.GeneratedColumn<int> get userId =>
|
||||||
|
columnsByName['user_id']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<String> get username =>
|
||||||
|
columnsByName['username']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get displayName =>
|
||||||
|
columnsByName['display_name']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get nickName =>
|
||||||
|
columnsByName['nick_name']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get avatarSvg =>
|
||||||
|
columnsByName['avatar_svg']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<int> get myAvatarCounter =>
|
||||||
|
columnsByName['my_avatar_counter']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<bool> get accepted =>
|
||||||
|
columnsByName['accepted']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get requested =>
|
||||||
|
columnsByName['requested']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get blocked =>
|
||||||
|
columnsByName['blocked']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get verified =>
|
||||||
|
columnsByName['verified']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get archived =>
|
||||||
|
columnsByName['archived']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get pinned =>
|
||||||
|
columnsByName['pinned']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<int> get deleteMessagesAfterXMinutes =>
|
||||||
|
columnsByName['delete_messages_after_x_minutes']!
|
||||||
|
as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<DateTime> get createdAt =>
|
||||||
|
columnsByName['created_at']! as i1.GeneratedColumn<DateTime>;
|
||||||
|
i1.GeneratedColumn<int> get totalMediaCounter =>
|
||||||
|
columnsByName['total_media_counter']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<DateTime> get lastMessageSend =>
|
||||||
|
columnsByName['last_message_send']! as i1.GeneratedColumn<DateTime>;
|
||||||
|
i1.GeneratedColumn<DateTime> get lastMessageReceived =>
|
||||||
|
columnsByName['last_message_received']! as i1.GeneratedColumn<DateTime>;
|
||||||
|
i1.GeneratedColumn<DateTime> get lastFlameCounterChange =>
|
||||||
|
columnsByName['last_flame_counter_change']!
|
||||||
|
as i1.GeneratedColumn<DateTime>;
|
||||||
|
i1.GeneratedColumn<DateTime> get lastMessageExchange =>
|
||||||
|
columnsByName['last_message_exchange']! as i1.GeneratedColumn<DateTime>;
|
||||||
|
i1.GeneratedColumn<int> get flameCounter =>
|
||||||
|
columnsByName['flame_counter']! as i1.GeneratedColumn<int>;
|
||||||
|
}
|
||||||
|
|
||||||
|
i1.GeneratedColumn<bool> _column_53(String aliasedName) =>
|
||||||
|
i1.GeneratedColumn<bool>('pinned', aliasedName, false,
|
||||||
|
type: i1.DriftSqlType.bool,
|
||||||
|
defaultConstraints:
|
||||||
|
i1.GeneratedColumn.constraintIsAlways('CHECK ("pinned" IN (0, 1))'),
|
||||||
|
defaultValue: const CustomExpression('0'));
|
||||||
i0.MigrationStepWithVersion migrationSteps({
|
i0.MigrationStepWithVersion migrationSteps({
|
||||||
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
|
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
|
||||||
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
|
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
|
||||||
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
|
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
|
||||||
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
|
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
|
||||||
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
|
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
|
||||||
}) {
|
}) {
|
||||||
return (currentVersion, database) async {
|
return (currentVersion, database) async {
|
||||||
switch (currentVersion) {
|
switch (currentVersion) {
|
||||||
|
|
@ -1276,6 +1502,11 @@ i0.MigrationStepWithVersion migrationSteps({
|
||||||
final migrator = i1.Migrator(database, schema);
|
final migrator = i1.Migrator(database, schema);
|
||||||
await from5To6(migrator, schema);
|
await from5To6(migrator, schema);
|
||||||
return 6;
|
return 6;
|
||||||
|
case 6:
|
||||||
|
final schema = Schema7(database: database);
|
||||||
|
final migrator = i1.Migrator(database, schema);
|
||||||
|
await from6To7(migrator, schema);
|
||||||
|
return 7;
|
||||||
default:
|
default:
|
||||||
throw ArgumentError.value('Unknown migration from $currentVersion');
|
throw ArgumentError.value('Unknown migration from $currentVersion');
|
||||||
}
|
}
|
||||||
|
|
@ -1288,6 +1519,7 @@ i1.OnUpgrade stepByStep({
|
||||||
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
|
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
|
||||||
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
|
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
|
||||||
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
|
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
|
||||||
}) =>
|
}) =>
|
||||||
i0.VersionedSchema.stepByStepHelper(
|
i0.VersionedSchema.stepByStepHelper(
|
||||||
step: migrationSteps(
|
step: migrationSteps(
|
||||||
|
|
@ -1296,4 +1528,5 @@ i1.OnUpgrade stepByStep({
|
||||||
from3To4: from3To4,
|
from3To4: from3To4,
|
||||||
from4To5: from4To5,
|
from4To5: from4To5,
|
||||||
from5To6: from5To6,
|
from5To6: from5To6,
|
||||||
|
from6To7: from6To7,
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,12 @@
|
||||||
"cameraPreviewSendTo": "Senden an",
|
"cameraPreviewSendTo": "Senden an",
|
||||||
"shareImageTitle": "Teilen mit",
|
"shareImageTitle": "Teilen mit",
|
||||||
"shareImageBestFriends": "Beste Freunde",
|
"shareImageBestFriends": "Beste Freunde",
|
||||||
|
"shareImagePinnedContacts": "Angeheftet",
|
||||||
"shareImagedEditorSendImage": "Senden",
|
"shareImagedEditorSendImage": "Senden",
|
||||||
"shareImagedEditorShareWith": "Teilen mit",
|
"shareImagedEditorShareWith": "Teilen mit",
|
||||||
"shareImagedEditorSaveImage": "Speichern",
|
"shareImagedEditorSaveImage": "Speichern",
|
||||||
"shareImagedEditorSavedImage": "Gespeichert",
|
"shareImagedEditorSavedImage": "Gespeichert",
|
||||||
|
"shareImagedSelectAll": "Alle auswählen",
|
||||||
"shareImageAllUsers": "Alle Kontakte",
|
"shareImageAllUsers": "Alle Kontakte",
|
||||||
"shareImageAllTwonlyWarning": "Twonlies können nur an verifizierte Kontakte gesendet werden!",
|
"shareImageAllTwonlyWarning": "Twonlies können nur an verifizierte Kontakte gesendet werden!",
|
||||||
"shareImageSearchAllContacts": "Alle Kontakte durchsuchen",
|
"shareImageSearchAllContacts": "Alle Kontakte durchsuchen",
|
||||||
|
|
@ -68,7 +70,8 @@
|
||||||
"startNewChatYourContacts": "Deine Kontakte",
|
"startNewChatYourContacts": "Deine Kontakte",
|
||||||
"@startNewChatYourContacts": {},
|
"@startNewChatYourContacts": {},
|
||||||
"contextMenuOpenChat": "Chat",
|
"contextMenuOpenChat": "Chat",
|
||||||
"contextMenuSendImage": "Bild senden",
|
"contextMenuPin": "Anheften",
|
||||||
|
"contextMenuUnpin": "Lösen",
|
||||||
"mediaViewerAuthReason": "Bitte authentifiziere dich, um diesen twonly zu sehen!",
|
"mediaViewerAuthReason": "Bitte authentifiziere dich, um diesen twonly zu sehen!",
|
||||||
"messageSendState_Received": "Empfangen",
|
"messageSendState_Received": "Empfangen",
|
||||||
"messageSendState_Opened": "Geöffnet",
|
"messageSendState_Opened": "Geöffnet",
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,8 @@
|
||||||
"@shareImageTitle": {},
|
"@shareImageTitle": {},
|
||||||
"shareImageBestFriends": "Best friends",
|
"shareImageBestFriends": "Best friends",
|
||||||
"@shareImageBestFriends": {},
|
"@shareImageBestFriends": {},
|
||||||
|
"shareImagePinnedContacts": "Pinnded",
|
||||||
|
"@shareImagePinnedContacts": {},
|
||||||
"shareImagedEditorSendImage": "Send",
|
"shareImagedEditorSendImage": "Send",
|
||||||
"@shareImagedEditorSendImage": {},
|
"@shareImagedEditorSendImage": {},
|
||||||
"shareImagedEditorShareWith": "Share with",
|
"shareImagedEditorShareWith": "Share with",
|
||||||
|
|
@ -62,6 +64,8 @@
|
||||||
"@shareImagedEditorSavedImage": {},
|
"@shareImagedEditorSavedImage": {},
|
||||||
"shareImageSearchAllContacts": "Search all contacts",
|
"shareImageSearchAllContacts": "Search all contacts",
|
||||||
"@shareImageSearchAllContacts": {},
|
"@shareImageSearchAllContacts": {},
|
||||||
|
"shareImagedSelectAll": "Select all",
|
||||||
|
"@shareImagedSelectAll": {},
|
||||||
"startNewChatTitle": "Select Contact",
|
"startNewChatTitle": "Select Contact",
|
||||||
"@startNewChatTitle": {},
|
"@startNewChatTitle": {},
|
||||||
"startNewChatNewContact": "New Contact",
|
"startNewChatNewContact": "New Contact",
|
||||||
|
|
@ -110,8 +114,10 @@
|
||||||
"@contextMenuUndoArchiveUser": {},
|
"@contextMenuUndoArchiveUser": {},
|
||||||
"contextMenuOpenChat": "Open chat",
|
"contextMenuOpenChat": "Open chat",
|
||||||
"@contextMenuOpenChat": {},
|
"@contextMenuOpenChat": {},
|
||||||
"contextMenuSendImage": "Send image",
|
"contextMenuPin": "Pin",
|
||||||
"@contextMenuSendImage": {},
|
"@contextMenuPin": {},
|
||||||
|
"contextMenuUnpin": "Unpin",
|
||||||
|
"@contextMenuUnpin": {},
|
||||||
"mediaViewerAuthReason": "Please authenticate to see this twonly!",
|
"mediaViewerAuthReason": "Please authenticate to see this twonly!",
|
||||||
"@mediaViewerAuthReason": {},
|
"@mediaViewerAuthReason": {},
|
||||||
"messageSendState_Received": "Received",
|
"messageSendState_Received": "Received",
|
||||||
|
|
|
||||||
|
|
@ -251,6 +251,12 @@ abstract class AppLocalizations {
|
||||||
/// **'Best friends'**
|
/// **'Best friends'**
|
||||||
String get shareImageBestFriends;
|
String get shareImageBestFriends;
|
||||||
|
|
||||||
|
/// No description provided for @shareImagePinnedContacts.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Pinnded'**
|
||||||
|
String get shareImagePinnedContacts;
|
||||||
|
|
||||||
/// No description provided for @shareImagedEditorSendImage.
|
/// No description provided for @shareImagedEditorSendImage.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|
@ -281,6 +287,12 @@ abstract class AppLocalizations {
|
||||||
/// **'Search all contacts'**
|
/// **'Search all contacts'**
|
||||||
String get shareImageSearchAllContacts;
|
String get shareImageSearchAllContacts;
|
||||||
|
|
||||||
|
/// No description provided for @shareImagedSelectAll.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Select all'**
|
||||||
|
String get shareImagedSelectAll;
|
||||||
|
|
||||||
/// No description provided for @startNewChatTitle.
|
/// No description provided for @startNewChatTitle.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|
@ -413,11 +425,17 @@ abstract class AppLocalizations {
|
||||||
/// **'Open chat'**
|
/// **'Open chat'**
|
||||||
String get contextMenuOpenChat;
|
String get contextMenuOpenChat;
|
||||||
|
|
||||||
/// No description provided for @contextMenuSendImage.
|
/// No description provided for @contextMenuPin.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Send image'**
|
/// **'Pin'**
|
||||||
String get contextMenuSendImage;
|
String get contextMenuPin;
|
||||||
|
|
||||||
|
/// No description provided for @contextMenuUnpin.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Unpin'**
|
||||||
|
String get contextMenuUnpin;
|
||||||
|
|
||||||
/// No description provided for @mediaViewerAuthReason.
|
/// No description provided for @mediaViewerAuthReason.
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,9 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get shareImageBestFriends => 'Beste Freunde';
|
String get shareImageBestFriends => 'Beste Freunde';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get shareImagePinnedContacts => 'Angeheftet';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get shareImagedEditorSendImage => 'Senden';
|
String get shareImagedEditorSendImage => 'Senden';
|
||||||
|
|
||||||
|
|
@ -101,6 +104,9 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get shareImageSearchAllContacts => 'Alle Kontakte durchsuchen';
|
String get shareImageSearchAllContacts => 'Alle Kontakte durchsuchen';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get shareImagedSelectAll => 'Alle auswählen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get startNewChatTitle => 'Kontakt wählen';
|
String get startNewChatTitle => 'Kontakt wählen';
|
||||||
|
|
||||||
|
|
@ -170,7 +176,10 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
String get contextMenuOpenChat => 'Chat';
|
String get contextMenuOpenChat => 'Chat';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get contextMenuSendImage => 'Bild senden';
|
String get contextMenuPin => 'Anheften';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get contextMenuUnpin => 'Lösen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get mediaViewerAuthReason => 'Bitte authentifiziere dich, um diesen twonly zu sehen!';
|
String get mediaViewerAuthReason => 'Bitte authentifiziere dich, um diesen twonly zu sehen!';
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,9 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get shareImageBestFriends => 'Best friends';
|
String get shareImageBestFriends => 'Best friends';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get shareImagePinnedContacts => 'Pinnded';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get shareImagedEditorSendImage => 'Send';
|
String get shareImagedEditorSendImage => 'Send';
|
||||||
|
|
||||||
|
|
@ -101,6 +104,9 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get shareImageSearchAllContacts => 'Search all contacts';
|
String get shareImageSearchAllContacts => 'Search all contacts';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get shareImagedSelectAll => 'Select all';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get startNewChatTitle => 'Select Contact';
|
String get startNewChatTitle => 'Select Contact';
|
||||||
|
|
||||||
|
|
@ -170,7 +176,10 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
String get contextMenuOpenChat => 'Open chat';
|
String get contextMenuOpenChat => 'Open chat';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get contextMenuSendImage => 'Send image';
|
String get contextMenuPin => 'Pin';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get contextMenuUnpin => 'Unpin';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get mediaViewerAuthReason => 'Please authenticate to see this twonly!';
|
String get mediaViewerAuthReason => 'Please authenticate to see this twonly!';
|
||||||
|
|
|
||||||
|
|
@ -15,15 +15,16 @@ class BestFriendsSelector extends StatelessWidget {
|
||||||
final HashSet<int> selectedUserIds;
|
final HashSet<int> selectedUserIds;
|
||||||
final int maxTotalMediaCounter;
|
final int maxTotalMediaCounter;
|
||||||
final bool isRealTwonly;
|
final bool isRealTwonly;
|
||||||
|
final String title;
|
||||||
|
|
||||||
const BestFriendsSelector({
|
const BestFriendsSelector(
|
||||||
super.key,
|
{super.key,
|
||||||
required this.users,
|
required this.users,
|
||||||
required this.maxTotalMediaCounter,
|
required this.maxTotalMediaCounter,
|
||||||
required this.isRealTwonly,
|
required this.isRealTwonly,
|
||||||
required this.updateStatus,
|
required this.updateStatus,
|
||||||
required this.selectedUserIds,
|
required this.selectedUserIds,
|
||||||
});
|
required this.title});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
@ -36,7 +37,7 @@ class BestFriendsSelector extends StatelessWidget {
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: HeadLineComponent(context.lang.shareImageBestFriends),
|
child: HeadLineComponent(title),
|
||||||
),
|
),
|
||||||
if (!isRealTwonly)
|
if (!isRealTwonly)
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
|
|
@ -57,7 +58,8 @@ class BestFriendsSelector extends StatelessWidget {
|
||||||
],
|
],
|
||||||
borderRadius: BorderRadius.circular(8.0),
|
borderRadius: BorderRadius.circular(8.0),
|
||||||
),
|
),
|
||||||
child: Text("Alle auswählen", style: TextStyle(fontSize: 10)),
|
child: Text(context.lang.shareImagedSelectAll,
|
||||||
|
style: TextStyle(fontSize: 10)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ class _ShareImageView extends State<ShareImageView> {
|
||||||
List<Contact> contacts = [];
|
List<Contact> contacts = [];
|
||||||
List<Contact> _otherUsers = [];
|
List<Contact> _otherUsers = [];
|
||||||
List<Contact> _bestFriends = [];
|
List<Contact> _bestFriends = [];
|
||||||
|
List<Contact> _pinnedContacs = [];
|
||||||
int maxTotalMediaCounter = 0;
|
int maxTotalMediaCounter = 0;
|
||||||
Uint8List? imageBytes;
|
Uint8List? imageBytes;
|
||||||
bool sendingImage = false;
|
bool sendingImage = false;
|
||||||
|
|
@ -105,8 +106,10 @@ class _ShareImageView extends State<ShareImageView> {
|
||||||
// Separate best friends and other users
|
// Separate best friends and other users
|
||||||
List<Contact> bestFriends = [];
|
List<Contact> bestFriends = [];
|
||||||
List<Contact> otherUsers = [];
|
List<Contact> otherUsers = [];
|
||||||
|
List<Contact> pinnedContacts = users.where((c) => c.pinned).toList();
|
||||||
|
|
||||||
for (var contact in users) {
|
for (var contact in users) {
|
||||||
|
if (contact.pinned) continue;
|
||||||
if (!contact.archived &&
|
if (!contact.archived &&
|
||||||
(getFlameCounterFromContact(contact)) > 0 &&
|
(getFlameCounterFromContact(contact)) > 0 &&
|
||||||
bestFriends.length < 6) {
|
bestFriends.length < 6) {
|
||||||
|
|
@ -118,6 +121,7 @@ class _ShareImageView extends State<ShareImageView> {
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_bestFriends = bestFriends;
|
_bestFriends = bestFriends;
|
||||||
|
_pinnedContacs = pinnedContacts;
|
||||||
_otherUsers = otherUsers;
|
_otherUsers = otherUsers;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -184,6 +188,15 @@ class _ShareImageView extends State<ShareImageView> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
if (_pinnedContacs.isNotEmpty) const SizedBox(height: 10),
|
||||||
|
BestFriendsSelector(
|
||||||
|
users: _pinnedContacs,
|
||||||
|
selectedUserIds: _selectedUserIds,
|
||||||
|
maxTotalMediaCounter: maxTotalMediaCounter,
|
||||||
|
isRealTwonly: widget.isRealTwonly,
|
||||||
|
updateStatus: updateStatus,
|
||||||
|
title: context.lang.shareImagePinnedContacts,
|
||||||
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
BestFriendsSelector(
|
BestFriendsSelector(
|
||||||
users: _bestFriends,
|
users: _bestFriends,
|
||||||
|
|
@ -191,6 +204,7 @@ class _ShareImageView extends State<ShareImageView> {
|
||||||
maxTotalMediaCounter: maxTotalMediaCounter,
|
maxTotalMediaCounter: maxTotalMediaCounter,
|
||||||
isRealTwonly: widget.isRealTwonly,
|
isRealTwonly: widget.isRealTwonly,
|
||||||
updateStatus: updateStatus,
|
updateStatus: updateStatus,
|
||||||
|
title: context.lang.shareImageBestFriends,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
if (_otherUsers.isNotEmpty)
|
if (_otherUsers.isNotEmpty)
|
||||||
|
|
|
||||||
|
|
@ -116,24 +116,45 @@ class _ChatListViewState extends State<ChatListView> {
|
||||||
.reduce((a, b) => a > b ? a : b);
|
.reduce((a, b) => a > b ? a : b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final pinnedUsers = contacts.where((c) => c.pinned);
|
||||||
|
|
||||||
return RefreshIndicator(
|
return RefreshIndicator(
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
await apiProvider.close(() {});
|
await apiProvider.close(() {});
|
||||||
await apiProvider.connect();
|
await apiProvider.connect();
|
||||||
await Future.delayed(Duration(seconds: 1));
|
await Future.delayed(Duration(seconds: 1));
|
||||||
},
|
},
|
||||||
child: ListView.builder(
|
child: ListView(
|
||||||
restorationId: 'chat_list_view',
|
children: [
|
||||||
itemCount: contacts.length,
|
...pinnedUsers.map((contact) {
|
||||||
itemBuilder: (BuildContext context, int index) {
|
|
||||||
final user = contacts[index];
|
|
||||||
return UserListItem(
|
return UserListItem(
|
||||||
key: ValueKey(user.userId),
|
key: ValueKey(contact.userId),
|
||||||
user: user,
|
user: contact,
|
||||||
maxTotalMediaCounter: maxTotalMediaCounter,
|
maxTotalMediaCounter: maxTotalMediaCounter,
|
||||||
);
|
);
|
||||||
},
|
}),
|
||||||
|
if (pinnedUsers.isNotEmpty) Divider(),
|
||||||
|
...contacts.where((c) => !c.pinned).map((contact) {
|
||||||
|
return UserListItem(
|
||||||
|
key: ValueKey(contact.userId),
|
||||||
|
user: contact,
|
||||||
|
maxTotalMediaCounter: maxTotalMediaCounter,
|
||||||
|
);
|
||||||
|
})
|
||||||
|
],
|
||||||
),
|
),
|
||||||
|
// child: ListView.builder(
|
||||||
|
// restorationId: 'chat_list_view',
|
||||||
|
// itemCount: contacts.length,
|
||||||
|
// itemBuilder: (BuildContext context, int index) {
|
||||||
|
// final user = contacts[index];
|
||||||
|
// return UserListItem(
|
||||||
|
// key: ValueKey(user.userId),
|
||||||
|
// user: user,
|
||||||
|
// maxTotalMediaCounter: maxTotalMediaCounter,
|
||||||
|
// );
|
||||||
|
// },
|
||||||
|
// ),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import 'package:pie_menu/pie_menu.dart';
|
||||||
import 'package:twonly/globals.dart';
|
import 'package:twonly/globals.dart';
|
||||||
import 'package:twonly/src/database/twonly_database.dart';
|
import 'package:twonly/src/database/twonly_database.dart';
|
||||||
import 'package:twonly/src/utils/misc.dart';
|
import 'package:twonly/src/utils/misc.dart';
|
||||||
import 'package:twonly/src/views/camera/camera_send_to_view.dart';
|
|
||||||
import 'package:twonly/src/views/chats/chat_item_details_view.dart';
|
import 'package:twonly/src/views/chats/chat_item_details_view.dart';
|
||||||
import 'package:twonly/src/views/contact/contact_verify_view.dart';
|
import 'package:twonly/src/views/contact/contact_verify_view.dart';
|
||||||
|
|
||||||
|
|
@ -74,15 +73,22 @@ class _UserContextMenuState extends State<UserContextMenu> {
|
||||||
child: const FaIcon(FontAwesomeIcons.solidComments),
|
child: const FaIcon(FontAwesomeIcons.solidComments),
|
||||||
),
|
),
|
||||||
PieAction(
|
PieAction(
|
||||||
tooltip: Text(context.lang.contextMenuSendImage),
|
tooltip: Text(
|
||||||
onSelect: () {
|
widget.contact.pinned
|
||||||
Navigator.push(context, MaterialPageRoute(
|
? context.lang.contextMenuUnpin
|
||||||
builder: (context) {
|
: context.lang.contextMenuPin,
|
||||||
return CameraSendToView(widget.contact);
|
),
|
||||||
|
onSelect: () async {
|
||||||
|
final update =
|
||||||
|
ContactsCompanion(pinned: Value(!widget.contact.pinned));
|
||||||
|
if (context.mounted) {
|
||||||
|
await twonlyDatabase.contactsDao
|
||||||
|
.updateContact(widget.contact.userId, update);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
));
|
child: FaIcon(widget.contact.pinned
|
||||||
},
|
? FontAwesomeIcons.thumbtackSlash
|
||||||
child: const FaIcon(FontAwesomeIcons.camera),
|
: FontAwesomeIcons.thumbtack),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
child: widget.child,
|
child: widget.child,
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import 'schema_v3.dart' as v3;
|
||||||
import 'schema_v4.dart' as v4;
|
import 'schema_v4.dart' as v4;
|
||||||
import 'schema_v5.dart' as v5;
|
import 'schema_v5.dart' as v5;
|
||||||
import 'schema_v6.dart' as v6;
|
import 'schema_v6.dart' as v6;
|
||||||
|
import 'schema_v7.dart' as v7;
|
||||||
|
|
||||||
class GeneratedHelper implements SchemaInstantiationHelper {
|
class GeneratedHelper implements SchemaInstantiationHelper {
|
||||||
@override
|
@override
|
||||||
|
|
@ -26,10 +27,12 @@ class GeneratedHelper implements SchemaInstantiationHelper {
|
||||||
return v5.DatabaseAtV5(db);
|
return v5.DatabaseAtV5(db);
|
||||||
case 6:
|
case 6:
|
||||||
return v6.DatabaseAtV6(db);
|
return v6.DatabaseAtV6(db);
|
||||||
|
case 7:
|
||||||
|
return v7.DatabaseAtV7(db);
|
||||||
default:
|
default:
|
||||||
throw MissingSchemaException(version, versions);
|
throw MissingSchemaException(version, versions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const versions = const [1, 2, 3, 4, 5, 6];
|
static const versions = const [1, 2, 3, 4, 5, 6, 7];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2887
test/drift/twonly_database/generated/schema_v7.dart
Normal file
2887
test/drift/twonly_database/generated/schema_v7.dart
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue