diff --git a/src/actions/friendsActions.js b/src/actions/friendsActions.js index 5df770d..dab5f3d 100644 --- a/src/actions/friendsActions.js +++ b/src/actions/friendsActions.js @@ -3,7 +3,6 @@ import { selectFolderForAssetType } from '../bundles/inventory' import { displayNamesStartLoading, displayNamesLoaded, - selectNames, selectIdOfNamesToLoad, selectDisplayNamesURL, selectOwnAvatarName, @@ -95,11 +94,15 @@ export function getAllFriendsDisplayNames () { return (dispatch, getState) => { const state = getState() - const names = selectNames(state) const friendsIds = selectFriends(state) .map(friend => friend.id) .concat([selectAgentId(state)]) // Add self - .filter(id => !(id in names) || !names[id].willHaveDisplayName()) // unknown only + .filter(id => { // unknown only + const name = selectAvatarNameById(state, id) + return !name || + !name.didLoadDisplayName || + !name.isLoadingDisplayName + }) dispatch(loadDisplayNames(friendsIds)) } diff --git a/src/bundles/names.test.ts b/src/bundles/names.test.ts index b2af7f6..4ca8bfb 100644 --- a/src/bundles/names.test.ts +++ b/src/bundles/names.test.ts @@ -309,6 +309,53 @@ describe('actions', () => { expect(selectAvatarDisplayName(store.getState(), 'e856f8e7-f774-4040-8392-df4185fa37e4')) .toBe('Andromeda') }) + + it('should handle displayNames that are wrongly marked as default', async () => { + const { store, setMark, getDiff } = await createTestStore() + + store.dispatch(addMissing({ + id: 'e856f8e7-f774-4040-8392-df4185fa37e4', + fallback: 'Andromeda' + })) + store.dispatch(displayNamesStartLoading([ + 'e856f8e7-f774-4040-8392-df4185fa37e4' + ])) + + setMark('A') + + store.dispatch(displayNamesLoaded( + [ + { + id: 'e856f8e7-f774-4040-8392-df4185fa37e4', + username: 'andromeda.resident', + display_name: 'Andro', + display_name_next_update: 0, + legacy_first_name: 'andromeda', + legacy_last_name: 'resident', + is_display_name_default: true + } + ], + [], + [] + )) + + expect(getDiff('A')).toEqual({ + names: { + names: { + entities: { + 'e856f8e7-f774-4040-8392-df4185fa37e4': { + displayName: 'Andro', + didLoadDisplayName: true, + isLoadingDisplayName: false + } + } + } + } + }) + + expect(selectAvatarDisplayName(store.getState(), 'e856f8e7-f774-4040-8392-df4185fa37e4')) + .toBe('Andro (Andromeda)') + }) }) }) diff --git a/src/bundles/names.ts b/src/bundles/names.ts index 42fb117..d2c6777 100644 --- a/src/bundles/names.ts +++ b/src/bundles/names.ts @@ -123,15 +123,23 @@ const nameSlice = createSlice({ } for (const agent of action.payload.agents) { + const firstName = cleanName(agent.legacy_first_name) + const lastName = cleanName(agent.legacy_last_name) changes.push({ id: agent.id, changes: { displayName: agent.display_name, - firstName: cleanName(agent.legacy_first_name), - lastName: cleanName(agent.legacy_last_name), + firstName, + lastName, isLoadingDisplayName: false, didLoadDisplayName: true, - isDisplayNameDefault: agent.is_display_name_default + isDisplayNameDefault: agent.is_display_name_default && ( + agent.display_name.toLowerCase() === `${firstName} ${lastName}`.toLowerCase() || + ( + agent.display_name.toLowerCase() === firstName.toLowerCase() && + lastName === 'Resident' + ) + ) } }) }