broadcastUpdateNip65RelayMarker method

Future<UserRelayList?> broadcastUpdateNip65RelayMarker(
  1. String relayUrl,
  2. ReadWriteMarker marker,
  3. Iterable<String> broadcastRelays,
  4. EventSigner signer,
)

Implementation

Future<UserRelayList?> broadcastUpdateNip65RelayMarker(String relayUrl,
    ReadWriteMarker marker,
    Iterable<String> broadcastRelays, EventSigner signer) async {
  UserRelayList? userRelayList = await ensureUpToDateUserRelayList(signer);
  if (userRelayList == null) {
    int now = DateTime
        .now()
        .millisecondsSinceEpoch ~/ 1000;
    userRelayList = UserRelayList(
        pubKey: signer.getPublicKey(),
        relays: {
          for (String url in broadcastRelays) url: ReadWriteMarker.readWrite
        },
        createdAt: now,
        refreshedTimestamp: now);
  }
  String? url;
  if (userRelayList.relays.keys.contains(relayUrl)) {
    url = relayUrl;
  } else {
    String? cleanUrl = Relay.clean(relayUrl);
    if (cleanUrl != null && userRelayList.relays.keys.contains(cleanUrl)) {
      url = cleanUrl;
    } else if (userRelayList.relays.keys.contains("$relayUrl/")) {
      url = "$relayUrl/";
    }
  }
  if (url != null) {
    userRelayList.relays[url] = marker;
    userRelayList.refreshedTimestamp = Helpers.now;
    await broadcastEvent(
        userRelayList.toNip65().toEvent(), broadcastRelays, signer);
    await cacheManager.saveUserRelayList(userRelayList);
  }
  return userRelayList;
}