mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-07-18 01:14:07 +00:00
improve media download logging
This commit is contained in:
parent
cda7df36f3
commit
dfa6ac2cfe
5 changed files with 63 additions and 37 deletions
|
|
@ -32,15 +32,24 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
MessagesDao(super.db);
|
MessagesDao(super.db);
|
||||||
|
|
||||||
Stream<List<Message>> watchMessageNotOpened(String groupId) {
|
Stream<List<Message>> watchMessageNotOpened(String groupId) {
|
||||||
return (select(messages)
|
final query =
|
||||||
|
select(messages).join([
|
||||||
|
leftOuterJoin(
|
||||||
|
mediaFiles,
|
||||||
|
mediaFiles.mediaId.equalsExp(messages.mediaId),
|
||||||
|
),
|
||||||
|
])
|
||||||
..where(
|
..where(
|
||||||
(t) =>
|
messages.openedAt.isNull() &
|
||||||
t.openedAt.isNull() &
|
messages.groupId.equals(groupId) &
|
||||||
t.groupId.equals(groupId) &
|
messages.isDeletedFromSender.equals(false) &
|
||||||
t.isDeletedFromSender.equals(false),
|
(messages.mediaId.isNull() |
|
||||||
|
mediaFiles.downloadState
|
||||||
|
.equals(DownloadState.reuploadRequested.name)
|
||||||
|
.not()),
|
||||||
)
|
)
|
||||||
..orderBy([(t) => OrderingTerm.desc(t.createdAt)]))
|
..orderBy([OrderingTerm.desc(messages.createdAt)]);
|
||||||
.watch();
|
return query.map((row) => row.readTable(messages)).watch();
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<List<Message>> watchMediaNotOpened(String groupId) {
|
Stream<List<Message>> watchMediaNotOpened(String groupId) {
|
||||||
|
|
@ -91,26 +100,27 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
milliseconds: group!.deleteMessagesAfterMilliseconds,
|
milliseconds: group!.deleteMessagesAfterMilliseconds,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
final query = select(messages).join([
|
final query =
|
||||||
leftOuterJoin(
|
select(messages).join([
|
||||||
mediaFiles,
|
leftOuterJoin(
|
||||||
mediaFiles.mediaId.equalsExp(messages.mediaId),
|
mediaFiles,
|
||||||
),
|
mediaFiles.mediaId.equalsExp(messages.mediaId),
|
||||||
])
|
),
|
||||||
..where(
|
])
|
||||||
messages.groupId.equals(groupId) &
|
..where(
|
||||||
// messages in groups will only be removed in case all members have received it...
|
messages.groupId.equals(groupId) &
|
||||||
// so ensuring that this message is not shown in the messages anymore
|
// messages in groups will only be removed in case all members have received it...
|
||||||
(messages.openedAt.isBiggerThanValue(deletionTime) |
|
// so ensuring that this message is not shown in the messages anymore
|
||||||
messages.openedAt.isNull() |
|
(messages.openedAt.isBiggerThanValue(deletionTime) |
|
||||||
messages.mediaStored.equals(true)) &
|
messages.openedAt.isNull() |
|
||||||
(mediaFiles.downloadState
|
messages.mediaStored.equals(true)) &
|
||||||
.equals(DownloadState.reuploadRequested.name)
|
(mediaFiles.downloadState
|
||||||
.not() |
|
.equals(DownloadState.reuploadRequested.name)
|
||||||
mediaFiles.downloadState.isNull()),
|
.not() |
|
||||||
)
|
mediaFiles.downloadState.isNull()),
|
||||||
..orderBy([OrderingTerm.desc(messages.createdAt)])
|
)
|
||||||
..limit(1);
|
..orderBy([OrderingTerm.desc(messages.createdAt)])
|
||||||
|
..limit(1);
|
||||||
|
|
||||||
return query.map((row) => row.readTable(messages)).watchSingleOrNull();
|
return query.map((row) => row.readTable(messages)).watchSingleOrNull();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,10 @@ Future<bool> handleMedia(
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.info(
|
||||||
|
'[$receiptId] Inserting media message: messageId=${media.senderMessageId}, mediaId=${mediaFile!.mediaId}',
|
||||||
|
);
|
||||||
|
|
||||||
message = await twonlyDB.messagesDao.insertMessage(
|
message = await twonlyDB.messagesDao.insertMessage(
|
||||||
MessagesCompanion(
|
MessagesCompanion(
|
||||||
messageId: Value(media.senderMessageId),
|
messageId: Value(media.senderMessageId),
|
||||||
|
|
|
||||||
|
|
@ -272,6 +272,13 @@ Future<void> downloadFileFast(
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> requestMediaReupload(String mediaId) async {
|
Future<void> requestMediaReupload(String mediaId) async {
|
||||||
|
await twonlyDB.mediaFilesDao.updateMedia(
|
||||||
|
mediaId,
|
||||||
|
const MediaFilesCompanion(
|
||||||
|
downloadState: Value(DownloadState.reuploadRequested),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
final messages = await twonlyDB.messagesDao.getMessagesByMediaId(mediaId);
|
final messages = await twonlyDB.messagesDao.getMessagesByMediaId(mediaId);
|
||||||
|
|
||||||
for (final message in messages) {
|
for (final message in messages) {
|
||||||
|
|
@ -285,12 +292,6 @@ Future<void> requestMediaReupload(String mediaId) async {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
await twonlyDB.mediaFilesDao.updateMedia(
|
|
||||||
mediaId,
|
|
||||||
const MediaFilesCompanion(
|
|
||||||
downloadState: Value(DownloadState.reuploadRequested),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -359,12 +359,17 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
|
|
||||||
if (!currentMediaLocal.tempPath.existsSync()) {
|
if (!currentMediaLocal.tempPath.existsSync()) {
|
||||||
Log.warn('Temp media file not found for media ID: ${currentMediaLocal.mediaFile.mediaId}');
|
Log.warn(
|
||||||
|
'Temp media file not found for media ID: ${currentMediaLocal.mediaFile.mediaId}',
|
||||||
|
);
|
||||||
await handleMediaError(currentMediaLocal.mediaFile);
|
await handleMediaError(currentMediaLocal.mediaFile);
|
||||||
return advanceToNextMediaOrExit();
|
return advanceToNextMediaOrExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// The server can now delete the encrypted bytes, as the users has sucessfully opened it.
|
// The server can now delete the encrypted bytes, as the users has sucessfully opened it.
|
||||||
|
Log.info(
|
||||||
|
'Calling downloadDone for media ID: ${currentMediaLocal.mediaFile.mediaId}',
|
||||||
|
);
|
||||||
unawaited(
|
unawaited(
|
||||||
apiService.downloadDone(currentMediaLocal.mediaFile.downloadToken!),
|
apiService.downloadDone(currentMediaLocal.mediaFile.downloadToken!),
|
||||||
);
|
);
|
||||||
|
|
@ -469,7 +474,11 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
..play();
|
..play();
|
||||||
})
|
})
|
||||||
.catchError((Object err, StackTrace st) {
|
.catchError((Object err, StackTrace st) {
|
||||||
Log.error('Video player initialization error', error: err, stackTrace: st);
|
Log.error(
|
||||||
|
'Video player initialization error',
|
||||||
|
error: err,
|
||||||
|
stackTrace: st,
|
||||||
|
);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -563,7 +572,9 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
currentMedia!.mediaFile.displayLimitInMilliseconds == null)
|
currentMedia!.mediaFile.displayLimitInMilliseconds == null)
|
||||||
MyIconButton(
|
MyIconButton(
|
||||||
variant: MyIconButtonVariant.secondary,
|
variant: MyIconButtonVariant.secondary,
|
||||||
onPressed: (currentMedia == null || currentMessage == null) ? null : onPressedSaveToGallery,
|
onPressed: (currentMedia == null || currentMessage == null)
|
||||||
|
? null
|
||||||
|
: onPressedSaveToGallery,
|
||||||
icon: imageSaving
|
icon: imageSaving
|
||||||
? const SizedBox(
|
? const SizedBox(
|
||||||
width: 16,
|
width: 16,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ description: "twonly, a privacy-friendly way to connect with friends through sec
|
||||||
|
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
|
|
||||||
version: 0.3.5+150
|
version: 0.3.5+151
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.11.0
|
sdk: ^3.11.0
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue