From e65c93a07c119f0cef910fedd8c14fda28f5f6ac Mon Sep 17 00:00:00 2001 From: Natsumi Date: Sat, 19 Jul 2025 12:48:17 +1200 Subject: [PATCH] Restore friend order from API --- src/stores/friend.js | 58 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/stores/friend.js b/src/stores/friend.js index bca8bd89..c7f3478a 100644 --- a/src/stores/friend.js +++ b/src/stores/friend.js @@ -1420,6 +1420,63 @@ export const useFriendStore = defineStore('Friend', () => { state.friendLogTable.data = await database.getFriendLogHistory(); } + /** + * @returns void + * @param {number} friendNumber + * @param {string} userId + */ + function setFriendNumber(friendNumber, userId) { + const ref = state.friendLog.get(userId); + if (!ref) { + return; + } + ref.friendNumber = friendNumber; + state.friendLog.set(ref.userId, ref); + database.setFriendLogCurrent(ref); + const friendRef = state.friends.get(userId); + if (friendRef?.ref) { + friendRef.ref.$friendNumber = friendNumber; + } + } + + async function tryApplyFriendOrder() { + const lastUpdate = await configRepository.getString( + `VRCX_lastStoreTime_${userStore.currentUser.id}` + ); + if (lastUpdate === '-5') { + // this means we're done + return; + } + + // reset friendNumber and friendLog + state.friendNumber = 0; + for (const ref of state.friendLog.values()) { + ref.friendNumber = 0; + } + + const friendOrder = userStore.currentUser.friends; + for (let i = 0; i < friendOrder.length; i++) { + const userId = friendOrder[i]; + state.friendNumber++; + setFriendNumber(state.friendNumber, userId); + } + if (state.friendNumber === 0) { + state.friendNumber = state.friends.size; + } + console.log('Applied friend order from API', state.friendNumber); + await configRepository.setInt( + `VRCX_friendNumber_${userStore.currentUser.id}`, + state.friendNumber + ); + await configRepository.setString( + `VRCX_lastStoreTime_${userStore.currentUser.id}`, + '-5' + ); + } + + /** + * @deprecated We might need this again one day + */ async function tryRestoreFriendNumber() { const lastUpdate = await configRepository.getString( `VRCX_lastStoreTime_${userStore.currentUser.id}` @@ -1716,6 +1773,7 @@ export const useFriendStore = defineStore('Friend', () => { } } + tryApplyFriendOrder(); // once again getAllUserStats(); // joinCount, lastSeen, timeSpent state.sortVIPFriends = true; state.sortOnlineFriends = true;