feat(core): Re-fix the subscription functions
This commit is contained in:
parent
963f3f2cd9
commit
09fd5845aa
@ -161,13 +161,39 @@ class PresenceManager extends XmppManagerBase {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sends a subscription request to [to].
|
/// Similar to [requestSubscription], but it also tells the server to automatically
|
||||||
// TODO(PapaTutuWawa): Check if we're allowed to pre-approve
|
/// accept a subscription request from [to], should it arrive.
|
||||||
Future<void> requestSubscription(JID to, {bool preApprove = false}) async {
|
/// This requires a [PresenceNegotiator] to be registered as this feature is optional.
|
||||||
|
///
|
||||||
|
/// Returns true, when the stanza was sent. Returns false, when the stanza was not sent,
|
||||||
|
/// for example because the server does not support subscription pre-approvals.
|
||||||
|
Future<bool> preApproveSubscription(JID to) async {
|
||||||
|
final negotiator = getAttributes()
|
||||||
|
.getNegotiatorById<PresenceNegotiator>(presenceNegotiator);
|
||||||
|
assert(negotiator != null, 'No PresenceNegotiator registered');
|
||||||
|
|
||||||
|
if (!negotiator!.preApprovalSupported) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
await getAttributes().sendStanza(
|
await getAttributes().sendStanza(
|
||||||
StanzaDetails(
|
StanzaDetails(
|
||||||
Stanza.presence(
|
Stanza.presence(
|
||||||
type: preApprove ? 'subscribed' : 'subscribe',
|
type: 'subscribed',
|
||||||
|
to: to.toString(),
|
||||||
|
),
|
||||||
|
awaitable: false,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sends a subscription request to [to].
|
||||||
|
Future<void> requestSubscription(JID to) async {
|
||||||
|
await getAttributes().sendStanza(
|
||||||
|
StanzaDetails(
|
||||||
|
Stanza.presence(
|
||||||
|
type: 'subscribe',
|
||||||
to: to.toString(),
|
to: to.toString(),
|
||||||
),
|
),
|
||||||
awaitable: false,
|
awaitable: false,
|
||||||
@ -177,7 +203,15 @@ class PresenceManager extends XmppManagerBase {
|
|||||||
|
|
||||||
/// Accept a subscription request from [to].
|
/// Accept a subscription request from [to].
|
||||||
Future<void> acceptSubscriptionRequest(JID to) async {
|
Future<void> acceptSubscriptionRequest(JID to) async {
|
||||||
await requestSubscription(to, preApprove: true);
|
await getAttributes().sendStanza(
|
||||||
|
StanzaDetails(
|
||||||
|
Stanza.presence(
|
||||||
|
type: 'subscribed',
|
||||||
|
to: to.toString(),
|
||||||
|
),
|
||||||
|
awaitable: false,
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Send a subscription request rejection to [to].
|
/// Send a subscription request rejection to [to].
|
||||||
|
Loading…
Reference in New Issue
Block a user