mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-05 06:16:05 +02:00
add allFavoriteOnlineFriends
This commit is contained in:
@@ -67,6 +67,38 @@ export const useFriendStore = defineStore('Friend', () => {
|
|||||||
|
|
||||||
const localFavoriteFriends = reactive(new Set());
|
const localFavoriteFriends = reactive(new Set());
|
||||||
|
|
||||||
|
const allFavoriteFriendIds = computed(() => {
|
||||||
|
const favoriteStore = useFavoriteStore();
|
||||||
|
const set = new Set();
|
||||||
|
for (const ref of favoriteStore.cachedFavorites.values()) {
|
||||||
|
if (ref.type === 'friend') {
|
||||||
|
set.add(ref.favoriteId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const groupName in favoriteStore.localFriendFavorites) {
|
||||||
|
const userIds = favoriteStore.localFriendFavorites[groupName];
|
||||||
|
if (userIds) {
|
||||||
|
for (const id of userIds) {
|
||||||
|
set.add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return set;
|
||||||
|
});
|
||||||
|
|
||||||
|
const allFavoriteOnlineFriends = computed(() => {
|
||||||
|
return Array.from(friends.values())
|
||||||
|
.filter(
|
||||||
|
(f) =>
|
||||||
|
f.state === 'online' && allFavoriteFriendIds.value.has(f.id)
|
||||||
|
)
|
||||||
|
.sort(
|
||||||
|
getFriendsSortFunction(
|
||||||
|
appearanceSettingsStore.sidebarSortMethods
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
const isRefreshFriendsLoading = ref(false);
|
const isRefreshFriendsLoading = ref(false);
|
||||||
const onlineFriendCount = ref(0);
|
const onlineFriendCount = ref(0);
|
||||||
|
|
||||||
@@ -1663,6 +1695,8 @@ export const useFriendStore = defineStore('Friend', () => {
|
|||||||
offlineFriends,
|
offlineFriends,
|
||||||
friendsInSameInstance,
|
friendsInSameInstance,
|
||||||
|
|
||||||
|
allFavoriteFriendIds,
|
||||||
|
allFavoriteOnlineFriends,
|
||||||
localFavoriteFriends,
|
localFavoriteFriends,
|
||||||
isRefreshFriendsLoading,
|
isRefreshFriendsLoading,
|
||||||
onlineFriendCount,
|
onlineFriendCount,
|
||||||
|
|||||||
@@ -186,8 +186,8 @@
|
|||||||
import BackToTop from '@/components/BackToTop.vue';
|
import BackToTop from '@/components/BackToTop.vue';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
|
|
||||||
import { useAppearanceSettingsStore, useFavoriteStore, useFriendStore, useUserStore } from '../../../stores';
|
|
||||||
import { Popover, PopoverContent, PopoverTrigger } from '../../../components/ui/popover';
|
import { Popover, PopoverContent, PopoverTrigger } from '../../../components/ui/popover';
|
||||||
|
import { useAppearanceSettingsStore, useFriendStore, useUserStore } from '../../../stores';
|
||||||
import { parseLocation, timeToText } from '../../../shared/utils';
|
import { parseLocation, timeToText } from '../../../shared/utils';
|
||||||
import { Slider } from '../../../components/ui/slider';
|
import { Slider } from '../../../components/ui/slider';
|
||||||
import { Switch } from '../../../components/ui/switch';
|
import { Switch } from '../../../components/ui/switch';
|
||||||
@@ -204,31 +204,10 @@
|
|||||||
|
|
||||||
const appearanceSettingsStore = useAppearanceSettingsStore();
|
const appearanceSettingsStore = useAppearanceSettingsStore();
|
||||||
const friendStore = useFriendStore();
|
const friendStore = useFriendStore();
|
||||||
const favoriteStore = useFavoriteStore();
|
const { friends, allFavoriteFriendIds } = storeToRefs(friendStore);
|
||||||
const { isDarkMode, dtHour12 } = storeToRefs(appearanceSettingsStore);
|
|
||||||
const { friends } = storeToRefs(friendStore);
|
|
||||||
const { cachedFavorites, localFriendFavorites } = storeToRefs(favoriteStore);
|
|
||||||
const { currentUser } = storeToRefs(useUserStore());
|
const { currentUser } = storeToRefs(useUserStore());
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
const { isDarkMode, dtHour12 } = storeToRefs(appearanceSettingsStore);
|
||||||
// All favorite friends (remote + local)
|
|
||||||
const allFavoriteFriends = computed(() => {
|
|
||||||
const set = new Set();
|
|
||||||
for (const ref of cachedFavorites.value.values()) {
|
|
||||||
if (ref.type === 'friend') {
|
|
||||||
set.add(ref.favoriteId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (const group in localFriendFavorites.value) {
|
|
||||||
const userIds = localFriendFavorites.value[group];
|
|
||||||
if (userIds) {
|
|
||||||
for (const id of userIds) {
|
|
||||||
set.add(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return set;
|
|
||||||
});
|
|
||||||
|
|
||||||
const instanceActivityRef = ref(null);
|
const instanceActivityRef = ref(null);
|
||||||
|
|
||||||
@@ -394,7 +373,7 @@
|
|||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
try {
|
try {
|
||||||
getAllDateOfActivity();
|
getAllDateOfActivity();
|
||||||
await getActivityData(selectedDate, currentUser, friends, allFavoriteFriends, () =>
|
await getActivityData(selectedDate, currentUser, friends, allFavoriteFriendIds, () =>
|
||||||
handleIntersectionObserver(activityDetailChartRef)
|
handleIntersectionObserver(activityDetailChartRef)
|
||||||
);
|
);
|
||||||
await getWorldNameData();
|
await getWorldNameData();
|
||||||
@@ -419,7 +398,7 @@
|
|||||||
reloadData = async function () {
|
reloadData = async function () {
|
||||||
isLoading.value = true;
|
isLoading.value = true;
|
||||||
try {
|
try {
|
||||||
await getActivityData(selectedDate, currentUser, friends, allFavoriteFriends, () =>
|
await getActivityData(selectedDate, currentUser, friends, allFavoriteFriendIds, () =>
|
||||||
handleIntersectionObserver(activityDetailChartRef)
|
handleIntersectionObserver(activityDetailChartRef)
|
||||||
);
|
);
|
||||||
await getWorldNameData();
|
await getWorldNameData();
|
||||||
|
|||||||
@@ -142,7 +142,7 @@
|
|||||||
|
|
||||||
const emit = defineEmits(['lookup-user']);
|
const emit = defineEmits(['lookup-user']);
|
||||||
|
|
||||||
const { friends } = storeToRefs(useFriendStore());
|
const { friends, allFavoriteFriendIds } = storeToRefs(useFriendStore());
|
||||||
const modalStore = useModalStore();
|
const modalStore = useModalStore();
|
||||||
const { getAllUserStats, getAllUserMutualCount, confirmDeleteFriend, handleFriendDelete } = useFriendStore();
|
const { getAllUserStats, getAllUserMutualCount, confirmDeleteFriend, handleFriendDelete } = useFriendStore();
|
||||||
const { randomUserColours } = storeToRefs(useAppearanceSettingsStore());
|
const { randomUserColours } = storeToRefs(useAppearanceSettingsStore());
|
||||||
@@ -286,7 +286,7 @@
|
|||||||
}
|
}
|
||||||
for (const ctx of friends.value.values()) {
|
for (const ctx of friends.value.values()) {
|
||||||
if (!ctx.ref) continue;
|
if (!ctx.ref) continue;
|
||||||
if (friendsListSearchFilterVIP.value && !ctx.isVIP) continue;
|
if (friendsListSearchFilterVIP.value && !allFavoriteFriendIds.value.has(ctx.id)) continue;
|
||||||
if (query) {
|
if (query) {
|
||||||
let match = false;
|
let match = false;
|
||||||
if (!match && filters.includes('Display Name') && ctx.ref.displayName) {
|
if (!match && filters.includes('Display Name') && ctx.ref.displayName) {
|
||||||
|
|||||||
@@ -146,8 +146,14 @@
|
|||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
const friendStore = useFriendStore();
|
const friendStore = useFriendStore();
|
||||||
const { onlineFriends, vipFriends, activeFriends, offlineFriends, friendsInSameInstance } =
|
const {
|
||||||
storeToRefs(friendStore);
|
onlineFriends,
|
||||||
|
allFavoriteOnlineFriends,
|
||||||
|
allFavoriteFriendIds,
|
||||||
|
activeFriends,
|
||||||
|
offlineFriends,
|
||||||
|
friendsInSameInstance
|
||||||
|
} = storeToRefs(friendStore);
|
||||||
|
|
||||||
const SEGMENTED_BASE_OPTIONS = [
|
const SEGMENTED_BASE_OPTIONS = [
|
||||||
{ label: t('view.friends_locations.online'), value: 'online' },
|
{ label: t('view.friends_locations.online'), value: 'online' },
|
||||||
@@ -322,7 +328,7 @@
|
|||||||
const filteredFriends = computed(() => {
|
const filteredFriends = computed(() => {
|
||||||
if (normalizedSearchTerm.value) {
|
if (normalizedSearchTerm.value) {
|
||||||
const pools = [
|
const pools = [
|
||||||
...toEntries(vipFriends.value),
|
...toEntries(allFavoriteOnlineFriends.value),
|
||||||
...toEntries(onlineFriends.value),
|
...toEntries(onlineFriends.value),
|
||||||
...toEntries(activeFriends.value),
|
...toEntries(activeFriends.value),
|
||||||
...toEntries(offlineFriends.value)
|
...toEntries(offlineFriends.value)
|
||||||
@@ -349,7 +355,9 @@
|
|||||||
.filter((id) => typeof id === 'string' || typeof id === 'number')
|
.filter((id) => typeof id === 'string' || typeof id === 'number')
|
||||||
);
|
);
|
||||||
|
|
||||||
const remainingOnline = toEntries(onlineFriends.value)
|
const remainingOnline = toEntries(
|
||||||
|
onlineFriends.value.filter((f) => !allFavoriteFriendIds.value.has(f.id))
|
||||||
|
)
|
||||||
.filter((entry) => {
|
.filter((entry) => {
|
||||||
if (!entry?.id) {
|
if (!entry?.id) {
|
||||||
return true;
|
return true;
|
||||||
@@ -364,10 +372,10 @@
|
|||||||
return [...sameEntries, ...remainingOnline];
|
return [...sameEntries, ...remainingOnline];
|
||||||
}
|
}
|
||||||
|
|
||||||
return toEntries(onlineFriends.value);
|
return toEntries(onlineFriends.value.filter((f) => !allFavoriteFriendIds.value.has(f.id)));
|
||||||
}
|
}
|
||||||
case 'favorite':
|
case 'favorite':
|
||||||
return toEntries(vipFriends.value);
|
return toEntries(allFavoriteOnlineFriends.value);
|
||||||
case 'same-instance':
|
case 'same-instance':
|
||||||
return sameInstanceEntries.value;
|
return sameInstanceEntries.value;
|
||||||
case 'active':
|
case 'active':
|
||||||
|
|||||||
@@ -108,8 +108,14 @@
|
|||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
const friendStore = useFriendStore();
|
const friendStore = useFriendStore();
|
||||||
const { vipFriends, onlineFriends, activeFriends, offlineFriends, friendsInSameInstance } =
|
const {
|
||||||
storeToRefs(friendStore);
|
allFavoriteOnlineFriends,
|
||||||
|
allFavoriteFriendIds,
|
||||||
|
onlineFriends,
|
||||||
|
activeFriends,
|
||||||
|
offlineFriends,
|
||||||
|
friendsInSameInstance
|
||||||
|
} = storeToRefs(friendStore);
|
||||||
const {
|
const {
|
||||||
isSidebarGroupByInstance,
|
isSidebarGroupByInstance,
|
||||||
isHideFriendsInSameInstance,
|
isHideFriendsInSameInstance,
|
||||||
@@ -157,13 +163,15 @@
|
|||||||
return list.filter((item) => !sameInstanceFriendId.value.has(item.id));
|
return list.filter((item) => !sameInstanceFriendId.value.has(item.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
const onlineFriendsByGroupStatus = computed(() => excludeSameInstance(onlineFriends.value));
|
const onlineFriendsByGroupStatus = computed(() =>
|
||||||
|
excludeSameInstance(onlineFriends.value.filter((f) => !allFavoriteFriendIds.value.has(f.id)))
|
||||||
|
);
|
||||||
|
|
||||||
const vipFriendsByGroupStatus = computed(() => {
|
const vipFriendsByGroupStatus = computed(() => {
|
||||||
const selectedGroups = sidebarFavoriteGroups.value;
|
const selectedGroups = sidebarFavoriteGroups.value;
|
||||||
const hasFilter = selectedGroups.length > 0;
|
const hasFilter = selectedGroups.length > 0;
|
||||||
if (!hasFilter) {
|
if (!hasFilter) {
|
||||||
return excludeSameInstance(vipFriends.value);
|
return excludeSameInstance(allFavoriteOnlineFriends.value);
|
||||||
}
|
}
|
||||||
// Filter to only include VIP friends whose group key is in selectedGroups
|
// Filter to only include VIP friends whose group key is in selectedGroups
|
||||||
const allowedIds = new Set();
|
const allowedIds = new Set();
|
||||||
@@ -179,7 +187,7 @@
|
|||||||
for (const f of remoteFriendsByGroup[key]) allowedIds.add(f.id);
|
for (const f of remoteFriendsByGroup[key]) allowedIds.add(f.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return excludeSameInstance(vipFriends.value.filter((f) => allowedIds.has(f.id)));
|
return excludeSameInstance(allFavoriteOnlineFriends.value.filter((f) => allowedIds.has(f.id)));
|
||||||
});
|
});
|
||||||
|
|
||||||
// VIP friends divide by group
|
// VIP friends divide by group
|
||||||
@@ -212,7 +220,9 @@
|
|||||||
// Filter vipFriends per group, preserving vipFriends sort order
|
// Filter vipFriends per group, preserving vipFriends sort order
|
||||||
const result = [];
|
const result = [];
|
||||||
for (const { key, groupName, memberIds } of groups) {
|
for (const { key, groupName, memberIds } of groups) {
|
||||||
const filteredFriends = excludeSameInstance(vipFriends.value.filter((friend) => memberIds.has(friend.id)));
|
const filteredFriends = excludeSameInstance(
|
||||||
|
allFavoriteOnlineFriends.value.filter((friend) => memberIds.has(friend.id))
|
||||||
|
);
|
||||||
if (filteredFriends.length > 0) {
|
if (filteredFriends.length > 0) {
|
||||||
result.push(filteredFriends.map((item) => ({ groupName, key, ...item })));
|
result.push(filteredFriends.map((item) => ({ groupName, key, ...item })));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user