broadcastRemoveNip51SetRelay method

Future<Nip51Set?> broadcastRemoveNip51SetRelay(
  1. String relayUrl,
  2. String name,
  3. Iterable<String> broadcastRelays,
  4. EventSigner signer, {
  5. List<String>? defaultRelaysIfEmpty,
  6. bool private = false,
})

Implementation

Future<Nip51Set?> broadcastRemoveNip51SetRelay(String relayUrl,
    String name,
    Iterable<String> broadcastRelays,
    EventSigner signer,
    {List<String>? defaultRelaysIfEmpty, bool private=false}) async {
  if (private && !signer.canSign()) {
    throw Exception("cannot broadcast private nip51 list without a signer that can sign");
  }
  Nip51Set? relaySet = await getSingleNip51RelaySet(name, signer, forceRefresh: true, );
  if ((relaySet==null || relaySet.allRelays.isEmpty) && defaultRelaysIfEmpty!=null && defaultRelaysIfEmpty.isNotEmpty) {
    relaySet = Nip51Set(
        name: name,
        pubKey: signer.getPublicKey(),
        createdAt: Helpers.now, elements: []);
    relaySet.privateRelays = defaultRelaysIfEmpty;
  }
  if (relaySet!=null) {
    relaySet.removeRelay(relayUrl);
    relaySet.createdAt = Helpers.now;
    Nip01Event event = await relaySet.toEvent(signer);
    await Future.wait([
      broadcastEvent(
          event, broadcastRelays, signer),
    ]);
    List<Nip01Event>? events = cacheManager.loadEvents(pubKeys: [signer.getPublicKey()], kinds: [Nip51List.RELAY_SET]);
    events = events.where((event) {
      if (event.getDtag()!=null && event.getDtag() == name) {
        return true;
      }
      return false;
    }).toList();
    for (var event in events) { cacheManager.removeEvent(event.id); }
    await cacheManager.saveEvent(event);
  }
  return relaySet;
}