diff --git a/config.sample.json b/config.sample.json index ff37ec23..8ce872ab 100644 --- a/config.sample.json +++ b/config.sample.json @@ -6,5 +6,6 @@ "privacy_url": "https://fluffychat.im/en/privacy.html", "render_html": false, "hide_redacted_events": false, - "hide_unknown_events": false + "hide_unknown_events": false, + "use_location_based_homeserver": true } \ No newline at end of file diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index de99da9b..be251920 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -60,6 +60,7 @@ abstract class AppConfig { 'https://github.com/googlefonts/noto-emoji/'; static const double borderRadius = 16.0; static const double columnWidth = 360.0; + static bool useLocaleBasedHomeserver = true; static void loadFromJson(Map json) { if (json['chat_color'] != null) { @@ -95,5 +96,8 @@ abstract class AppConfig { if (json['hide_unknown_events'] is bool) { hideUnknownEvents = json['hide_unknown_events']; } + if (json['use_location_based_homeserver'] is bool) { + useLocaleBasedHomeserver = json['use_location_based_homeserver']; + } } } diff --git a/lib/pages/homeserver_picker/homeserver_picker.dart b/lib/pages/homeserver_picker/homeserver_picker.dart index 81298791..ddf98968 100644 --- a/lib/pages/homeserver_picker/homeserver_picker.dart +++ b/lib/pages/homeserver_picker/homeserver_picker.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:ui'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -90,7 +91,8 @@ class HomeserverPickerController extends State { void _loadHomeserverList() async { try { - final homeserverList = await JoinmatrixOrgParser().fetchHomeservers(); + final homeserverList = + await const JoinmatrixOrgParser().fetchHomeservers(); final benchmark = await HomeserverListProvider.benchmarkHomeserver( homeserverList, timeout: const Duration(seconds: 10), @@ -159,6 +161,14 @@ class HomeserverPickerController extends State { } } + void _defaultHomeserverByLocale() { + final servers = + LocalHomeserverParser(window.locale.countryCode).fetchHomeservers(); + if (servers.isNotEmpty) { + setState(() => homeserverController.text = servers.first.baseUrl.host); + } + } + @override void dispose() { homeserverFocusNode.removeListener(_updateFocus); @@ -169,6 +179,10 @@ class HomeserverPickerController extends State { void initState() { homeserverFocusNode.addListener(_updateFocus); _checkTorBrowser(); + if (AppConfig.useLocaleBasedHomeserver) { + WidgetsBinding.instance + .addPostFrameCallback((timeStamp) => _defaultHomeserverByLocale()); + } super.initState(); } diff --git a/pubspec.lock b/pubspec.lock index da687cfc..0c3c41ac 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1047,7 +1047,7 @@ packages: name: matrix_homeserver_recommendations url: "https://pub.dartlang.org" source: hosted - version: "0.2.1" + version: "0.3.0" matrix_link_text: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 77173eba..c5245a86 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -61,7 +61,7 @@ dependencies: localstorage: ^4.0.0+1 lottie: ^1.2.2 matrix: ^0.10.3 - matrix_homeserver_recommendations: ^0.2.1 + matrix_homeserver_recommendations: ^0.3.0 matrix_link_text: ^1.0.2 native_imaging: git: https://gitlab.com/famedly/company/frontend/libraries/native_imaging.git