71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.0 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,
 | |
|         wallpaperBlur: config.wallpaperBlur ?? currentConfig.wallpaperBlur,
 | |
|       ).toJson(),
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| class ApplicationAccountConfig {
 | |
|   final Uri? wallpaperUrl;
 | |
|   final double? wallpaperOpacity;
 | |
|   final double? wallpaperBlur;
 | |
| 
 | |
|   const ApplicationAccountConfig({
 | |
|     this.wallpaperUrl,
 | |
|     this.wallpaperOpacity,
 | |
|     this.wallpaperBlur,
 | |
|   });
 | |
| 
 | |
|   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')),
 | |
|         wallpaperBlur: json.tryGet<double>('wallpaper_blur'),
 | |
|       );
 | |
| 
 | |
|   Map<String, dynamic> toJson() => {
 | |
|         'wallpaper_url': wallpaperUrl?.toString(),
 | |
|         'wallpaper_opacity': wallpaperOpacity,
 | |
|         'wallpaper_blur': wallpaperBlur,
 | |
|       };
 | |
| }
 |