relatica/lib/serializers/friendica/visibility_friendica_extensions.dart

47 lines
1.5 KiB
Dart
Raw Normal View History

import '../../models/visibility.dart';
extension VisibilityFriendicaExtensions on Visibility {
static Visibility fromJson(Map<String, dynamic> json) {
final allowedUserIds = _parseAcl(json['allow_cid']);
final excludedGroupIds = _parseAcl(json['deny_cid']);
final allowedGroupIds = _parseAcl(json['allow_gid']);
final excludedUserIds = _parseAcl(json['deny_cid']);
final topLevelPrivate = json['friendica_private'];
late final VisibilityType type;
if (topLevelPrivate == null) {
type = allowedUserIds.isEmpty &&
excludedUserIds.isEmpty &&
allowedGroupIds.isEmpty &&
excludedGroupIds.isEmpty
? VisibilityType.public
: VisibilityType.private;
} else {
type = topLevelPrivate ? VisibilityType.public : VisibilityType.private;
}
return Visibility(
type: type,
allowedUserIds: allowedUserIds,
excludedUserIds: excludedUserIds,
allowedGroupIds: allowedGroupIds,
excludedGroupIds: excludedGroupIds,
);
}
Map<String, String> toMapEntries() {
return {
'allow_cid': _idsListToAclString(allowedUserIds),
'deny_cid': _idsListToAclString(excludedUserIds),
'allow_gid': _idsListToAclString(allowedGroupIds),
'deny_gid': _idsListToAclString(excludedGroupIds),
};
}
static List<String> _parseAcl(String? acl) =>
acl?.split(RegExp('[><]')).where((e) => e.isNotEmpty).toList() ?? [];
String _idsListToAclString(List<String> ids) {
return ids.map((id) => '<$id>').join('');
}
}