diff --git a/lib/views/chat.dart b/lib/views/chat.dart index 9c3ddc0b..02efc111 100644 --- a/lib/views/chat.dart +++ b/lib/views/chat.dart @@ -698,6 +698,36 @@ class _ChatState extends State { child: Column( children: [ ConnectionStatusHeader(), + if (room.getState(EventTypes.RoomTombstone) != null) + Container( + height: 56, + color: Theme.of(context).secondaryHeaderColor, + child: ListTile( + leading: Icon(Icons.upgrade_outlined), + title: Text(room + .getState(EventTypes.RoomTombstone) + .parsedTombstoneContent + .body), + onTap: () async { + final result = await showFutureLoadingDialog( + context: context, + future: () => room.client.joinRoom(room + .getState(EventTypes.RoomTombstone) + .parsedTombstoneContent + .replacementRoom), + ); + await showFutureLoadingDialog( + context: context, + future: () => room.leave(), + ); + if (result.error == null) { + await AdaptivePageLayout.of(context) + .pushNamedAndRemoveUntilIsFirst( + '/rooms/${result.result}'); + } + }, + ), + ), Expanded( child: FutureBuilder( future: getTimeline(context), diff --git a/lib/views/chat_permissions_settings.dart b/lib/views/chat_permissions_settings.dart index ae5c3bc3..b1f8944d 100644 --- a/lib/views/chat_permissions_settings.dart +++ b/lib/views/chat_permissions_settings.dart @@ -1,5 +1,6 @@ import 'dart:developer'; +import 'package:adaptive_page_layout/adaptive_page_layout.dart'; import 'package:fluffychat/components/dialogs/permission_slider_dialog.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:fluffychat/components/matrix.dart'; @@ -123,6 +124,43 @@ class ChatPermissionsSettings extends StatelessWidget { context, entry.key, entry.value, category: 'events'), ), + if (room.ownPowerLevel >= 100) ...{ + Divider(thickness: 1), + FutureBuilder( + future: room.client.requestServerCapabilities(), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return Center(child: CircularProgressIndicator()); + } + final String roomVersion = room + .getState(EventTypes.RoomCreate) + .content['room_version'] ?? + '1'; + final shouldHaveVersion = + snapshot.data.mRoomVersions.defaultVersion; + + return ListTile( + title: Text('Current room version: $roomVersion'), + subtitle: roomVersion == shouldHaveVersion + ? null + : Text( + 'Upgrade to $shouldHaveVersion available!', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Theme.of(context).accentColor), + ), + onTap: roomVersion == shouldHaveVersion + ? null + : () => showFutureLoadingDialog( + context: context, + future: () => room.client + .upgradeRoom(roomId, shouldHaveVersion), + ).then((_) => + AdaptivePageLayout.of(context).pop()), + ); + }, + ), + }, ], ), ],