getModerationPrefs method

ModerationPrefs getModerationPrefs({
  1. List<String> appLabelers = const [_kBskyLabelerDid],
})

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,
  );
}