import '../../models/visibility.dart'; extension VisibilityFriendicaExtensions on Visibility { static Visibility fromJson(Map 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 toMapEntries() { return { 'allow_cid': _idsListToAclString(allowedUserIds), 'deny_cid': _idsListToAclString(excludedUserIds), 'allow_gid': _idsListToAclString(allowedGroupIds), 'deny_gid': _idsListToAclString(excludedGroupIds), }; } static List _parseAcl(String? acl) => acl?.split(RegExp('[><]')).where((e) => e.isNotEmpty).toList() ?? []; String _idsListToAclString(List ids) { return ids.map((id) => '<$id>').join(''); } }