ConnectyCube / connectycube-reactnative-samples

Chat and Video Chat code samples for React Native, ConnectyCube
https://connectycube.com
Apache License 2.0
124 stars 111 forks source link

cubeContactList confirm Promise not resolving when mutual subscriptionMode is true (default) #217

Closed eastcoastcoder closed 1 year ago

eastcoastcoder commented 3 years ago

Hello, I've been having an issue with getting the promise to resolve when confirming a contact. I think the issue here is just that the resolve callback function isn't being passed along properly to the add method. This works fine when I use the non-mutual mode.

image

image

eastcoastcoder commented 3 years ago

I think there are more issues here but I'm not sure how exactly this is supposed to flow. In mutual mode this is what I'm seeing. The problems start happening if I attempt to "retract" a request that has been sent or reject a request that has been received. The request is still visible on the opposing side but now looks like they initiated the request.

The goal is to do a Facebook style approach of receiving and sending requests where if either side rejects or removes the other, they are gone from both contact lists.

A: Sends a request to B A's contact record for B is: subscription = 'none', ask = 'subscribe'

B: Receives a request from A A's contact record for B is: subscription = 'none', ask = null

B: Accepts A's request A's contact record for B is: subscription = 'both', ask = null B's contact record for A is: subscription = 'both', ask = null

Everything up to this point is good

So again with retracting A: Sends a request to B A cancels request ConnectyCube.chat.contactList.remove(userId) A's contact record for B is: Removed B's contact record for A is: subscription = 'none', ask = null

So now although the request was cancelled from A it still looks like a request is there on B's side.

So again with accepting: A's contact record for B is: subscription = 'both', ask = null B's contact record for A is: subscription = 'both', ask = null

Then removing: A removes contact ConnectyCube.chat.contactList.remove(userId) A's contact record for B is: Removed B's contact record for A is: subscription = 'none', ask = null

When it's in this state, it effectively makes it appear that the opposite party (that was removed) is now receiving a request from the person who removed them.

This might be a bit hard to follow but I think the remove logic should be doing something different when in mutual mode. There is some disconnect here that I may be missing.

Edit: I've found an article detailing roster and subscriptions but it's still a little inconsistent with what I am expecting.

https://www.blikoontech.com/tutorials/xmpp-made-simple-roster-and-presence-explained

DaveLomber commented 1 year ago

For there contacts list implementation We highly suggest to switch to Address Book https://developers.connectycube.com/reactnative/address-book plus Last Activity https://developers.connectycube.com/reactnative/messaging?id=get-last-activity

ConnectyCube.chat.contactList is not used widely and will be deprecated in future releases