Compare commits

..
Author SHA1 Message Date
a2804f0def
bump gomuks 2026-08-23 14:04:30 -04:00
cb3848a2a1
support for registering pushers 2026-08-23 13:55:07 -04:00
3 changed files with 57 additions and 91 deletions

View file

@ -10,7 +10,6 @@ import "package:nexus/controllers/client.dart";
import "package:nexus/controllers/client_state.dart"; import "package:nexus/controllers/client_state.dart";
import "package:nexus/controllers/settings.dart"; import "package:nexus/controllers/settings.dart";
import "package:nexus/controllers/unified_push.dart"; import "package:nexus/controllers/unified_push.dart";
import "package:nexus/controllers/spec_versions.dart";
import "package:nexus/models/account_data.dart"; import "package:nexus/models/account_data.dart";
import "package:nexus/models/settings_category.dart"; import "package:nexus/models/settings_category.dart";
import "package:nexus/main.dart"; import "package:nexus/main.dart";
@ -21,6 +20,9 @@ class SettingsSectionsController
@override @override
Future<IMap<String, IList<SettingsCategory>>> build() async { Future<IMap<String, IList<SettingsCategory>>> build() async {
final settings = await ref.watch(SettingsController.provider.future); final settings = await ref.watch(SettingsController.provider.future);
final specVersionsResponse = await ref
.watch(ClientController.provider.notifier)
.getSpecVersions();
return .new({ return .new({
"General": .new([ "General": .new([
@ -50,7 +52,6 @@ class SettingsSectionsController
title: "Use Dynamic Theme", title: "Use Dynamic Theme",
icon: Icons.palette, icon: Icons.palette,
description: "Toggle on or off Dynamic Theme. Only available on Android, Linux, Windows, or MacOS.", description: "Toggle on or off Dynamic Theme. Only available on Android, Linux, Windows, or MacOS.",
description: "Toggle on or off Dynamic Theme. Only available on Android, Linux, Windows, or MacOS.",
builder: (title, description, icon) => SwitchListTile( builder: (title, description, icon) => SwitchListTile(
title: Text(title), title: Text(title),
subtitle: Text(description), subtitle: Text(description),
@ -77,7 +78,6 @@ class SettingsSectionsController
.new( .new(
title: "Linux Mobile Mode", title: "Linux Mobile Mode",
description: "Enables some fixes for Linux mobile, e.g. disabling dragging appbar for moving window.", description: "Enables some fixes for Linux mobile, e.g. disabling dragging appbar for moving window.",
description: "Enables some fixes for Linux mobile, e.g. disabling dragging appbar for moving window.",
icon: Icons.construction, icon: Icons.construction,
builder: (title, description, icon) => SwitchListTile( builder: (title, description, icon) => SwitchListTile(
title: Text(title), title: Text(title),
@ -145,13 +145,9 @@ class SettingsSectionsController
.new( .new(
title: "Invite Blocking", title: "Invite Blocking",
description: "Block invites, either completely, or block only invites from users without shared private rooms (depends on server support).", description: "Block invites, either completely, or block only invites from users without shared private rooms (depends on server support).",
description: "Block invites, either completely, or block only invites from users without shared private rooms (depends on server support).",
builder: (title, description, icon) => Consumer( builder: (title, description, icon) => Consumer(
builder: (context, ref, _) { builder: (context, ref, _) =>
final specVersionsResponse = ref.watch( DialogListTile<DefaultInviteAction>(
SpecVersionsController.provider,
);
return DialogListTile<DefaultInviteAction>(
icon: Icon(icon), icon: Icon(icon),
title: title, title: title,
subtitle: Text(description), subtitle: Text(description),
@ -159,11 +155,7 @@ class SettingsSectionsController
.watch(AccountDataController.provider) .watch(AccountDataController.provider)
.invitePermissionConfig .invitePermissionConfig
.defaultAction, .defaultAction,
options: options: specVersionsResponse.unstableFeatures.msc4494
specVersionsResponse.maybeWhen(
data: (data) => data.unstableFeatures.msc4494,
orElse: () => true,
)
? DefaultInviteAction.values ? DefaultInviteAction.values
: IList(DefaultInviteAction.values) : IList(DefaultInviteAction.values)
.remove(.denyPublic) .remove(.denyPublic)
@ -173,9 +165,7 @@ class SettingsSectionsController
.deny => "Deny", .deny => "Deny",
.denyPublic => "Deny public", .denyPublic => "Deny public",
}, },
onChanged: specVersionsResponse.maybeWhen( onChanged: (value) => ref
data: (_) =>
(value) => ref
.watch(ClientController.provider.notifier) .watch(ClientController.provider.notifier)
.setAccountData( .setAccountData(
.new( .new(
@ -186,10 +176,7 @@ class SettingsSectionsController
), ),
) )
.onError(showError), .onError(showError),
orElse: () => null,
), ),
);
},
), ),
icon: Icons.person_off, icon: Icons.person_off,
), ),
@ -210,8 +197,6 @@ class SettingsSectionsController
onPressed: () async { onPressed: () async {
Navigator.of(context) Navigator.of(context)
.popUntil((route) => route.isFirst); .popUntil((route) => route.isFirst);
Navigator.of(context)
.popUntil((route) => route.isFirst);
await WidgetsBinding.instance.endOfFrame; await WidgetsBinding.instance.endOfFrame;

View file

@ -1,15 +0,0 @@
import "package:hooks_riverpod/hooks_riverpod.dart";
import "package:nexus/controllers/client.dart";
import "package:nexus/models/spec_versions_response.dart";
class SpecVersionsController extends AsyncNotifier<SpecVersionsResponse> {
@override
Future<SpecVersionsResponse> build() =>
ref.watch(ClientController.provider.notifier).getSpecVersions();
static final provider =
AsyncNotifierProvider.autoDispose<
SpecVersionsController,
SpecVersionsResponse
>(SpecVersionsController.new);
}

View file

@ -170,17 +170,14 @@ class const SettingsPage({super.key}) extends ConsumerWidget {
) )
: Row( : Row(
children: [ children: [
MaterialUiCompatibilityBridge( NavigationRailM3E(
child: NavigationRailM3E(
type: .alwaysExpand, type: .alwaysExpand,
trailing: searchBar, trailing: searchBar,
scrollable: true, scrollable: true,
sections: sections sections: sections
.mapTo( .mapTo(
( (categoryGroup, categories) =>
categoryGroup, NavigationRailM3ESection(
categories,
) => NavigationRailM3ESection(
header: DividerText(categoryGroup), header: DividerText(categoryGroup),
destinations: categories destinations: categories
.map( .map(
@ -198,7 +195,6 @@ class const SettingsPage({super.key}) extends ConsumerWidget {
onDestinationSelected: (value) => onDestinationSelected: (value) =>
selected.value = value, selected.value = value,
), ),
),
VerticalDivider(), VerticalDivider(),
Expanded( Expanded(
child: SuperListView( child: SuperListView(