From 58f7a6166ce045fae4936ee125a1c38852c42a88 Mon Sep 17 00:00:00 2001 From: pengx17 Date: Mon, 21 Apr 2025 07:37:43 +0000 Subject: [PATCH] fix(electron): use askForMeetingPermission for asking microphone permission (#11792) --- .../frontend/apps/electron/src/main/recording/feature.ts | 7 +++++++ .../frontend/apps/electron/src/main/recording/index.ts | 4 ++++ .../dialogs/setting/general-setting/meetings/index.tsx | 8 +++++++- .../core/src/modules/media/services/meeting-settings.ts | 6 ++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/frontend/apps/electron/src/main/recording/feature.ts b/packages/frontend/apps/electron/src/main/recording/feature.ts index e59f6ed590..23cb9d86ad 100644 --- a/packages/frontend/apps/electron/src/main/recording/feature.ts +++ b/packages/frontend/apps/electron/src/main/recording/feature.ts @@ -781,6 +781,13 @@ export const checkMeetingPermissions = () => { ) as Record<(typeof mediaTypes)[number], boolean>; }; +export const askForMeetingPermission = async (type: 'microphone') => { + if (!isMacOS()) { + return false; + } + return systemPreferences.askForMediaAccess(type); +}; + export const checkCanRecordMeeting = () => { const features = checkMeetingPermissions(); return ( diff --git a/packages/frontend/apps/electron/src/main/recording/index.ts b/packages/frontend/apps/electron/src/main/recording/index.ts index a057e93815..3a98935256 100644 --- a/packages/frontend/apps/electron/src/main/recording/index.ts +++ b/packages/frontend/apps/electron/src/main/recording/index.ts @@ -9,6 +9,7 @@ import { shell } from 'electron'; import { isMacOS } from '../../shared/utils'; import type { NamespaceHandlers } from '../type'; import { + askForMeetingPermission, checkMeetingPermissions, checkRecordingAvailable, disableRecordingFeature, @@ -76,6 +77,9 @@ export const recordingHandlers = { checkMeetingPermissions: async () => { return checkMeetingPermissions(); }, + askForMeetingPermission: async (_, type: 'microphone') => { + return askForMeetingPermission(type); + }, showRecordingPermissionSetting: async (_, type: 'screen' | 'microphone') => { const urlMap = { screen: 'Privacy_ScreenCapture', diff --git a/packages/frontend/core/src/desktop/dialogs/setting/general-setting/meetings/index.tsx b/packages/frontend/core/src/desktop/dialogs/setting/general-setting/meetings/index.tsx index 33528d606b..f7fbe821ab 100644 --- a/packages/frontend/core/src/desktop/dialogs/setting/general-setting/meetings/index.tsx +++ b/packages/frontend/core/src/desktop/dialogs/setting/general-setting/meetings/index.tsx @@ -210,7 +210,13 @@ export const MeetingsSettings = () => { const handleOpenMicrophoneRecordingPermissionSetting = useAsyncCallback(async () => { - await meetingSettingsService.showRecordingPermissionSetting('microphone'); + const result = + await meetingSettingsService.askForMeetingPermission('microphone'); + if (!result) { + await meetingSettingsService.showRecordingPermissionSetting( + 'microphone' + ); + } }, [meetingSettingsService]); const handleOpenSavedRecordings = useAsyncCallback(async () => { diff --git a/packages/frontend/core/src/modules/media/services/meeting-settings.ts b/packages/frontend/core/src/modules/media/services/meeting-settings.ts index 490e0cbd70..dacd4dc8a2 100644 --- a/packages/frontend/core/src/modules/media/services/meeting-settings.ts +++ b/packages/frontend/core/src/modules/media/services/meeting-settings.ts @@ -114,6 +114,12 @@ export class MeetingSettingsService extends Service { ); } + async askForMeetingPermission(type: 'microphone') { + return this.desktopApiService?.handler.recording.askForMeetingPermission( + type + ); + } + setRecordingMode = (mode: MeetingSettingsSchema['recordingMode']) => { const currentMode = this.settings.recordingMode;