fluffychat/lib/utils/account_config.dart
2024-01-31 08:52:00 +01:00

65 lines
1.8 KiB
Dart

import 'package:matrix/matrix.dart';
extension ApplicationAccountConfigExtension on Client {
static const String accountDataKey = 'im.fluffychat.account_config';
ApplicationAccountConfig get applicationAccountConfig =>
ApplicationAccountConfig.fromJson(
accountData[accountDataKey]?.content ?? {},
);
Future<void> setApplicationAccountConfig(
ApplicationAccountConfig config,
) =>
setAccountData(
userID!,
accountDataKey,
config.toJson(),
);
/// Only updates the specified values in ApplicationAccountConfig
Future<void> updateApplicationAccountConfig(
ApplicationAccountConfig config,
) {
final currentConfig = applicationAccountConfig;
return setAccountData(
userID!,
accountDataKey,
ApplicationAccountConfig(
wallpaperUrl: config.wallpaperUrl ?? currentConfig.wallpaperUrl,
wallpaperOpacity:
config.wallpaperOpacity ?? currentConfig.wallpaperOpacity,
).toJson(),
);
}
}
class ApplicationAccountConfig {
final Uri? wallpaperUrl;
final double? wallpaperOpacity;
const ApplicationAccountConfig({
this.wallpaperUrl,
this.wallpaperOpacity,
});
static double _sanitizedOpacity(double? opacity) {
if (opacity == null) return 1;
if (opacity > 1 || opacity < 0) return 1;
return opacity;
}
factory ApplicationAccountConfig.fromJson(Map<String, dynamic> json) =>
ApplicationAccountConfig(
wallpaperUrl: json['wallpaper_url'] is String
? Uri.tryParse(json['wallpaper_url'])
: null,
wallpaperOpacity:
_sanitizedOpacity(json.tryGet<double>('wallpaper_opacity')),
);
Map<String, dynamic> toJson() => {
'wallpaper_url': wallpaperUrl?.toString(),
'wallpaper_opacity': wallpaperOpacity,
};
}