stash
This commit is contained in:
parent
2f8683add1
commit
cfcc2c15d3
15 changed files with 644 additions and 77 deletions
|
|
@ -71,6 +71,7 @@ export default createStore({
|
|||
keypair: null,
|
||||
remember: false,
|
||||
friends: [],
|
||||
friendProfiles: {},
|
||||
item_map: {},
|
||||
home_servers: null,
|
||||
all_friends_servers: null,
|
||||
|
|
@ -97,6 +98,12 @@ export default createStore({
|
|||
setFriends(state, friends) {
|
||||
state.friends = friends;
|
||||
},
|
||||
setFriendProfile(state, {username, profile}) {
|
||||
state.friendProfiles = {...state.friendProfiles, [username]: profile};
|
||||
},
|
||||
setFriendProfiles(state, profiles) {
|
||||
state.friendProfiles = profiles;
|
||||
},
|
||||
setHomeServers(state, home_servers) {
|
||||
state.home_servers = home_servers;
|
||||
},
|
||||
|
|
@ -326,11 +333,21 @@ export default createStore({
|
|||
const home = await dispatch('getHomeServers')
|
||||
servers.add(home)
|
||||
for (const friend of friends) {
|
||||
const s = await dispatch('lookupServer', {username: friend.username})
|
||||
servers.add(new ServerSet(s, state.unreachable_neighbors))
|
||||
try {
|
||||
const s = await dispatch('lookupServer', {username: friend.username})
|
||||
servers.add(new ServerSet(s, state.unreachable_neighbors))
|
||||
} catch (e) {
|
||||
// Don't let a single unresolvable/unreachable friend abort the whole
|
||||
// search/federation lookup - just skip them and continue.
|
||||
console.error('could not resolve server for friend', friend.username, e)
|
||||
}
|
||||
}
|
||||
return servers
|
||||
})()
|
||||
})().catch(e => {
|
||||
// Don't cache a permanently-rejected promise - allow a retry next time.
|
||||
state.all_friends_servers = null
|
||||
throw e
|
||||
})
|
||||
commit('setAllFriendsServers', promise)
|
||||
return promise
|
||||
},
|
||||
|
|
@ -376,6 +393,20 @@ export default createStore({
|
|||
commit('setFriends', data)
|
||||
return data
|
||||
},
|
||||
async fetchFriendProfile({commit, dispatch, getters}, {username}) {
|
||||
try {
|
||||
const servers = await dispatch('getFriendServers', {username});
|
||||
// username here is already a full handle (username@domain), see FriendSerializer
|
||||
const profile = await servers.get(getters.signAuth, '/auth/user/' + username + '/');
|
||||
if (profile) {
|
||||
commit('setFriendProfile', {username, profile});
|
||||
}
|
||||
return profile;
|
||||
} catch (error) {
|
||||
console.error(`Failed to fetch profile for ${username}:`, error);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
async fetchFriendRequests({state, dispatch, getters}) {
|
||||
const servers = await dispatch('getHomeServers')
|
||||
return await servers.get(getters.signAuth, '/api/friendrequests/')
|
||||
|
|
@ -612,6 +643,14 @@ export default createStore({
|
|||
|
||||
return state.user !== null && (state.token !== null || state.keypair !== null)
|
||||
},
|
||||
allUserProfiles(state) {
|
||||
// Combine user's own profile with all friend profiles
|
||||
const combined = {...state.friendProfiles};
|
||||
if (state.user && state.user_profile) {
|
||||
combined[state.user] = state.user_profile;
|
||||
}
|
||||
return combined;
|
||||
},
|
||||
signAuth(state) {
|
||||
return createSignAuth(state.user, state.keypair.signSk)
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue