diff --git a/flake.nix b/flake.nix index 4c06ac6..7503c87 100644 --- a/flake.nix +++ b/flake.nix @@ -58,6 +58,7 @@ permissions = { share = [ "network" ]; sockets = [ + "pulseaudio" "fallback-x11" "wayland" ]; diff --git a/lib/controllers/room_chat_controller.dart b/lib/controllers/room_chat_controller.dart index 07b3650..b93885e 100644 --- a/lib/controllers/room_chat_controller.dart +++ b/lib/controllers/room_chat_controller.dart @@ -54,7 +54,10 @@ class RoomChatController extends AsyncNotifier?> { return editedEvent == null ? foundEvent - : foundEvent?.copyWith(content: editedEvent.content); + : foundEvent?.copyWith( + content: editedEvent.content, + localContent: editedEvent.localContent, + ); }) .nonNulls .toIList(); diff --git a/lib/controllers/url_preview_controller.dart b/lib/controllers/url_preview_controller.dart index bb5626a..3bdaae7 100644 --- a/lib/controllers/url_preview_controller.dart +++ b/lib/controllers/url_preview_controller.dart @@ -12,33 +12,36 @@ class UrlPreviewController extends AsyncNotifier { @override Future build() async { - final homeserver = ref.watch( - ClientStateController.provider.select((value) => value?.homeserverUrl), - ); + try { + final homeserver = ref.watch( + ClientStateController.provider.select((value) => value?.homeserverUrl), + ); - if (homeserver != null && !link.contains("matrix.to")) { - { - final response = await get( - .parse(homeserver) - .resolve("/_matrix/client/v1/media/preview_url") - .replace(queryParameters: {"url": link}), - headers: await ref.watch(HeaderController.provider.future), - ); + if (homeserver != null && !link.contains("matrix.to")) { + { + final response = await get( + .parse(homeserver) + .resolve("/_matrix/client/v1/media/preview_url") + .replace(queryParameters: {"url": link}), + headers: await ref.watch(HeaderController.provider.future), + ); - if (response.statusCode == 200) { - final decodedValue = json.decode(response.body); - if (decodedValue is! Map) return null; + if (response.statusCode == 200) { + final decodedValue = json.decode(response.body); + if (decodedValue is! Map) return null; - final mxc = decodedValue["og:image"]; - final image = mxc == null - ? null - : Uri.tryParse(mxc)?.mxcToHttps(homeserver); + final mxc = decodedValue["og:image"]; + final image = mxc == null + ? null + : Uri.tryParse(mxc)?.mxcToHttps(homeserver); - return .fromJson(decodedValue).copyWith(imageUrl: image); + return .fromJson(decodedValue).copyWith(imageUrl: image); + } } } + } catch (_) { + return null; } - return null; } diff --git a/lib/widgets/composer/composer.dart b/lib/widgets/composer/composer.dart index 618d9ee..d4c645d 100644 --- a/lib/widgets/composer/composer.dart +++ b/lib/widgets/composer/composer.dart @@ -5,6 +5,7 @@ import "package:flutter_hooks/flutter_hooks.dart"; import "package:fluttertagger/fluttertagger.dart"; import "package:hooks_riverpod/hooks_riverpod.dart"; import "package:nexus/controllers/power_level_controller.dart"; +import "package:nexus/models/content/message.dart"; import "package:nexus/models/event.dart"; import "package:nexus/models/relation_type.dart"; import "package:nexus/widgets/composer/mention_overlay.dart"; @@ -42,7 +43,12 @@ class Composer extends HookConsumerWidget { final query = useState(""); if (relationType == .edit && controller.value.text.isEmpty) { - controller.value.text = relatedEvent?.localContent?.editSource ?? ""; + controller.value.text = + relatedEvent?.localContent?.editSource ?? + switch (relatedEvent?.content) { + TextMessageContent(:final body) => body, + _ => "", + }; } void send() { diff --git a/lib/widgets/room_chat.dart b/lib/widgets/room_chat.dart index 2817172..e1036cc 100644 --- a/lib/widgets/room_chat.dart +++ b/lib/widgets/room_chat.dart @@ -508,7 +508,6 @@ class RoomChat extends HookConsumerWidget { MemberList(roomId), ], ), - endDrawer: showMembersByDefault ? null : MemberList(roomId), ); }