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 _parseSetEvent(event, signer);
          await _cacheManager.saveEvent(event);
        } else if (Helpers.isNotBlank(event.content)) {
          Nip51Set? decryptedRelaySet = await _parseSetEvent(event, signer);
          if (decryptedRelaySet != null && decryptedRelaySet.name == name) {
            newRelaySet = decryptedRelaySet;
            await _cacheManager.saveEvent(event);
          }
        }
      }
    }
    return newRelaySet;
  }
  return relaySet;
}