mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-06-13 12:42:13 +00:00
ensure correct ordering of media files
This commit is contained in:
parent
3d130cb760
commit
1d3b8dbd8a
4 changed files with 45 additions and 14 deletions
|
|
@ -50,7 +50,8 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
mediaFiles,
|
mediaFiles,
|
||||||
mediaFiles.mediaId.equalsExp(messages.mediaId),
|
mediaFiles.mediaId.equalsExp(messages.mediaId),
|
||||||
),
|
),
|
||||||
])..where(
|
])
|
||||||
|
..where(
|
||||||
mediaFiles.downloadState
|
mediaFiles.downloadState
|
||||||
.equals(DownloadState.reuploadRequested.name)
|
.equals(DownloadState.reuploadRequested.name)
|
||||||
.not() &
|
.not() &
|
||||||
|
|
@ -60,7 +61,8 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
|
||||||
messages.mediaId.isNotNull() &
|
messages.mediaId.isNotNull() &
|
||||||
messages.senderId.isNotNull() &
|
messages.senderId.isNotNull() &
|
||||||
messages.type.equals(MessageType.media.name),
|
messages.type.equals(MessageType.media.name),
|
||||||
);
|
)
|
||||||
|
..orderBy([OrderingTerm.asc(messages.createdAt)]);
|
||||||
return query.map((row) => row.readTable(messages)).watch();
|
return query.map((row) => row.readTable(messages)).watch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -254,17 +254,32 @@ class _CameraPreviewViewState extends State<CameraPreviewView> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> requestMicrophonePermission() async {
|
Future<void> requestMicrophonePermission({int retryCount = 0}) async {
|
||||||
final statuses = await [
|
try {
|
||||||
Permission.microphone,
|
final statuses = await [
|
||||||
].request();
|
Permission.microphone,
|
||||||
if (statuses[Permission.microphone]!.isPermanentlyDenied) {
|
].request();
|
||||||
await openAppSettings();
|
if (statuses[Permission.microphone]!.isPermanentlyDenied) {
|
||||||
} else {
|
await openAppSettings();
|
||||||
_hasAudioPermission = await Permission.microphone.isGranted;
|
} else {
|
||||||
setState(() {
|
_hasAudioPermission = await Permission.microphone.isGranted;
|
||||||
// _hasAudioPermission
|
setState(() {
|
||||||
});
|
// _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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -158,6 +158,19 @@ class _MediaViewerViewState extends State<MediaViewerView> {
|
||||||
allMediaFiles.add(msg);
|
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 (mounted) setState(() {});
|
||||||
if (firstRun) {
|
if (firstRun) {
|
||||||
firstRun = false;
|
firstRun = false;
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ class _ProfileSetupPageState extends State<ProfileSetupPage> {
|
||||||
builder: (context, asyncSnapshot) {
|
builder: (context, asyncSnapshot) {
|
||||||
return Container(
|
return Container(
|
||||||
padding: const EdgeInsets.all(4),
|
padding: const EdgeInsets.all(4),
|
||||||
|
clipBehavior: Clip.antiAlias,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
|
|
@ -67,7 +68,7 @@ class _ProfileSetupPageState extends State<ProfileSetupPage> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: const AvatarIcon(
|
child: const AvatarIcon(
|
||||||
fontSize: 70,
|
fontSize: 68,
|
||||||
myAvatar: true,
|
myAvatar: true,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue