mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 18:13:31 +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 excludedCircleIds = _parseAcl(json['deny_cid']);
|
|
final allowedCircleIds = _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 &&
|
|
allowedCircleIds.isEmpty &&
|
|
excludedCircleIds.isEmpty
|
|
? VisibilityType.public
|
|
: VisibilityType.private;
|
|
} else {
|
|
type = topLevelPrivate ? VisibilityType.public : VisibilityType.private;
|
|
}
|
|
|
|
return Visibility(
|
|
type: type,
|
|
allowedUserIds: allowedUserIds,
|
|
excludedUserIds: excludedUserIds,
|
|
allowedCircleIds: allowedCircleIds,
|
|
excludedCircleIds: excludedCircleIds,
|
|
);
|
|
}
|
|
|
|
Map<String, String> toMapEntries() {
|
|
return {
|
|
'allow_cid': _idsListToAclString(allowedUserIds),
|
|
'deny_cid': _idsListToAclString(excludedUserIds),
|
|
'allow_gid': _idsListToAclString(allowedCircleIds),
|
|
'deny_gid': _idsListToAclString(excludedCircleIds),
|
|
};
|
|
}
|
|
|
|
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('');
|
|
}
|
|
}
|