Skip to content

Commit 4df3585

Browse files
Release 0.3.19
* feat: implement FriendTab component for displaying friend information and interactions. * feat: Add GitHub Actions workflows for automated dev and main application releases. * feat: Implement ContextMenuClass to construct various context menu options. * fix: loopback audio not working * feat: Add UserTab component with dynamic context menu generation for user interactions. * feat: implement comprehensive UI for channel and server settings, various tabs, message types, and context menus. * feat: Add action functions for opening UI popups and handling IPC communication. * feat: Implement core UI components including numerous popups, pages, and application providers. * chore: update package version from 0.3.18 to 0.3.19-dev.20260307. * refactor: Improve network diagnosis UI styling, SFU test flow, and IPC listener cleanup. * style: Standardize empty arrow function callbacks and reorder CSS properties for consistency. * refactor: Modularize the IPC layer by splitting it into dedicated files for better organization. * refactor: sort files * refactor: change ipc.network to ipc.networkDiagnosis * chore: update project version to 0.3.19. * fix: lint
1 parent 58ba99e commit 4df3585

144 files changed

Lines changed: 2165 additions & 1711 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/dev-release.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ jobs:
6161
echo "WS_URL=${{ secrets.WS_URL }}" >> .env
6262
echo "WS_URL=${{ secrets.WS_DEV_URL }}" >> .env.dev
6363
echo "CROWDIN_DISTRIBUTION_HASH=${{ secrets.CROWDIN_DISTRIBUTION_HASH }}" >> .env
64+
echo "ERROR_SUBMISSION_URL=${{ secrets.ERROR_SUBMISSION_URL }}" >> .env
6465
6566
- name: Build electron
6667
uses: samuelmeuli/action-electron-builder@v1

.github/workflows/main-release.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ jobs:
6060
echo "API_URL=${{ secrets.API_DEV_URL }}" >> .env.dev
6161
echo "WS_URL=${{ secrets.WS_URL }}" >> .env
6262
echo "WS_URL=${{ secrets.WS_DEV_URL }}" >> .env.dev
63+
echo "ERROR_SUBMISSION_URL=${{ secrets.ERROR_SUBMISSION_URL }}" >> .env
6364
6465
- name: Build electron
6566
uses: samuelmeuli/action-electron-builder@v1

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.18-green"/></a>
6+
<a title="Crowdin" target="_blank" href="https://ricecall.com"><img src="https://img.shields.io/badge/Latest-0.3.19-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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ricecall",
3-
"version": "0.3.18",
3+
"version": "0.3.19",
44
"private": false,
55
"description": "Ricecall",
66
"author": {

src/action.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { t } from 'i18next';
2-
import ipc from '@/ipc';
32

43
import * as Types from '@/types';
54

5+
import ipc from '@/ipc';
6+
67
export function openAlertDialog(message: string, callback: () => void) {
78
ipc.popup.open('dialogAlert', 'dialogAlert', { message });
89
ipc.popup.onSubmit('dialogAlert', callback);
@@ -158,6 +159,10 @@ export function openServerAnnouncement(announcement: Types.Server['announcement'
158159
ipc.popup.open('serverAnnouncement', 'serverAnnouncement', { announcement });
159160
}
160161

162+
export function openNetworkDiagnosis() {
163+
ipc.popup.open('networkDiagnosis', 'networkDiagnosis');
164+
}
165+
161166
export function connectChannel(serverId: Types.Server['serverId'], channelId: Types.Channel['channelId'], canJoin: boolean, isPasswordNeeded: boolean) {
162167
if (!canJoin) return;
163168
if (isPasswordNeeded) openChannelPassword((password) => ipc.socket.send('connectChannel', { serverId, channelId, password }));
@@ -407,7 +412,3 @@ export function leaveQueue(serverId: Types.Server['serverId'], channelId: Types.
407412
export function controlQueue(serverId: Types.Server['serverId'], channelId: Types.Channel['channelId']) {
408413
ipc.socket.send('controlQueue', { serverId, channelId });
409414
}
410-
411-
export function openNetworkDiagnosis() {
412-
ipc.popup.open('networkDiagnosis', 'networkDiagnosis');
413-
}

src/app/auth/page.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dynamic from 'next/dynamic';
44
import React, { useEffect, useState } from 'react';
55
import { useTranslation } from 'react-i18next';
6+
67
import ipc from '@/ipc';
78

89
import LoginPage from '@/pages/Login';

src/app/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { useContextMenu } from '@/providers/ContextMenu';
2525
import { useLoading } from '@/providers/Loading';
2626
import { useActionScanner } from '@/providers/ActionScanner';
2727

28-
import CtxMenuBuilder from '@/utils/ctxMenuBuilder';
28+
import CtxMenuBuilder from '@/hooks/ctxMenus/ctxMenuBuilder';
2929
import { isRenderer } from '@/utils/platform';
3030

3131
import { LANGUAGES } from '@/constant';

src/app/popup/page.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dynamic from 'next/dynamic';
44
import React, { useEffect, useState, useCallback } from 'react';
55
import { useTranslation } from 'react-i18next';
6+
67
import ipc from '@/ipc';
78

89
import type * as Types from '@/types';

src/app/provider.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dynamic from 'next/dynamic';
44
import React, { useEffect } from 'react';
55
import { Provider } from 'react-redux';
6+
67
import { store } from '@/store';
78
import i18n from '@/i18n';
89
import ipc from '@/ipc';

src/auth.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import * as APIService from '@/api';
21
import packageJson from '../package.json' with { type: 'json' };
32

3+
import { post } from '@/api';
4+
45
type RegisterFormData = {
56
account: string;
67
password: string;
@@ -15,21 +16,21 @@ type LoginFormData = {
1516
};
1617

1718
export async function register(formData: RegisterFormData): Promise<{ success: true; message: string } | { success: false }> {
18-
const res = await APIService.post('/account/register', formData);
19+
const res = await post('/account/register', formData);
1920
if (!res || typeof res !== 'object' || !('message' in res) || typeof res.message !== 'string') return { success: false };
2021

2122
return { success: true, message: res.message };
2223
}
2324

2425
export async function login(formData: LoginFormData): Promise<{ success: true; token: string } | { success: false }> {
25-
const res = await APIService.post('/account/login', { ...formData, version: packageJson.version });
26+
const res = await post('/account/login', { ...formData, version: packageJson.version });
2627
if (!res || typeof res !== 'object' || !('token' in res) || typeof res.token !== 'string') return { success: false };
2728

2829
return { success: true, token: res.token };
2930
}
3031

3132
export async function autoLogin(token: string): Promise<{ success: true; token: string } | { success: false }> {
32-
const res = await APIService.post('/token/verify', { token, version: packageJson.version });
33+
const res = await post('/token/verify', { token, version: packageJson.version });
3334
if (!res || typeof res !== 'object' || !('token' in res) || typeof res.token !== 'string') return { success: false };
3435

3536
return { success: true, token: res.token };

0 commit comments

Comments
 (0)