mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-19 16:23:37 +00:00
46 lines
1.5 KiB
Dart
46 lines
1.5 KiB
Dart
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('');
|
|
}
|
|
}
|