status-im / status-mobile

a free (libre) open source, mobile OS for Ethereum
https://status.app
Mozilla Public License 2.0
3.86k stars 984 forks source link

Communities: Missing avatar and name in members of the Status community #20520

Closed ilmotta closed 3 days ago

ilmotta commented 3 weeks ago

Bug Report

Problem

The community channel members' list may contain contacts where no data exists except their public key. For example, in the Status community channel #general, there are around 55 such contacts out of ~220 in total.

Expected Behavior

We would like to display a better fallback when members (contacts) don't have any associated information, except their public key. We have verified that this is a technical limitation and that there's nothing we can do.

We can at least mimic what the desktop app does:

NOTE: Consider investigating why the desktop app doesn't suffer from the same problem as mobile. What are we doing differently?

Actual Behavior

As you can see below, contacts with only their public key available are shown with empty avatars (using the profile's customization color as fallback) and the name section is empty.

Reproduction

  1. Open Status community > Channel > View members.

Additional Information

Parveshdhull commented 3 weeks ago

hi @ilmotta, Thank you very much for creating this issue. https://github.com/status-im/status-mobile/issues/20431 is also caused by the same problem, missing contact data.

So I was wondering how can we fix this issue. We do have a buildContact API in status-go which returns contact with some data like name as short public key with ellipses and ring etc. We call this endpoint when we open the profile of any of the above users, and a contact is returned from status-go but it does not persist. So after restart only the public key is shown again. Is this bug and it supposed to persist? And what will be the drawback and performance effect of persisting so many contacts like for group/community members(because we are already storing some of them)?

Should we call build contact for every item/every time in this list? Or do we have some client-side function that will give us this data (ring, name), etc? btw, I am not sure how desktop fixes this. (maybe some client side function that returns name and ring)

@cammellos what do you suggest?

cammellos commented 3 weeks ago

@Parveshdhull Name if it's not there, it's not available. We would not be pulling this info from waku since it would be too expensive for each users. Ring should come from the media server and it's solely based on the public key, so that should be available regardless and I think we can fix this issue. We should also be able to convert the keys, status-go has some endpoints to do that, albeit they might be synchronous and could be hanging the JS thread

ilmotta commented 3 weeks ago

Thanks for picking this up @Parveshdhull. As mentioned in the issue's description, it would be good to find out from a desktop dev why the list of members in desktop doesn't have as many missing names as in mobile. Not a blocker for us to make progress here, but at least to know what they do differently and if we could do the same.

Parveshdhull commented 2 weeks ago

at least to know what they do differently

Hi @ilmotta, It seems desktop uses 3 random words name as fallback. (In 2.29.0)

image

ilmotta commented 2 weeks ago

It seems desktop uses 3 random words name as fallback. (In 2.29.0)

That makes sense @Parveshdhull 👍🏼

I verified again on the same desktop version I used before (2.29) and the member name I shared in the PR description no longer is shown as a compressed key. But there's a difference, the account I used a few days ago no longer worked and got locked out due to a crash after login, so I restored again the account, found the member again in the Status community, but this time it appears with the 3-word name fallback.

It seems that the fallback is the 3-word name, but there's still a chance that there's no information about the contact except their public key, so the very last fallback when the 3-word name doesn't exist is to simply use the compressed key. At least this is what we are seeing based on the screenshots below.

After starting from scratch and restoring, the same member appears as: