diff --git a/lib/components/matrix.dart b/lib/components/matrix.dart index 15d49ffb..d8863859 100644 --- a/lib/components/matrix.dart +++ b/lib/components/matrix.dart @@ -380,8 +380,9 @@ class MatrixState extends State { wallpaper = file; } }); - store.getItem(SettingKeys.fontSizeFactor).then((value) => AppConfig - .fontSizeFactor = double.tryParse(value) ?? AppConfig.fontSizeFactor); + store.getItem(SettingKeys.fontSizeFactor).then((value) => + AppConfig.fontSizeFactor = + double.tryParse(value ?? '') ?? AppConfig.fontSizeFactor); store .getItemBool(SettingKeys.renderHtml, AppConfig.renderHtml) .then((value) => AppConfig.renderHtml = value); diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 0232c4f5..633d7f58 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -18,6 +18,22 @@ "username": {} } }, + "badServerVersionsException": "The homeserver supports the Spec versions:\n{serverVersions}\nBut this app supports only {supportedVersions}", + "@badServerVersionsException": { + "type": "text", + "placeholders": { + "serverVersions": {}, + "supportedVersions": {} + } + }, + "badServerLoginTypesException": "The homeserver supports the login types:\n{serverVersions}\nBut this app supports only:\n{supportedVersions}", + "@badServerLoginTypesException": { + "type": "text", + "placeholders": { + "serverVersions": {}, + "supportedVersions": {} + } + }, "account": "Account", "@account": { "type": "text", diff --git a/lib/utils/localized_exception_extension.dart b/lib/utils/localized_exception_extension.dart index f57fe132..74cb04e2 100644 --- a/lib/utils/localized_exception_extension.dart +++ b/lib/utils/localized_exception_extension.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:famedlysdk/famedlysdk.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -14,7 +16,35 @@ extension LocalizedExceptionExtension on Object { return (this as MatrixException).errorMessage; } } - if (this is MatrixConnectionException) { + if (this is BadServerVersionsException) { + final serverVersions = (this as BadServerVersionsException) + .serverVersions + .toString() + .replaceAll('{', '"') + .replaceAll('}', '"'); + final supportedVersions = (this as BadServerVersionsException) + .supportedVersions + .toString() + .replaceAll('{', '"') + .replaceAll('}', '"'); + return L10n.of(context) + .badServerVersionsException(serverVersions, supportedVersions); + } + if (this is BadServerLoginTypesException) { + final serverVersions = (this as BadServerLoginTypesException) + .serverLoginTypes + .toString() + .replaceAll('{', '"') + .replaceAll('}', '"'); + final supportedVersions = (this as BadServerLoginTypesException) + .supportedLoginTypes + .toString() + .replaceAll('{', '"') + .replaceAll('}', '"'); + return L10n.of(context) + .badServerLoginTypesException(serverVersions, supportedVersions); + } + if (this is MatrixConnectionException || this is SocketException) { L10n.of(context).noConnectionToTheServer; } Logs().w('Something went wrong: ', this); diff --git a/lib/views/homeserver_picker.dart b/lib/views/homeserver_picker.dart index 0571e786..5b46c277 100644 --- a/lib/views/homeserver_picker.dart +++ b/lib/views/homeserver_picker.dart @@ -6,6 +6,7 @@ import 'package:famedlysdk/famedlysdk.dart'; import 'package:fluffychat/components/default_app_bar_search_field.dart'; import 'package:fluffychat/components/matrix.dart'; import 'package:fluffychat/app_config.dart'; +import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:flushbar/flushbar_helper.dart'; import 'package:flutter/foundation.dart'; @@ -78,7 +79,23 @@ class _HomeserverPickerState extends State { } setState(() => _isLoading = true); - await Matrix.of(context).client.checkHomeserver(homeserver); + final wellKnown = + await Matrix.of(context).client.checkHomeserver(homeserver); + + var jitsi = wellKnown?.content + ?.tryGet>('im.vector.riot.jitsi') + ?.tryGet('preferredDomain'); + if (jitsi != null) { + if (!jitsi.endsWith('/')) { + jitsi += '/'; + } + Logs().v('Found custom jitsi instance $jitsi'); + await Matrix.of(context) + .store + .setItem(SettingKeys.jitsiInstance, jitsi); + AppConfig.jitsiInstance = jitsi; + } + final loginTypes = await Matrix.of(context).client.requestLoginTypes(); if (loginTypes.flows .any((flow) => flow.type == AuthenticationTypes.password)) { @@ -92,9 +109,6 @@ class _HomeserverPickerState extends State { await launch( '${Matrix.of(context).client.homeserver?.toString()}/_matrix/client/r0/login/sso/redirect?redirectUrl=$redirectUrl'); } - } on String catch (e) { - // ignore: unawaited_futures - FlushbarHelper.createError(message: e).show(context); } catch (e) { // ignore: unawaited_futures FlushbarHelper.createError( diff --git a/pubspec.lock b/pubspec.lock index 727b7aa8..e229eff4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -223,7 +223,7 @@ packages: description: path: "." ref: main - resolved-ref: "9faf07e31ae825147c2b295517f04233e9342e25" + resolved-ref: fc8563849a4706ecef7c37fdd7d4fbb93757ec9b url: "https://gitlab.com/famedly/famedlysdk.git" source: git version: "0.0.1"