getModerationPrefs method
Implementation
ModerationPrefs getModerationPrefs({
List<String> appLabelers = const [_kBskyLabelerDid],
}) {
bool adultContentEnabled = false;
final labels = <String, LabelPreference>{};
final mutedWords = <MutedWord>[];
final hiddenPosts = <String>[];
final labelers = <Map<String, dynamic>>[];
final labelPrefs = <ContentLabelPref>[];
for (final preference in preferences) {
if (preference.isAdultContentPref) {
adultContentEnabled = preference.adultContentPref!.enabled;
} else if (preference.isLabelersPref) {
labelers.addAll(
preference.labelersPref!.labelers.map(
(e) => {'did': e.did, 'labels': <String, LabelPreference>{}},
),
);
} else if (preference.isMutedWordsPref) {
mutedWords.addAll(preference.mutedWordsPref!.items);
} else if (preference.isHiddenPostsPref) {
hiddenPosts.addAll(
preference.hiddenPostsPref!.items.map((e) => e.toString()),
);
} else if (preference.isContentLabelPref) {
labelPrefs.add(preference.contentLabelPref!);
}
}
for (final labelPref in labelPrefs) {
final pref = _getModerationLabelPreference(labelPref.visibility.toJson());
if (labelPref.labelerDid != null && labelers.isNotEmpty) {
final labeler = labelers
.where((e) => e['did'] == labelPref.labelerDid)
.firstOrNull;
if (labeler != null && labeler.isNotEmpty) {
labeler['labels'][labelPref.label] = pref;
}
} else {
labels[_getModerationLabel(labelPref.label)] = pref;
}
}
return ModerationPrefs(
adultContentEnabled: adultContentEnabled,
labels: {
...kDefaultLabelSettings.map((k, v) => MapEntry(k.value, v)),
...labels,
},
labelers:
[
...appLabelers.map(
(e) => {'did': e, 'labels': <String, LabelPreference>{}},
),
...labelers,
]
.map(
(e) =>
ModerationPrefsLabeler(did: e['did'], labels: e['labels']),
)
.toList(),
mutedWords: mutedWords,
hiddenPosts: hiddenPosts,
);
}