fix: fix the bug of favorite friends hidding (#1104)

* feat: favorite friends divide by different favorite group

* fix: make the update of dividing by favorite groups compatible with previous features

* fix: fix the bug of favorite friends

* fix: fix the bug of favorite friends

* fix: fix the bug of favorite friends hidding

* fix: fix the vipFriendsDivideByGroup dataSource, now it was couputed by others, no longer managed by the add favorite, delete favorite etc handler

* i18n: chinese translation about split favorite friends

* fix: fix the duplicate friend show in a tab
This commit is contained in:
Vivi
2025-01-27 04:25:30 +08:00
committed by GitHub
parent 2a24a2a2ab
commit 212934f08c
3 changed files with 34 additions and 135 deletions

View File

@@ -2928,7 +2928,7 @@ console.log(`isLinux: ${LINUX}`);
$app.localFavoriteFriends.delete(args.params.objectId);
$app.localFavoriteFriendsDivideByGroup.forEach((group, key) => {
for (let i = group.length - 1; i >= 0; i--) {
if (group[i].id === args.params.objectId) {
if (group[i] === args.params.objectId) {
group.splice(i, 1);
}
}
@@ -2992,7 +2992,7 @@ console.log(`isLinux: ${LINUX}`);
$app.localFavoriteFriends.delete(ref.favoriteId);
$app.localFavoriteFriendsDivideByGroup.forEach((group, key) => {
for (let i = group.length - 1; i >= 0; i--) {
if (group[i].id === ref.favoriteId) {
if (group[i] === ref.favoriteId) {
group.splice(i, 1);
}
}
@@ -4262,7 +4262,6 @@ console.log(`isLinux: ${LINUX}`);
$app.data.isGroupInstances = false;
$app.data.groupInstances = [];
$app.data.vipFriends_ = [];
$app.data.vipFriendsDivideByGroup_ = new Map();
$app.data.onlineFriends_ = [];
$app.data.activeFriends_ = [];
$app.data.offlineFriends_ = [];
@@ -4370,7 +4369,6 @@ console.log(`isLinux: ${LINUX}`);
$app.isGroupInstances = false;
$app.groupInstances = [];
$app.vipFriends_ = [];
$app.vipFriendsDivideByGroup_.clear();
$app.onlineFriends_ = [];
$app.activeFriends_ = [];
$app.offlineFriends_ = [];
@@ -4506,18 +4504,6 @@ console.log(`isLinux: ${LINUX}`);
if (ctx.state === 'online') {
if (ctx.isVIP) {
this.vipFriends_.push(ctx);
const key =
Array.from(
this.localFavoriteFriendsDivideByGroup.entries()
).find(([_, ids]) => ids.includes(ctx.id))?.[0] || '';
if (key) {
if (!this.vipFriendsDivideByGroup_.has(key)) {
this.vipFriendsDivideByGroup_.set(key, [ctx]);
} else {
this.vipFriendsDivideByGroup_.get(key).push(ctx);
}
}
this.sortVIPFriends = true;
} else {
this.onlineFriends_.push(ctx);
@@ -4541,20 +4527,6 @@ console.log(`isLinux: ${LINUX}`);
if (ctx.state === 'online') {
if (ctx.isVIP) {
$app.removeFromArray(this.vipFriends_, ctx);
this.vipFriendsDivideByGroup_.forEach((group, key) => {
for (let i = group.length - 1; i >= 0; i--) {
if (group[i].id === ctx.id) {
group.splice(i, 1);
}
}
if (group.length === 0) {
this.vipFriendsDivideByGroup_.delete(key);
}
});
const mapClone = new Map(
Array.from(this.vipFriendsDivideByGroup_)
);
this.vipFriendsDivideByGroup_ = mapClone;
} else {
$app.removeFromArray(this.onlineFriends_, ctx);
}
@@ -4619,38 +4591,9 @@ console.log(`isLinux: ${LINUX}`);
if (ctx.isVIP) {
$app.removeFromArray(this.onlineFriends_, ctx);
this.vipFriends_.push(ctx);
const key =
Array.from(
this.localFavoriteFriendsDivideByGroup.entries()
).find(([_, ids]) => ids.includes(ctx.id))?.[0] ||
'';
if (key) {
if (!this.vipFriendsDivideByGroup_.has(key)) {
this.vipFriendsDivideByGroup_.set(key, [ctx]);
} else {
this.vipFriendsDivideByGroup_
.get(key)
.push(ctx);
}
}
this.sortVIPFriends = true;
} else {
$app.removeFromArray(this.vipFriends_, ctx);
this.vipFriendsDivideByGroup_.forEach((group, key) => {
for (let i = group.length - 1; i >= 0; i--) {
if (group[i].id === ctx.id) {
group.splice(i, 1);
}
}
if (group.length === 0) {
this.vipFriendsDivideByGroup_.delete(key);
}
});
const mapClone = new Map(
Array.from(this.vipFriendsDivideByGroup_)
);
this.vipFriendsDivideByGroup_ = mapClone;
this.onlineFriends_.push(ctx);
this.sortOnlineFriends = true;
}
@@ -4844,20 +4787,6 @@ console.log(`isLinux: ${LINUX}`);
if (ctx.state === 'online') {
if (ctx.isVIP) {
$app.removeFromArray(this.vipFriends_, ctx);
this.vipFriendsDivideByGroup_.forEach((group, key) => {
for (let i = group.length - 1; i >= 0; i--) {
if (group[i].id === ctx.id) {
group.splice(i, 1);
}
}
if (group.length === 0) {
this.vipFriendsDivideByGroup_.delete(key);
}
});
const mapClone = new Map(
Array.from(this.vipFriendsDivideByGroup_)
);
this.vipFriendsDivideByGroup_ = mapClone;
} else {
$app.removeFromArray(this.onlineFriends_, ctx);
}
@@ -4869,18 +4798,6 @@ console.log(`isLinux: ${LINUX}`);
if (newState === 'online') {
if (isVIP) {
this.vipFriends_.push(ctx);
const key =
Array.from(
this.localFavoriteFriendsDivideByGroup.entries()
).find(([_, ids]) => ids.includes(ctx.id))?.[0] || '';
if (key) {
if (!this.vipFriendsDivideByGroup_.has(key)) {
this.vipFriendsDivideByGroup_.set(key, [ctx]);
} else {
this.vipFriendsDivideByGroup_.get(key).push(ctx);
}
}
this.sortVIPFriends = true;
} else {
this.onlineFriends_.push(ctx);
@@ -5245,35 +5162,38 @@ console.log(`isLinux: ${LINUX}`);
// VIP friends divide by group
$app.computed.vipFriendsDivideByGroup = function () {
const friendMap = new Map();
const array = [];
for (const [key, value] of this.localFavoriteFriendsDivideByGroup) {
array.push({
key: key,
value: value
.map((item) => {
return this.vipFriendsByGroupStatus.find(
(friend) => friend.id === item
);
})
.filter((item) => item !== undefined),
displayName: API.favoriteFriendGroups.find(
(item) => item.key === key
)?.displayName
});
}
const filteredArray = array.filter((item) => {
return !(Array.isArray(item.value) && item.value.length === 0);
});
if (this.sortVIPFriends) {
this.vipFriendsDivideByGroup_.forEach((group) => {
this.filteredArray.forEach((group) => {
group.sort(getFriendsSortFunction(this.sidebarSortMethods));
});
}
this.sortVIPFriends = false;
const arr = [];
for (const [key, value] of this.vipFriendsDivideByGroup_) {
arr.push({
key: key,
value: value,
displayName: API.favoriteFriendGroups.find(
(group) => group.key === key
)?.displayName
});
}
if (this.isSidebarGroupByInstance) {
const vipFriendsByGroupStatusIds = new Set(
this.vipFriendsByGroupStatus.map((friend) => friend.id)
);
arr.forEach((group) => {
group.value = group.value.filter((friend) =>
vipFriendsByGroupStatusIds.has(friend.id)
);
});
}
return arr;
return filteredArray;
};
// Online friends
@@ -22128,7 +22048,8 @@ console.log(`isLinux: ${LINUX}`);
if (
!ref.$isDeleted &&
ref.type === 'friend' &&
this.localFavoriteFriendsGroups.includes(ref.$groupKey)
(this.localFavoriteFriendsGroups.includes(ref.$groupKey) ||
this.localFavoriteFriendsGroups.length === 0)
) {
this.localFavoriteFriends.add(ref.favoriteId);
if (
@@ -22170,33 +22091,9 @@ console.log(`isLinux: ${LINUX}`);
if (ctx.isVIP) {
$app.removeFromArray(this.onlineFriends_, ctx);
this.vipFriends_.push(ctx);
const key =
Array.from(
this.localFavoriteFriendsDivideByGroup.entries()
).find(([_, ids]) => ids.includes(ctx.id))?.[0] || '';
if (!this.vipFriendsDivideByGroup_.has(key)) {
this.vipFriendsDivideByGroup_.set(key, [ctx]);
} else {
this.vipFriendsDivideByGroup_.get(key).push(ctx);
}
this.sortVIPFriends = true;
} else {
$app.removeFromArray(this.vipFriends_, ctx);
this.vipFriendsDivideByGroup_.forEach((group, key) => {
for (let i = group.length - 1; i >= 0; i--) {
if (group[i].id === ctx.id) {
group.splice(i, 1);
}
}
if (group.length === 0) {
this.vipFriendsDivideByGroup_.delete(key);
}
});
const mapClone = new Map(
Array.from(this.vipFriendsDivideByGroup_)
);
this.vipFriendsDivideByGroup_ = mapClone;
this.onlineFriends_.push(ctx);
this.sortOnlineFriends = true;
}

View File

@@ -385,7 +385,9 @@
},
"width": "侧边栏宽度",
"group_by_instance": "将好友按所在房间进行分类排序",
"group_by_instance_tooltip": "如果启用,将会在有多名好友在同一房间时,按所在房间对好友进行分类排序。"
"group_by_instance_tooltip": "如果启用,将会在有多名好友在同一房间时,按所在房间对好友进行分类排序。",
"split_favorite_friends": "将星标好友按照好友分组显示",
"split_favorite_friends_tooltip": "如果启用,将会显示星标好友时按照其所在的好友分组显示。"
},
"user_dialog": {
"header": "用户信息",

View File

@@ -74,7 +74,7 @@ mixin friendsListSidebar
i.el-icon-arrow-right(:class='{ rotate: isVIPFriends }')
span(style='margin-left: 5px') {{ $t('side_panel.favorite') }} ― {{ vipFriendsByGroupStatus.length }}
div(v-show='isVIPFriends')
template(v-if='isSidebarDivideByFriendGroup && localFavoriteFriendsGroups.length')
template(v-if='isSidebarDivideByFriendGroup')
div(v-for='(group, idx) in vipFriendsDivideByGroup' :key='idx')
div(style='margin-bottom: 3px')
span.extra {{ group.displayName }}