diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 7632fbfc..96bdbf14 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -17,7 +17,6 @@ import 'package:uni_links/uni_links.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list_view.dart'; -import 'package:fluffychat/pages/settings_security/settings_security.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -775,8 +774,7 @@ class ChatListController extends State isTorBrowser = isTor; } - Future dehydrate() => - SettingsSecurityController.dehydrateDevice(context); + Future dehydrate() => Matrix.of(context).dehydrateAction(); } enum EditBundleAction { addToBundle, removeFromBundle } diff --git a/lib/pages/settings_security/settings_security.dart b/lib/pages/settings_security/settings_security.dart index 4482f764..3f488070 100644 --- a/lib/pages/settings_security/settings_security.dart +++ b/lib/pages/settings_security/settings_security.dart @@ -1,15 +1,10 @@ -import 'dart:convert'; -import 'dart:typed_data'; - import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; -import 'package:intl/intl.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/widgets/app_lock.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../bootstrap/bootstrap_dialog.dart'; @@ -120,36 +115,7 @@ class SettingsSecurityController extends State { ).show(context); } - Future dehydrateAction() => dehydrateDevice(context); - - static Future dehydrateDevice(BuildContext context) async { - final response = await showOkCancelAlertDialog( - context: context, - isDestructiveAction: true, - title: L10n.of(context)!.dehydrate, - message: L10n.of(context)!.dehydrateWarning, - ); - if (response != OkCancelResult.ok) { - return; - } - final file = await showFutureLoadingDialog( - context: context, - future: () async { - final export = await Matrix.of(context).client.exportDump(); - if (export == null) throw Exception('Export data is null.'); - - final exportBytes = Uint8List.fromList( - const Utf8Codec().encode(export), - ); - - final exportFileName = - 'fluffychat-export-${DateFormat(DateFormat.YEAR_MONTH_DAY).format(DateTime.now())}.fluffybackup'; - - return MatrixFile(bytes: exportBytes, name: exportFileName); - }, - ); - file.result?.save(context); - } + Future dehydrateAction() => Matrix.of(context).dehydrateAction(); @override Widget build(BuildContext context) => SettingsSecurityView(this); diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 3c5b653c..152d42ee 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -11,6 +11,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:http/http.dart' as http; import 'package:image_picker/image_picker.dart'; +import 'package:intl/intl.dart'; import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; import 'package:provider/provider.dart'; @@ -21,6 +22,7 @@ import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/init_with_restore.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/uia_request_manager.dart'; import 'package:fluffychat/utils/voip_plugin.dart'; @@ -478,6 +480,34 @@ class MatrixState extends State with WidgetsBindingObserver { child: widget.child, ); } + + Future dehydrateAction() async { + final response = await showOkCancelAlertDialog( + context: context, + isDestructiveAction: true, + title: L10n.of(context)!.dehydrate, + message: L10n.of(context)!.dehydrateWarning, + ); + if (response != OkCancelResult.ok) { + return; + } + final result = await showFutureLoadingDialog( + context: context, + future: client.exportDump, + ); + final export = result.result; + if (export == null) return; + + final exportBytes = Uint8List.fromList( + const Utf8Codec().encode(export), + ); + + final exportFileName = + 'fluffychat-export-${DateFormat(DateFormat.YEAR_MONTH_DAY).format(DateTime.now())}.fluffybackup'; + + final file = MatrixFile(bytes: exportBytes, name: exportFileName); + file.save(context); + } } class _AccountBundleWithClient {