removeFromRoster method

Future<RosterRemovalResult> removeFromRoster(
  1. String jid
)

Attempts to remove jid from the roster. Returns true if the process was successful, false otherwise.

Implementation

Future<RosterRemovalResult> removeFromRoster(String jid) async {
  final attrs = getAttributes();
  final response = (await attrs.sendStanza(
    StanzaDetails(
      Stanza.iq(
        type: 'set',
        children: [
          XMLNode.xmlns(
            tag: 'query',
            xmlns: rosterXmlns,
            children: [
              XMLNode(
                tag: 'item',
                attributes: {
                  'jid': jid,
                  'subscription': 'remove',
                },
              ),
            ],
          ),
        ],
      ),
    ),
  ))!;

  if (response.attributes['type'] != 'result') {
    logger.severe('Failed to remove roster item: ${response.toXml()}');

    final error = response.firstTag('error')!;
    final notFound = error.firstTag('item-not-found') != null;

    if (notFound) {
      logger.warning('Item was not found');
      return RosterRemovalResult.itemNotFound;
    }

    return RosterRemovalResult.error;
  }

  return RosterRemovalResult.okay;
}