Skip to content

Commit d126dd4

Browse files
Release 0.3.14
* refactor: optimize state updates and event handling in ChannelSetting, DirectMessage, and ServerSetting components - Updated state management in ChannelSettingPopup to directly apply updates based on channelId, improving responsiveness to real-time changes. - Refactored DirectMessagePopup to enhance friend state handling and streamline event listeners for friend updates, ensuring accurate state representation. - Improved ServerSettingPopup by refining server update logic to match serverId, enhancing clarity and maintainability in event handling. * fix: correct display logic when adding users to the queue - skip checks for direct mic users to ensure they can be added to the queue - allow adding users with equal or lower permission levels to the queue * refactor: standardize user identification logic across components - Replaced instances of `isUser` with `isSelf` for clarity in user context checks across ChannelMessage, FriendTab, QueueUserTab, UserTab, and various popups. - Enhanced permission checks and visibility logic in context menus to improve maintainability and readability. - Streamlined the handling of user interactions in context menus and event popups, ensuring consistent behavior throughout the application. * refactor: rename filteredQueueMembers to queueMembers for clarity - Updated variable names in ChannelList component to enhance readability and maintainability. - Adjusted references in the JSX to reflect the new naming, ensuring consistency across the component. * fix: update user move processing logic - remove duplicate checks when moving a single user * fix: incorrect channel event sorting - remove `.reverse()` causing incorrect sort order * fix: correct capitalization in localization files - Updated various strings in app.json, badge.json, and website.json for consistent capitalization across English, Spanish, and Turkish localization files. - Ensured proper formatting for user-facing text to enhance readability and maintainability. * chore: bump version to 0.3.14 and update README badge * chore: update electron build scripts for improved preparation and consistency - Added a new script for TypeScript compilation before building the Electron app. - Updated existing build scripts to utilize the new preparation step, ensuring a streamlined build process. --------- Co-authored-by: zhChen <eric0406qq@gmail.com>
1 parent b5ac7f0 commit d126dd4

20 files changed

Lines changed: 293 additions & 270 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<div height="20px"> </div>
44
<div>
55
<a title="Crowdin" target="_blank" href="https://discord.gg/adCWzv6wwS"><img src="https://img.shields.io/badge/Join-Discord-blue?logo=discord"/></a>
6-
<a title="Crowdin" target="_blank" href="https://ricecall.com"><img src="https://img.shields.io/badge/Latest-0.3.13-green"/></a>
6+
<a title="Crowdin" target="_blank" href="https://ricecall.com"><img src="https://img.shields.io/badge/Latest-0.3.14-green"/></a>
77
<a title="Crowdin" target="_blank" href="https://crowdin.com"><img src="https://badges.crowdin.net/ricecall/localized.svg"></a>
88
</div>
99
</div>

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ricecall",
3-
"version": "0.3.13",
3+
"version": "0.3.14",
44
"private": false,
55
"description": "Ricecall",
66
"author": {
@@ -19,17 +19,18 @@
1919
"next:build": "next build",
2020
"next:export": "next export",
2121
"next:lint": "next lint",
22+
"electron:prep": "tsc -p tsconfig.electron.json",
2223
"electron:dev": "electron -r tsx main.ts --dev",
2324
"electron:start": "electron -r tsx main.ts",
24-
"electron:build": "tsc -p tsconfig.electron.json && electron-builder",
25-
"electron:build:deb": "tsc -p tsconfig.electron.json && electron-builder --linux deb",
26-
"electron:build:dmg": "tsc -p tsconfig.electron.json && electron-builder --mac dmg",
25+
"electron:build": "npm run electron:prep && electron-builder",
26+
"electron:build:deb": "npm run electron:prep && electron-builder --linux deb",
27+
"electron:build:dmg": "npm run electron:prep && electron-builder --mac dmg",
2728
"dev": "concurrently \"npm run next:dev\" \"npm run electron:dev\"",
2829
"start": "concurrently \"npm run next:start\" \"npm run electron:start\"",
2930
"build": "npm run next:build && npm run electron:build",
3031
"build:deb": "npm run next:build && npm run electron:build:deb",
3132
"build:dmg": "npm run next:build && npm run electron:build:dmg",
32-
"build:action": "npm run next:build && npm run electron:build",
33+
"build:action": "npm run next:build && npm run electron:prep",
3334
"format": "prettier --write src/**/*.{ts,tsx,js,jsx,css}",
3435
"format:css": "stylelint \"src/**/*.css\" --fix"
3536
},

src/components/CategoryTab.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ const CategoryTab: React.FC<CategoryTabProps> = React.memo(
167167
};
168168

169169
const handleMoveUserToChannel = (userId: Types.User['userId'], serverId: Types.Server['serverId'], channelId: Types.Channel['channelId']) => {
170-
Popup.handleOpenAlertDialog(t('confirm-move-members-to-channel', { '0': 1 }), () => ipc.socket.send('moveUserToChannel', { userId, serverId, channelId }));
170+
ipc.socket.send('moveUserToChannel', { userId, serverId, channelId });
171171
};
172172

173173
const handleMoveAllUsersToChannel = (userIds: Types.User['userId'][], serverId: Types.Server['serverId'], channelId: Types.Channel['channelId']) => {

src/components/ChannelList.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ const ChannelList: React.FC<ChannelListProps> = React.memo(({ user, currentServe
6565
);
6666
const serverOnlineMemberMap = useMemo(() => new Map(serverOnlineMembers.map((m) => [m.userId, m] as const)), [serverOnlineMembers]);
6767
const filteredChannels = useMemo(() => channels.filter((c) => !!c && !c.categoryId).sort((a, b) => (a.order !== b.order ? a.order - b.order : a.createdAt - b.createdAt)), [channels]);
68-
const filteredQueueMembers = useMemo<Types.QueueMember[]>(
68+
const queueMembers = useMemo<Types.QueueMember[]>(
6969
() =>
7070
queueUsers
7171
.reduce<Types.QueueMember[]>((acc, qm) => {
@@ -258,12 +258,13 @@ const ChannelList: React.FC<ChannelListProps> = React.memo(({ user, currentServe
258258
<div className={styles['section-title-text']}>{t('mic-order')}</div>
259259
<div ref={queueListRef} className={styles['scroll-view']} style={{ minHeight: '120px', maxHeight: '120px' }}>
260260
<div className={styles['queue-list']}>
261-
{filteredQueueMembers.map((queueMember) => (
261+
{queueMembers.map((queueMember) => (
262262
<QueueUserTab
263263
key={queueMember.userId}
264264
user={user}
265265
friends={friends}
266266
queueMember={queueMember}
267+
queueMembers={queueMembers}
267268
currentServer={currentServer}
268269
currentChannel={currentChannel}
269270
selectedItemId={selectedItemId}

src/components/ChannelMessage.tsx

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,10 @@ const ChannelMessage: React.FC<ChannelMessageProps> = React.memo(({ user, curren
4848
} = messageGroup;
4949

5050
const permissionLevel = Math.max(user.permissionLevel, currentServer.permissionLevel, channelPermissionLevel);
51-
const isUser = senderUserId === userId;
52-
const isSameChannel = senderCurrentChannnelId === currentChannelId;
53-
const isSameServer = senderCurrentServerId === currentServerId;
51+
const isSelf = senderUserId === userId;
52+
const isInSameChannel = senderCurrentChannnelId === currentChannelId;
53+
const isInSameServer = senderCurrentServerId === currentServerId;
5454
const isSuperior = permissionLevel > senderPermissionLevel;
55-
const canUpdatePermission = false && !isUser && isSuperior && Permission.isMember(senderPermissionLevel);
5655
const formattedTimestamp = Language.getFormatTimestamp(t, messageTimestamp);
5756
const formattedMessageContents = useMemo(
5857
() =>
@@ -70,7 +69,7 @@ const ChannelMessage: React.FC<ChannelMessageProps> = React.memo(({ user, curren
7069
{
7170
id: 'direct-message',
7271
label: t('direct-message'),
73-
show: !isUser,
72+
show: !isSelf,
7473
onClick: () => Popup.handleOpenDirectMessage(userId, senderUserId),
7574
},
7675
{
@@ -81,49 +80,49 @@ const ChannelMessage: React.FC<ChannelMessageProps> = React.memo(({ user, curren
8180
{
8281
id: 'kick-channel',
8382
label: t('kick-channel'),
84-
show: !isUser && Permission.isChannelMod(permissionLevel) && isSuperior && isSameChannel,
83+
show: !isSelf && isSuperior && isInSameChannel && Permission.isChannelMod(permissionLevel),
8584
onClick: () => Popup.handleOpenKickMemberFromChannel(senderUserId, currentServerId, currentChannelId),
8685
},
8786
{
8887
id: 'kick-server',
8988
label: t('kick-server'),
90-
show: !isUser && Permission.isServerAdmin(permissionLevel) && isSuperior && isSameServer,
89+
show: !isSelf && isSuperior && isInSameServer && Permission.isServerAdmin(permissionLevel),
9190
onClick: () => Popup.handleOpenKickMemberFromServer(senderUserId, currentServerId),
9291
},
9392
{
9493
id: 'block',
9594
label: t('block'),
96-
show: !isUser && Permission.isServerAdmin(permissionLevel) && isSuperior,
95+
show: !isSelf && isSuperior && Permission.isServerAdmin(permissionLevel),
9796
onClick: () => Popup.handleOpenBlockMember(senderUserId, currentServerId),
9897
},
9998
{
10099
id: 'separator',
101100
label: '',
102-
show: !isUser && Permission.isServerAdmin(permissionLevel) && isSuperior,
101+
show: !isSelf && isSuperior && Permission.isServerAdmin(permissionLevel),
103102
},
104103
{
105104
id: 'invite-to-be-member',
106105
label: t('invite-to-be-member'),
107-
show: !isUser && !Permission.isMember(senderPermissionLevel) && Permission.isServerAdmin(permissionLevel),
106+
show: !isSelf && !Permission.isMember(senderPermissionLevel) && Permission.isServerAdmin(permissionLevel),
108107
onClick: () => Popup.handleOpenInviteMember(senderUserId, currentServerId),
109108
},
110109
{
111110
id: 'member-management',
112111
label: t('member-management'),
113-
show: canUpdatePermission && (channelCategoryId === null ? Permission.isServerAdmin(permissionLevel) : Permission.isChannelAdmin(permissionLevel)),
112+
show: !isSelf && isSuperior && Permission.isMember(senderPermissionLevel) && (!!channelCategoryId ? Permission.isServerAdmin(permissionLevel) : Permission.isChannelAdmin(permissionLevel)),
114113
icon: 'submenu',
115114
hasSubmenu: true,
116115
submenuItems: [
117116
{
118117
id: 'terminate-member',
119118
label: t('terminate-member'),
120-
show: !isUser && Permission.isServerAdmin(permissionLevel) && isSuperior && Permission.isMember(senderPermissionLevel) && !Permission.isServerOwner(senderPermissionLevel),
119+
show: !isSelf && isSuperior && Permission.isMember(senderPermissionLevel) && !Permission.isServerOwner(senderPermissionLevel) && Permission.isServerAdmin(permissionLevel),
121120
onClick: () => handleTerminateMember(senderUserId, currentServerId, senderName),
122121
},
123122
{
124123
id: 'set-channel-mod',
125124
label: Permission.isChannelMod(senderPermissionLevel) ? t('unset-channel-mod') : t('set-channel-mod'),
126-
show: canUpdatePermission && Permission.isChannelAdmin(permissionLevel) && !Permission.isChannelAdmin(senderPermissionLevel) && channelCategoryId !== null,
125+
show: !!channelCategoryId && Permission.isChannelAdmin(permissionLevel) && !Permission.isChannelAdmin(senderPermissionLevel),
127126
onClick: () =>
128127
Permission.isChannelMod(senderPermissionLevel)
129128
? handleEditChannelPermission(senderUserId, currentServerId, currentChannelId, { permissionLevel: 2 })
@@ -132,7 +131,7 @@ const ChannelMessage: React.FC<ChannelMessageProps> = React.memo(({ user, curren
132131
{
133132
id: 'set-channel-admin',
134133
label: Permission.isChannelAdmin(senderPermissionLevel) ? t('unset-channel-admin') : t('set-channel-admin'),
135-
show: canUpdatePermission && Permission.isServerAdmin(permissionLevel) && !Permission.isServerAdmin(senderPermissionLevel),
134+
show: Permission.isServerAdmin(permissionLevel) && !Permission.isServerAdmin(senderPermissionLevel),
136135
onClick: () =>
137136
Permission.isChannelAdmin(senderPermissionLevel)
138137
? handleEditChannelPermission(senderUserId, currentServerId, channelCategoryId || currentChannelId, { permissionLevel: 2 })
@@ -141,7 +140,7 @@ const ChannelMessage: React.FC<ChannelMessageProps> = React.memo(({ user, curren
141140
{
142141
id: 'set-server-admin',
143142
label: Permission.isServerAdmin(senderPermissionLevel) ? t('unset-server-admin') : t('set-server-admin'),
144-
show: canUpdatePermission && Permission.isServerOwner(permissionLevel) && !Permission.isServerOwner(senderPermissionLevel),
143+
show: Permission.isServerOwner(permissionLevel) && !Permission.isServerOwner(senderPermissionLevel),
145144
onClick: () =>
146145
Permission.isServerAdmin(senderPermissionLevel)
147146
? handleEditServerPermission(senderUserId, currentServerId, { permissionLevel: 2 })

src/components/ChannelTab.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ const ChannelTab: React.FC<ChannelTabProps> = React.memo(
163163
};
164164

165165
const handleMoveUserToChannel = (userId: Types.User['userId'], serverId: Types.Server['serverId'], channelId: Types.Channel['channelId']) => {
166-
Popup.handleOpenAlertDialog(t('confirm-move-members-to-channel', { '0': 1 }), () => ipc.socket.send('moveUserToChannel', { userId, serverId, channelId }));
166+
ipc.socket.send('moveUserToChannel', { userId, serverId, channelId });
167167
};
168168

169169
const handleMoveAllUsersToChannel = (userIds: Types.User['userId'][], serverId: Types.Server['serverId'], channelId: Types.Channel['channelId']) => {

src/components/FriendTab.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const FriendTab: React.FC<FriendTabProps> = React.memo(({ user, friend, friendGr
5353
currentServerId: friendCurrentServerId,
5454
shareCurrentServer: friendShareCurrentServer,
5555
} = friend;
56-
const isUser = targetId === userId;
56+
const isSelf = targetId === userId;
5757
const isOnline = friendStatus !== 'offline';
5858
const isStranger = friendRelationStatus === 0;
5959
const isPending = friendRelationStatus === 1;
@@ -64,30 +64,30 @@ const FriendTab: React.FC<FriendTabProps> = React.memo(({ user, friend, friendGr
6464
{
6565
id: 'direct-message',
6666
label: t('direct-message'),
67-
show: !isUser,
67+
show: !isSelf,
6868
onClick: () => Popup.handleOpenDirectMessage(userId, targetId),
6969
},
7070
{
7171
id: 'separator',
7272
label: '',
73-
show: !isUser,
73+
show: !isSelf,
7474
},
7575
{
7676
id: 'view-profile',
7777
label: t('view-profile'),
78-
show: !isUser,
78+
show: !isSelf,
7979
onClick: () => Popup.handleOpenUserInfo(userId, targetId),
8080
},
8181
{
8282
id: 'add-friend',
8383
label: t('add-friend'),
84-
show: !isUser && !isFriend,
84+
show: !isSelf && !isFriend,
8585
onClick: () => Popup.handleOpenApplyFriend(userId, targetId),
8686
},
8787
{
8888
id: 'edit-note',
8989
label: t('edit-note'),
90-
show: !isUser && isFriend,
90+
show: !isSelf && isFriend,
9191
onClick: () => Popup.handleOpenEditFriendNote(userId, targetId),
9292
},
9393
{
@@ -97,7 +97,7 @@ const FriendTab: React.FC<FriendTabProps> = React.memo(({ user, friend, friendGr
9797
{
9898
id: 'permission-setting',
9999
label: t('permission-setting'),
100-
show: !isUser && isFriend,
100+
show: !isSelf && isFriend,
101101
icon: 'submenu',
102102
disabled: true,
103103
hasSubmenu: true,
@@ -123,7 +123,7 @@ const FriendTab: React.FC<FriendTabProps> = React.memo(({ user, friend, friendGr
123123
{
124124
id: 'edit-friend-friend-group',
125125
label: t('edit-friend-friend-group'),
126-
show: !isUser && !isStranger && !isFriendBlocked,
126+
show: !isSelf && !isStranger && !isFriendBlocked,
127127
icon: 'submenu',
128128
hasSubmenu: true,
129129
submenuItems: friendGroups.map((group, key) => ({
@@ -136,19 +136,19 @@ const FriendTab: React.FC<FriendTabProps> = React.memo(({ user, friend, friendGr
136136
{
137137
id: 'block',
138138
label: isFriendBlocked ? t('unblock') : t('block'),
139-
show: !isUser,
139+
show: !isSelf,
140140
onClick: () => (isFriendBlocked ? handleUnblockUser(targetId) : handleBlockUser(targetId)),
141141
},
142142
{
143143
id: 'delete-friend',
144144
label: t('delete-friend'),
145-
show: !isUser && isFriend,
145+
show: !isSelf && isFriend,
146146
onClick: () => handleDeleteFriend(targetId),
147147
},
148148
{
149149
id: 'delete-friend-application',
150150
label: t('delete-friend-application'),
151-
show: !isUser && isPending,
151+
show: !isSelf && isPending,
152152
onClick: () => handleDeleteFriendApplication(targetId),
153153
},
154154
];

0 commit comments

Comments
 (0)