diff --git a/src/services/database/gameLog.js b/src/services/database/gameLog.js index c03dc88e..b5420333 100644 --- a/src/services/database/gameLog.js +++ b/src/services/database/gameLog.js @@ -473,6 +473,9 @@ const gameLog = { }, async getAllUserStats(userIds, displayNames) { + if (!userIds.length && !displayNames.length) { + return []; + } var data = []; // this makes me most sad var userIdsString = ''; @@ -485,6 +488,13 @@ const gameLog = { displayNamesString += `'${displayName.replaceAll("'", "''")}', `; } displayNamesString = displayNamesString.slice(0, -2); + var whereClauses = []; + if (userIdsString) { + whereClauses.push(`g.user_id IN (${userIdsString})`); + } + if (displayNamesString) { + whereClauses.push(`g.display_name IN (${displayNamesString})`); + } await sqliteService.execute( (dbRow) => { @@ -507,8 +517,7 @@ const gameLog = { FROM gamelog_join_leave g WHERE - g.user_id IN (${userIdsString}) - OR g.display_name IN (${displayNamesString}) + ${whereClauses.join('\n OR ')} GROUP BY g.user_id, g.display_name diff --git a/src/stores/friend.js b/src/stores/friend.js index a6056451..006c6097 100644 --- a/src/stores/friend.js +++ b/src/stores/friend.js @@ -59,6 +59,8 @@ export const useFriendStore = defineStore('Friend', () => { const sortedFriends = shallowRef([]); let sortedFriendsBatchDepth = 0; let pendingSortedFriendsRebuild = false; + let allUserStatsRequestId = 0; + let allUserMutualCountRequestId = 0; const derivedDebugCounters = reactive({ allFavoriteFriendIds: 0, @@ -820,8 +822,16 @@ export const useFriendStore = defineStore('Friend', () => { displayNames.push(ctx.ref.displayName); } } + if (!userIds.length) { + return; + } + + const requestId = ++allUserStatsRequestId; const data = await database.getAllUserStats(userIds, displayNames); + if (requestId !== allUserStatsRequestId) { + return; + } const dataByDisplayName = new Map(); const friendsByDisplayName = new Map(); @@ -885,7 +895,14 @@ export const useFriendStore = defineStore('Friend', () => { * */ async function getAllUserMutualCount() { + if (!friends.size) { + return; + } + const requestId = ++allUserMutualCountRequestId; const mutualCountMap = await database.getMutualCountForAllUsers(); + if (requestId !== allUserMutualCountRequestId) { + return; + } runInSortedFriendsBatch(() => { for (const [userId, mutualCount] of mutualCountMap.entries()) { const ref = friends.get(userId); diff --git a/src/views/FriendList/FriendList.vue b/src/views/FriendList/FriendList.vue index b44765f7..4aeee6ee 100644 --- a/src/views/FriendList/FriendList.vue +++ b/src/views/FriendList/FriendList.vue @@ -61,6 +61,7 @@ :placeholder="t('view.friend_list.search_placeholder')" clearable class="w-[250px]" + @input="scheduleFriendsListSearchChange" @change="friendsListSearchChange" />