ensure correct ordering of media files

This commit is contained in:
otsmr 2026-06-05 10:49:57 +02:00
parent 3d130cb760
commit 1d3b8dbd8a
4 changed files with 45 additions and 14 deletions

View file

@ -50,7 +50,8 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
mediaFiles,
mediaFiles.mediaId.equalsExp(messages.mediaId),
),
])..where(
])
..where(
mediaFiles.downloadState
.equals(DownloadState.reuploadRequested.name)
.not() &
@ -60,7 +61,8 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
messages.mediaId.isNotNull() &
messages.senderId.isNotNull() &
messages.type.equals(MessageType.media.name),
);
)
..orderBy([OrderingTerm.asc(messages.createdAt)]);
return query.map((row) => row.readTable(messages)).watch();
}

View file

@ -254,7 +254,8 @@ class _CameraPreviewViewState extends State<CameraPreviewView> {
}
}
Future<void> requestMicrophonePermission() async {
Future<void> requestMicrophonePermission({int retryCount = 0}) async {
try {
final statuses = await [
Permission.microphone,
].request();
@ -266,6 +267,20 @@ class _CameraPreviewViewState extends State<CameraPreviewView> {
// _hasAudioPermission
});
}
} on PlatformException catch (e) {
if (e.message?.contains('already running') ?? false) {
if (retryCount < 5) {
Log.warn(
'Microphone permission request conflict, retrying in 300ms... (attempt ${retryCount + 1})',
);
await Future.delayed(const Duration(milliseconds: 300));
return requestMicrophonePermission(retryCount: retryCount + 1);
}
}
Log.error('PlatformException in requestMicrophonePermission: $e');
} catch (e) {
Log.error('Error in requestMicrophonePermission: $e');
}
}
Future<void> updateScaleFactor(double newScale) async {

View file

@ -158,6 +158,19 @@ class _MediaViewerViewState extends State<MediaViewerView> {
allMediaFiles.add(msg);
}
}
if (allMediaFiles.length > 1) {
if (widget.initialMessage == null &&
currentMedia == null &&
!_showDownloadingLoader) {
allMediaFiles.sort(
(a, b) => a.createdAt.compareTo(b.createdAt),
);
} else {
final upcoming = allMediaFiles.sublist(1)
..sort((a, b) => a.createdAt.compareTo(b.createdAt));
allMediaFiles = [allMediaFiles.first, ...upcoming];
}
}
if (mounted) setState(() {});
if (firstRun) {
firstRun = false;

View file

@ -59,6 +59,7 @@ class _ProfileSetupPageState extends State<ProfileSetupPage> {
builder: (context, asyncSnapshot) {
return Container(
padding: const EdgeInsets.all(4),
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
@ -67,7 +68,7 @@ class _ProfileSetupPageState extends State<ProfileSetupPage> {
),
),
child: const AvatarIcon(
fontSize: 70,
fontSize: 68,
myAvatar: true,
),
);