mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-04-18 14:22:53 +00:00
fix issue with opening media files
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run
This commit is contained in:
parent
4b1e6a9a44
commit
cdaca940df
1 changed files with 98 additions and 99 deletions
|
|
@ -44,26 +44,23 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<List<Message>> watchMediaNotOpened(String groupId) {
|
Stream<List<Message>> watchMediaNotOpened(String groupId) {
|
||||||
final query = select(messages).join([
|
final query =
|
||||||
leftOuterJoin(mediaFiles, mediaFiles.mediaId.equalsExp(messages.mediaId)),
|
select(messages).join([
|
||||||
])
|
leftOuterJoin(
|
||||||
..where(
|
mediaFiles,
|
||||||
mediaFiles.downloadState
|
mediaFiles.mediaId.equalsExp(messages.mediaId),
|
||||||
.equals(DownloadState.reuploadRequested.name)
|
),
|
||||||
.not() &
|
])..where(
|
||||||
mediaFiles.uploadState
|
mediaFiles.downloadState
|
||||||
.equals(UploadState.fileLimitReached.name)
|
.equals(DownloadState.reuploadRequested.name)
|
||||||
.not() &
|
.not() &
|
||||||
mediaFiles.uploadState
|
mediaFiles.type.equals(MediaType.audio.name).not() &
|
||||||
.equals(UploadState.uploadLimitReached.name)
|
messages.openedAt.isNull() &
|
||||||
.not() &
|
messages.groupId.equals(groupId) &
|
||||||
mediaFiles.type.equals(MediaType.audio.name).not() &
|
messages.mediaId.isNotNull() &
|
||||||
messages.openedAt.isNull() &
|
messages.senderId.isNotNull() &
|
||||||
messages.groupId.equals(groupId) &
|
messages.type.equals(MessageType.media.name),
|
||||||
messages.mediaId.isNotNull() &
|
);
|
||||||
messages.senderId.isNotNull() &
|
|
||||||
messages.type.equals(MessageType.media.name),
|
|
||||||
);
|
|
||||||
return query.map((row) => row.readTable(messages)).watch();
|
return query.map((row) => row.readTable(messages)).watch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -76,8 +73,7 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<List<Message>> watchByGroupId(String groupId) {
|
Stream<List<Message>> watchByGroupId(String groupId) {
|
||||||
return ((select(messages)
|
return ((select(messages)..where(
|
||||||
..where(
|
|
||||||
(t) =>
|
(t) =>
|
||||||
t.groupId.equals(groupId) &
|
t.groupId.equals(groupId) &
|
||||||
(t.isDeletedFromSender.equals(true) |
|
(t.isDeletedFromSender.equals(true) |
|
||||||
|
|
@ -98,21 +94,22 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
contacts,
|
contacts,
|
||||||
contacts.userId.equalsExp(groupMembers.contactId),
|
contacts.userId.equalsExp(groupMembers.contactId),
|
||||||
),
|
),
|
||||||
])
|
])..where(groupMembers.groupId.equals(groupId)));
|
||||||
..where(groupMembers.groupId.equals(groupId)));
|
|
||||||
return query
|
return query
|
||||||
.map((row) => (row.readTable(groupMembers), row.readTable(contacts)))
|
.map((row) => (row.readTable(groupMembers), row.readTable(contacts)))
|
||||||
.watch();
|
.watch();
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<List<MessageAction>> watchMessageActionChanges(String messageId) {
|
Stream<List<MessageAction>> watchMessageActionChanges(String messageId) {
|
||||||
return (select(messageActions)..where((t) => t.messageId.equals(messageId)))
|
return (select(
|
||||||
.watch();
|
messageActions,
|
||||||
|
)..where((t) => t.messageId.equals(messageId))).watch();
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<Message?> watchMessageById(String messageId) {
|
Stream<Message?> watchMessageById(String messageId) {
|
||||||
return (select(messages)..where((t) => t.messageId.equals(messageId)))
|
return (select(
|
||||||
.watchSingleOrNull();
|
messages,
|
||||||
|
)..where((t) => t.messageId.equals(messageId))).watchSingleOrNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> purgeMessageTable() async {
|
Future<void> purgeMessageTable() async {
|
||||||
|
|
@ -120,35 +117,33 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
|
|
||||||
for (final group in allGroups) {
|
for (final group in allGroups) {
|
||||||
final deletionTime = clock.now().subtract(
|
final deletionTime = clock.now().subtract(
|
||||||
Duration(
|
Duration(
|
||||||
milliseconds: group.deleteMessagesAfterMilliseconds,
|
milliseconds: group.deleteMessagesAfterMilliseconds,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
await (delete(messages)
|
await (delete(messages)..where(
|
||||||
..where(
|
(m) =>
|
||||||
(m) =>
|
m.groupId.equals(group.groupId) &
|
||||||
m.groupId.equals(group.groupId) &
|
(m.mediaStored.equals(true) &
|
||||||
(m.mediaStored.equals(true) &
|
m.isDeletedFromSender.equals(true) |
|
||||||
m.isDeletedFromSender.equals(true) |
|
m.mediaStored.equals(false)) &
|
||||||
m.mediaStored.equals(false)) &
|
(m.openedAt.isSmallerThanValue(deletionTime) |
|
||||||
(m.openedAt.isSmallerThanValue(deletionTime) |
|
(m.isDeletedFromSender.equals(true) &
|
||||||
(m.isDeletedFromSender.equals(true) &
|
m.createdAt.isSmallerThanValue(deletionTime))),
|
||||||
m.createdAt.isSmallerThanValue(deletionTime))),
|
))
|
||||||
))
|
|
||||||
.go();
|
.go();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> openedAllTextMessages(String groupId) {
|
Future<void> openedAllTextMessages(String groupId) {
|
||||||
final updates = MessagesCompanion(openedAt: Value(clock.now()));
|
final updates = MessagesCompanion(openedAt: Value(clock.now()));
|
||||||
return (update(messages)
|
return (update(messages)..where(
|
||||||
..where(
|
(t) =>
|
||||||
(t) =>
|
t.groupId.equals(groupId) &
|
||||||
t.groupId.equals(groupId) &
|
t.senderId.isNotNull() &
|
||||||
t.senderId.isNotNull() &
|
t.openedAt.isNull() &
|
||||||
t.openedAt.isNull() &
|
t.type.equals(MessageType.text.name),
|
||||||
t.type.equals(MessageType.text.name),
|
))
|
||||||
))
|
|
||||||
.write(updates);
|
.write(updates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -164,29 +159,29 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
}
|
}
|
||||||
if (msg.mediaId != null && contactId != null) {
|
if (msg.mediaId != null && contactId != null) {
|
||||||
// contactId -> When a image is send to multiple and one message is delete the image should be still available...
|
// contactId -> When a image is send to multiple and one message is delete the image should be still available...
|
||||||
await (delete(mediaFiles)..where((t) => t.mediaId.equals(msg.mediaId!)))
|
await (delete(
|
||||||
.go();
|
mediaFiles,
|
||||||
|
)..where((t) => t.mediaId.equals(msg.mediaId!))).go();
|
||||||
|
|
||||||
final mediaService = await MediaFileService.fromMediaId(msg.mediaId!);
|
final mediaService = await MediaFileService.fromMediaId(msg.mediaId!);
|
||||||
if (mediaService != null) {
|
if (mediaService != null) {
|
||||||
mediaService.fullMediaRemoval();
|
mediaService.fullMediaRemoval();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await (delete(messageHistories)
|
await (delete(
|
||||||
..where((t) => t.messageId.equals(messageId)))
|
messageHistories,
|
||||||
.go();
|
)..where((t) => t.messageId.equals(messageId))).go();
|
||||||
|
|
||||||
await (update(messages)
|
await (update(messages)..where(
|
||||||
..where(
|
(t) => t.messageId.equals(messageId),
|
||||||
(t) => t.messageId.equals(messageId),
|
))
|
||||||
))
|
|
||||||
.write(
|
.write(
|
||||||
const MessagesCompanion(
|
const MessagesCompanion(
|
||||||
isDeletedFromSender: Value(true),
|
isDeletedFromSender: Value(true),
|
||||||
content: Value(null),
|
content: Value(null),
|
||||||
mediaId: Value(null),
|
mediaId: Value(null),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> handleTextEdit(
|
Future<void> handleTextEdit(
|
||||||
|
|
@ -206,16 +201,15 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
createdAt: Value(timestamp),
|
createdAt: Value(timestamp),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
await (update(messages)
|
await (update(messages)..where(
|
||||||
..where(
|
(t) => t.messageId.equals(messageId),
|
||||||
(t) => t.messageId.equals(messageId),
|
))
|
||||||
))
|
|
||||||
.write(
|
.write(
|
||||||
MessagesCompanion(
|
MessagesCompanion(
|
||||||
content: Value(text),
|
content: Value(text),
|
||||||
modifiedAt: Value(timestamp),
|
modifiedAt: Value(timestamp),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> handleMessagesOpened(
|
Future<void> handleMessagesOpened(
|
||||||
|
|
@ -238,8 +232,10 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final messageId in messageIds) {
|
for (final messageId in messageIds) {
|
||||||
final isOpenedByAll =
|
final isOpenedByAll = await haveAllMembers(
|
||||||
await haveAllMembers(messageId, MessageActionType.openedAt);
|
messageId,
|
||||||
|
MessageActionType.openedAt,
|
||||||
|
);
|
||||||
final now = clock.now();
|
final now = clock.now();
|
||||||
|
|
||||||
batch.update(
|
batch.update(
|
||||||
|
|
@ -277,17 +273,19 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
String messageId,
|
String messageId,
|
||||||
MessageActionType action,
|
MessageActionType action,
|
||||||
) async {
|
) async {
|
||||||
final message =
|
final message = await twonlyDB.messagesDao
|
||||||
await twonlyDB.messagesDao.getMessageById(messageId).getSingleOrNull();
|
.getMessageById(messageId)
|
||||||
|
.getSingleOrNull();
|
||||||
if (message == null) return true;
|
if (message == null) return true;
|
||||||
final members =
|
final members = await twonlyDB.groupsDao.getGroupNonLeftMembers(
|
||||||
await twonlyDB.groupsDao.getGroupNonLeftMembers(message.groupId);
|
message.groupId,
|
||||||
|
);
|
||||||
|
|
||||||
final actions = await (select(messageActions)
|
final actions =
|
||||||
..where(
|
await (select(messageActions)..where(
|
||||||
(t) => t.type.equals(action.name) & t.messageId.equals(messageId),
|
(t) => t.type.equals(action.name) & t.messageId.equals(messageId),
|
||||||
))
|
))
|
||||||
.get();
|
.get();
|
||||||
|
|
||||||
return members.length == actions.length;
|
return members.length == actions.length;
|
||||||
}
|
}
|
||||||
|
|
@ -296,16 +294,18 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
String messageId,
|
String messageId,
|
||||||
MessagesCompanion updatedValues,
|
MessagesCompanion updatedValues,
|
||||||
) async {
|
) async {
|
||||||
await (update(messages)..where((c) => c.messageId.equals(messageId)))
|
await (update(
|
||||||
.write(updatedValues);
|
messages,
|
||||||
|
)..where((c) => c.messageId.equals(messageId))).write(updatedValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateMessagesByMediaId(
|
Future<void> updateMessagesByMediaId(
|
||||||
String mediaId,
|
String mediaId,
|
||||||
MessagesCompanion updatedValues,
|
MessagesCompanion updatedValues,
|
||||||
) {
|
) {
|
||||||
return (update(messages)..where((c) => c.mediaId.equals(mediaId)))
|
return (update(
|
||||||
.write(updatedValues);
|
messages,
|
||||||
|
)..where((c) => c.mediaId.equals(mediaId))).write(updatedValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Message?> insertMessage(MessagesCompanion message) async {
|
Future<Message?> insertMessage(MessagesCompanion message) async {
|
||||||
|
|
@ -339,8 +339,9 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return await (select(messages)..where((t) => t.rowId.equals(rowId)))
|
return await (select(
|
||||||
.getSingle();
|
messages,
|
||||||
|
)..where((t) => t.rowId.equals(rowId))).getSingle();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Log.error('Could not insert message: $e');
|
Log.error('Could not insert message: $e');
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -348,11 +349,10 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<MessageAction?> getLastMessageAction(String messageId) async {
|
Future<MessageAction?> getLastMessageAction(String messageId) async {
|
||||||
return (((select(messageActions)
|
return (((select(messageActions)..where(
|
||||||
..where(
|
(t) => t.messageId.equals(messageId),
|
||||||
(t) => t.messageId.equals(messageId),
|
))
|
||||||
))
|
..orderBy([(t) => OrderingTerm.desc(t.actionAt)]))
|
||||||
..orderBy([(t) => OrderingTerm.desc(t.actionAt)]))
|
|
||||||
..limit(1))
|
..limit(1))
|
||||||
.getSingleOrNull();
|
.getSingleOrNull();
|
||||||
}
|
}
|
||||||
|
|
@ -379,8 +379,7 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
contacts,
|
contacts,
|
||||||
contacts.userId.equalsExp(messageActions.contactId),
|
contacts.userId.equalsExp(messageActions.contactId),
|
||||||
),
|
),
|
||||||
])
|
])..where(messageActions.messageId.equals(messageId)));
|
||||||
..where(messageActions.messageId.equals(messageId)));
|
|
||||||
return query
|
return query
|
||||||
.map((row) => (row.readTable(messageActions), row.readTable(contacts)))
|
.map((row) => (row.readTable(messageActions), row.readTable(contacts)))
|
||||||
.watch();
|
.watch();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue