You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fluffychat/lib/pages/settings_homeserver/settings_homeserver.dart

59 lines
1.7 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:matrix/matrix.dart';
import '../../widgets/matrix.dart';
import 'settings_homeserver_view.dart';
class SettingsHomeserver extends StatefulWidget {
const SettingsHomeserver({super.key});
@override
SettingsHomeserverController createState() => SettingsHomeserverController();
}
class SettingsHomeserverController extends State<SettingsHomeserver> {
Future<({String name, String version, Uri federationBaseUrl})>
fetchServerInfo() async {
final client = Matrix.of(context).client;
final domain = client.userID!.domain!;
final httpClient = client.httpClient;
var federationBaseUrl = Uri(host: domain, port: 8448, scheme: 'https');
try {
final serverWellKnownResult = await httpClient.get(
Uri.https(domain, '/.well-known/matrix/server'),
);
final serverWellKnown = jsonDecode(serverWellKnownResult.body);
federationBaseUrl = Uri.https(serverWellKnown['m.server']);
} catch (e, s) {
Logs().w(
'Unable to fetch federation base uri. Use $federationBaseUrl',
e,
s,
);
}
final serverVersionResult = await http.get(
federationBaseUrl.resolveUri(
Uri(path: '/_matrix/federation/v1/version'),
),
);
final {
'server': {
'name': String name,
'version': String version,
},
} = Map<String, Map<String, dynamic>>.from(
jsonDecode(serverVersionResult.body),
);
return (name: name, version: version, federationBaseUrl: federationBaseUrl);
}
@override
Widget build(BuildContext context) => SettingsHomeserverView(this);
}