mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 13:33:32 +00:00
Add more fine-grained privacy processing for direct messages and preserving settings on comments
This commit is contained in:
parent
46ed40920b
commit
1d65ba2604
3 changed files with 46 additions and 8 deletions
|
@ -843,7 +843,7 @@ class StatusesClient extends FriendicaClient {
|
||||||
if (spoilerText.isNotEmpty) 'spoiler_text': spoilerText,
|
if (spoilerText.isNotEmpty) 'spoiler_text': spoilerText,
|
||||||
if (inReplyToId.isNotEmpty) 'in_reply_to_id': inReplyToId,
|
if (inReplyToId.isNotEmpty) 'in_reply_to_id': inReplyToId,
|
||||||
if (mediaIds.isNotEmpty) 'media_ids': mediaIds,
|
if (mediaIds.isNotEmpty) 'media_ids': mediaIds,
|
||||||
'visibility': visibility.toCreateStatusValue(),
|
'visibility': visibility.toCreateStatusValue(inReplyToId.isNotEmpty),
|
||||||
'friendica': {
|
'friendica': {
|
||||||
'title': '',
|
'title': '',
|
||||||
},
|
},
|
||||||
|
|
|
@ -71,9 +71,33 @@ extension TimelineEntryMastodonExtensions on TimelineEntry {
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
final youReshared = json['reblogged'] ?? false;
|
final youReshared = json['reblogged'] ?? false;
|
||||||
final visibility = ['public', 'unlisted'].contains(json['visibility'])
|
late final Visibility visibility;
|
||||||
? Visibility.public()
|
final visibilityString = json['visibility'];
|
||||||
: Visibility.private();
|
if (visibilityString == 'public') {
|
||||||
|
visibility = Visibility.public();
|
||||||
|
} else if (visibilityString == 'private') {
|
||||||
|
final allowedUserIds =
|
||||||
|
json['friendica']?['visibility']?['allow_cid'] as List<dynamic>? ??
|
||||||
|
[];
|
||||||
|
final excludedUserIds =
|
||||||
|
json['friendica']?['visibility']?['deny_cid'] as List<dynamic>? ?? [];
|
||||||
|
final allowedCircleIds =
|
||||||
|
json['friendica']?['visibility']?['allow_gid'] as List<dynamic>? ??
|
||||||
|
[];
|
||||||
|
final excludedCircleIds =
|
||||||
|
json['friendica']?['visibility']?['deny_gid'] as List<dynamic>? ?? [];
|
||||||
|
visibility = Visibility(
|
||||||
|
type: VisibilityType.private,
|
||||||
|
allowedUserIds: allowedUserIds.map((e) => e.toString()).toList(),
|
||||||
|
excludedUserIds: excludedUserIds.map((e) => e.toString()).toList(),
|
||||||
|
allowedCircleIds: allowedCircleIds.map((e) => e.toString()).toList(),
|
||||||
|
excludedCircleIds: excludedCircleIds.map((e) => e.toString()).toList(),
|
||||||
|
);
|
||||||
|
} else if (visibilityString == 'unlisted') {
|
||||||
|
visibility = Visibility.private();
|
||||||
|
} else {
|
||||||
|
visibility = Visibility.private();
|
||||||
|
}
|
||||||
|
|
||||||
const title = '';
|
const title = '';
|
||||||
final body = json['content'] ?? '';
|
final body = json['content'] ?? '';
|
||||||
|
|
|
@ -3,20 +3,34 @@ import 'package:relatica/models/circle_data.dart';
|
||||||
import '../../models/visibility.dart';
|
import '../../models/visibility.dart';
|
||||||
|
|
||||||
extension VisibilityMastodonExtensions on Visibility {
|
extension VisibilityMastodonExtensions on Visibility {
|
||||||
String toCreateStatusValue() {
|
String toCreateStatusValue(bool onComment) {
|
||||||
if (type == VisibilityType.public) {
|
if (type == VisibilityType.public) {
|
||||||
return 'public';
|
return 'public';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasDetails) {
|
if (!onComment && hasDetails) {
|
||||||
final circleId = allowedCircleIds.first;
|
final circleId =
|
||||||
|
allowedCircleIds.firstOrNull ?? allowedUserIds.firstOrNull;
|
||||||
if (circleId == CircleData.followersPseudoCircle.id) {
|
if (circleId == CircleData.followersPseudoCircle.id) {
|
||||||
return 'private';
|
return 'private';
|
||||||
}
|
}
|
||||||
|
|
||||||
return circleId;
|
return circleId ?? 'private';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onComment && !hasDetails && type == VisibilityType.private) {
|
||||||
|
return 'direct';
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'private';
|
return 'private';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> friendicaExtensionVisibilityJson() {
|
||||||
|
return {
|
||||||
|
"allow_cid": allowedUserIds,
|
||||||
|
"deny_cid": excludedUserIds,
|
||||||
|
"allow_gid": allowedCircleIds,
|
||||||
|
"deny_gid": excludedCircleIds,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue