feat: New account data wallpaper feature

This commit is contained in:
Krille 2024-01-25 16:52:36 +01:00
commit 3b9245c8c7
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652
11 changed files with 262 additions and 34 deletions

View file

@ -0,0 +1,65 @@
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,
};
}