feat: add option to prioritize same instance friends in sidebar (#1238)

This commit is contained in:
pa
2026-03-16 13:46:17 +09:00
parent 2a5039b6c9
commit eeb50f15b5
4 changed files with 60 additions and 17 deletions
+1
View File
@@ -178,6 +178,7 @@
"group_by_instance": "Group by Instance", "group_by_instance": "Group by Instance",
"split_favorite_friends": "Show Favorite Groups", "split_favorite_friends": "Show Favorite Groups",
"hide_friends_in_same_instance": "Hide Grouped Friends", "hide_friends_in_same_instance": "Hide Grouped Friends",
"same_instance_above_favorites": "Prioritize Same Instance",
"sort_primary": "Sort by", "sort_primary": "Sort by",
"sort_secondary": "Then by", "sort_secondary": "Then by",
"sort_tertiary": "Then by", "sort_tertiary": "Then by",
+21
View File
@@ -81,6 +81,7 @@ export const useAppearanceSettingsStore = defineStore(
const navWidth = ref(240); const navWidth = ref(240);
const isSidebarGroupByInstance = ref(true); const isSidebarGroupByInstance = ref(true);
const isHideFriendsInSameInstance = ref(false); const isHideFriendsInSameInstance = ref(false);
const isSameInstanceAboveFavorites = ref(false);
const isSidebarDivideByFriendGroup = ref(false); const isSidebarDivideByFriendGroup = ref(false);
const sidebarFavoriteGroups = ref([]); const sidebarFavoriteGroups = ref([]);
const sidebarFavoriteGroupOrder = ref([]); const sidebarFavoriteGroupOrder = ref([]);
@@ -158,6 +159,7 @@ export const useAppearanceSettingsStore = defineStore(
navWidthConfig, navWidthConfig,
isSidebarGroupByInstanceConfig, isSidebarGroupByInstanceConfig,
isHideFriendsInSameInstanceConfig, isHideFriendsInSameInstanceConfig,
isSameInstanceAboveFavoritesConfig,
isSidebarDivideByFriendGroupConfig, isSidebarDivideByFriendGroupConfig,
sidebarFavoriteGroupsConfig, sidebarFavoriteGroupsConfig,
sidebarFavoriteGroupOrderConfig, sidebarFavoriteGroupOrderConfig,
@@ -214,6 +216,10 @@ export const useAppearanceSettingsStore = defineStore(
'VRCX_hideFriendsInSameInstance', 'VRCX_hideFriendsInSameInstance',
false false
), ),
configRepository.getBool(
'VRCX_sameInstanceAboveFavorites',
false
),
configRepository.getBool( configRepository.getBool(
'VRCX_sidebarDivideByFriendGroup', 'VRCX_sidebarDivideByFriendGroup',
true true
@@ -326,6 +332,8 @@ export const useAppearanceSettingsStore = defineStore(
isSidebarGroupByInstance.value = isSidebarGroupByInstanceConfig; isSidebarGroupByInstance.value = isSidebarGroupByInstanceConfig;
isHideFriendsInSameInstance.value = isHideFriendsInSameInstance.value =
isHideFriendsInSameInstanceConfig; isHideFriendsInSameInstanceConfig;
isSameInstanceAboveFavorites.value =
isSameInstanceAboveFavoritesConfig;
isSidebarDivideByFriendGroup.value = isSidebarDivideByFriendGroup.value =
isSidebarDivideByFriendGroupConfig; isSidebarDivideByFriendGroupConfig;
sidebarFavoriteGroups.value = JSON.parse( sidebarFavoriteGroups.value = JSON.parse(
@@ -792,6 +800,17 @@ export const useAppearanceSettingsStore = defineStore(
isHideFriendsInSameInstance.value isHideFriendsInSameInstance.value
); );
} }
/**
*
*/
function setIsSameInstanceAboveFavorites() {
isSameInstanceAboveFavorites.value =
!isSameInstanceAboveFavorites.value;
configRepository.setBool(
'VRCX_sameInstanceAboveFavorites',
isSameInstanceAboveFavorites.value
);
}
/** /**
* *
*/ */
@@ -1134,6 +1153,7 @@ export const useAppearanceSettingsStore = defineStore(
navWidth, navWidth,
isSidebarGroupByInstance, isSidebarGroupByInstance,
isHideFriendsInSameInstance, isHideFriendsInSameInstance,
isSameInstanceAboveFavorites,
isSidebarDivideByFriendGroup, isSidebarDivideByFriendGroup,
sidebarFavoriteGroups, sidebarFavoriteGroups,
sidebarFavoriteGroupOrder, sidebarFavoriteGroupOrder,
@@ -1173,6 +1193,7 @@ export const useAppearanceSettingsStore = defineStore(
setNavWidth, setNavWidth,
setIsSidebarGroupByInstance, setIsSidebarGroupByInstance,
setIsHideFriendsInSameInstance, setIsHideFriendsInSameInstance,
setIsSameInstanceAboveFavorites,
setIsSidebarDivideByFriendGroup, setIsSidebarDivideByFriendGroup,
setSidebarFavoriteGroups, setSidebarFavoriteGroups,
setSidebarFavoriteGroupOrder, setSidebarFavoriteGroupOrder,
+8
View File
@@ -76,6 +76,12 @@
:model-value="isHideFriendsInSameInstance" :model-value="isHideFriendsInSameInstance"
@update:modelValue="setIsHideFriendsInSameInstance" /> @update:modelValue="setIsHideFriendsInSameInstance" />
</Field> </Field>
<Field v-if="isSidebarGroupByInstance" orientation="horizontal">
<FieldLabel>{{ t('side_panel.settings.same_instance_above_favorites') }}</FieldLabel>
<Switch
:model-value="isSameInstanceAboveFavorites"
@update:modelValue="setIsSameInstanceAboveFavorites" />
</Field>
<Field orientation="horizontal"> <Field orientation="horizontal">
<FieldLabel>{{ t('side_panel.settings.split_favorite_friends') }}</FieldLabel> <FieldLabel>{{ t('side_panel.settings.split_favorite_friends') }}</FieldLabel>
<Switch <Switch
@@ -322,6 +328,7 @@
sidebarSortMethod3, sidebarSortMethod3,
isSidebarGroupByInstance, isSidebarGroupByInstance,
isHideFriendsInSameInstance, isHideFriendsInSameInstance,
isSameInstanceAboveFavorites,
isSidebarDivideByFriendGroup, isSidebarDivideByFriendGroup,
sidebarFavoriteGroups sidebarFavoriteGroups
} = storeToRefs(appearanceSettingsStore); } = storeToRefs(appearanceSettingsStore);
@@ -331,6 +338,7 @@
setSidebarSortMethod3, setSidebarSortMethod3,
setIsSidebarGroupByInstance, setIsSidebarGroupByInstance,
setIsHideFriendsInSameInstance, setIsHideFriendsInSameInstance,
setIsSameInstanceAboveFavorites,
setIsSidebarDivideByFriendGroup, setIsSidebarDivideByFriendGroup,
setSidebarFavoriteGroups setSidebarFavoriteGroups
} = appearanceSettingsStore; } = appearanceSettingsStore;
+30 -17
View File
@@ -253,6 +253,7 @@
const { const {
isSidebarGroupByInstance, isSidebarGroupByInstance,
isHideFriendsInSameInstance, isHideFriendsInSameInstance,
isSameInstanceAboveFavorites,
isSidebarDivideByFriendGroup, isSidebarDivideByFriendGroup,
sidebarFavoriteGroups, sidebarFavoriteGroups,
sidebarFavoriteGroupOrder, sidebarFavoriteGroupOrder,
@@ -403,23 +404,7 @@
}); });
}); });
const virtualRows = computed(() => { function buildFavoriteRows(rows) {
const rows = [];
rows.push(
buildToggleRow({
key: 'me-header',
label: t('side_panel.me'),
expanded: isFriendsGroupMe.value,
headerPadding: '0 0 5px',
onClick: toggleFriendsGroupMe
})
);
if (isFriendsGroupMe.value) {
rows.push({ type: 'me-item', key: `me:${currentUser.value?.id ?? 'me'}` });
}
const vipFriendCount = isSidebarDivideByFriendGroup.value const vipFriendCount = isSidebarDivideByFriendGroup.value
? vipFriendsDivideByGroup.value.reduce((sum, group) => sum + group.length, 0) ? vipFriendsDivideByGroup.value.reduce((sum, group) => sum + group.length, 0)
: visibleFavoriteOnlineFriends.value.length; : visibleFavoriteOnlineFriends.value.length;
@@ -476,7 +461,9 @@
}); });
} }
} }
}
function buildSameInstanceRows(rows) {
if (isSidebarGroupByInstance.value && friendsInSameInstance.value.length) { if (isSidebarGroupByInstance.value && friendsInSameInstance.value.length) {
rows.push( rows.push(
buildToggleRow({ buildToggleRow({
@@ -512,6 +499,32 @@
}); });
} }
} }
}
const virtualRows = computed(() => {
const rows = [];
rows.push(
buildToggleRow({
key: 'me-header',
label: t('side_panel.me'),
expanded: isFriendsGroupMe.value,
headerPadding: '0 0 5px',
onClick: toggleFriendsGroupMe
})
);
if (isFriendsGroupMe.value) {
rows.push({ type: 'me-item', key: `me:${currentUser.value?.id ?? 'me'}` });
}
if (isSameInstanceAboveFavorites.value) {
buildSameInstanceRows(rows);
buildFavoriteRows(rows);
} else {
buildFavoriteRows(rows);
buildSameInstanceRows(rows);
}
if (onlineFriendsByGroupStatus.value.length) { if (onlineFriendsByGroupStatus.value.length) {
rows.push( rows.push(