feat: New account data wallpaper feature
parent
26f4e99006
commit
3b9245c8c7
@ -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,
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue