getSetByName method

Future<Nip51Set?> getSetByName({
  1. required String name,
  2. required int kind,
  3. bool forceRefresh = false,
})

Gets a NIP-51 set by name identifier (d tag).

Retrieves a specific set for the logged-in user or a custom signer. The set is identified by its name (d tag) and kind.

name name of the set (d tag identifier)
kind kind of the set, see Nip51List class for constants
customSigner optional signer, defaults to logged-in account
forceRefresh if true, skip cache and query relays directly

Returns the set if found, null otherwise.
Throws an exception if no account is logged in and no custom signer is provided.

Implementation

Future<Nip51Set?> getSetByName({
  required String name,
  required int kind,
  bool forceRefresh = false,
}) async {
  final EventSigner signer;

  if (_eventSigner == null) {
    throw Exception("getSetByName() no account");
  }
  signer = _eventSigner!;

  Nip51Set? relaySet = await _getCachedSetByName(name, signer, kind);
  if (relaySet == null || forceRefresh) {
    Nip51Set? newRelaySet;
    await for (final event in _requests.query(filters: [
      Filter(
        authors: [signer.getPublicKey()],
        kinds: [kind],
        tags: {
          "#d": [name]
        },
      )
    ], cacheRead: !forceRefresh).stream) {
      if (newRelaySet == null || newRelaySet.createdAt < event.createdAt) {
        if (event.getDtag() != null && event.getDtag() == name) {
          newRelaySet = await Nip51Set.fromEvent(event, signer);
          await _cacheManager.saveEvent(event);
        } else if (Helpers.isNotBlank(event.content)) {
          Nip51Set? decryptedRelaySet =
              await Nip51Set.fromEvent(event, signer);
          if (decryptedRelaySet != null && decryptedRelaySet.name == name) {
            newRelaySet = decryptedRelaySet;
            await _cacheManager.saveEvent(event);
          }
        }
      }
    }
    return newRelaySet;
  }
  return relaySet;
}