diff --git a/packages/shared/IpcChannel.ts b/packages/shared/IpcChannel.ts index 4d96b13ce1..9d464a5feb 100644 --- a/packages/shared/IpcChannel.ts +++ b/packages/shared/IpcChannel.ts @@ -280,12 +280,6 @@ export enum IpcChannel { Selection_ToolbarVisibilityChange = 'selection:toolbar-visibility-change', Selection_ToolbarDetermineSize = 'selection:toolbar-determine-size', Selection_WriteToClipboard = 'selection:write-to-clipboard', - Selection_SetEnabled = 'selection:set-enabled', - Selection_SetTriggerMode = 'selection:set-trigger-mode', - Selection_SetFilterMode = 'selection:set-filter-mode', - Selection_SetFilterList = 'selection:set-filter-list', - Selection_SetFollowToolbar = 'selection:set-follow-toolbar', - Selection_SetRemeberWinSize = 'selection:set-remeber-win-size', Selection_ActionWindowClose = 'selection:action-window-close', Selection_ActionWindowMinimize = 'selection:action-window-minimize', Selection_ActionWindowPin = 'selection:action-window-pin', diff --git a/packages/shared/data/preferenceTypes.ts b/packages/shared/data/preferenceTypes.ts index c5bc52dd7d..0d93b05164 100644 --- a/packages/shared/data/preferenceTypes.ts +++ b/packages/shared/data/preferenceTypes.ts @@ -14,8 +14,18 @@ export type PreferenceShortcutType = { system: boolean } -export type SelectionTriggerMode = 'selected' | 'ctrlkey' | 'shortcut' -export type SelectionFilterMode = 'default' | 'whitelist' | 'blacklist' +export enum SelectionTriggerMode { + Selected = 'selected', + Ctrlkey = 'ctrlkey', + Shortcut = 'shortcut' +} + +export enum SelectionFilterMode { + Default = 'default', + Whitelist = 'whitelist', + Blacklist = 'blacklist' +} + export type SelectionActionItem = { id: string name: string diff --git a/packages/shared/data/preferences.ts b/packages/shared/data/preferences.ts index 43732d49d2..2b47643537 100644 --- a/packages/shared/data/preferences.ts +++ b/packages/shared/data/preferences.ts @@ -584,10 +584,10 @@ export const DefaultPreferences: PreferencesType = { 'feature.selection.compact': false, 'feature.selection.enabled': false, 'feature.selection.filter_list': [], - 'feature.selection.filter_mode': 'default', + 'feature.selection.filter_mode': PreferenceTypes.SelectionFilterMode.Default, 'feature.selection.follow_toolbar': true, 'feature.selection.remember_win_size': false, - 'feature.selection.trigger_mode': 'selected', + 'feature.selection.trigger_mode': PreferenceTypes.SelectionTriggerMode.Selected, 'feature.translate.model_prompt': TRANSLATE_PROMPT, 'feature.translate.target_language': 'en-us', 'shortcut.app.exit_fullscreen': { editable: false, enabled: true, key: ['Escape'], system: true }, diff --git a/src/main/services/SelectionService.ts b/src/main/services/SelectionService.ts index ed92ceb5fd..048fe58023 100644 --- a/src/main/services/SelectionService.ts +++ b/src/main/services/SelectionService.ts @@ -2,7 +2,8 @@ import { preferenceService } from '@data/PreferenceService' import { loggerService } from '@logger' import { SELECTION_FINETUNED_LIST, SELECTION_PREDEFINED_BLACKLIST } from '@main/configs/SelectionConfig' import { isDev, isMac, isWin } from '@main/constant' -import type { SelectionActionItem, SelectionFilterMode, SelectionTriggerMode } from '@shared/data/preferenceTypes' +import type { SelectionActionItem } from '@shared/data/preferenceTypes' +import { SelectionTriggerMode } from '@shared/data/preferenceTypes' import { IpcChannel } from '@shared/IpcChannel' import { app, BrowserWindow, ipcMain, screen, systemPreferences } from 'electron' import { join } from 'path' @@ -41,12 +42,6 @@ type RelativeOrientation = | 'middleRight' | 'center' -enum TriggerMode { - Selected = 'selected', - Ctrlkey = 'ctrlkey', - Shortcut = 'shortcut' -} - /** SelectionService is a singleton class that manages the selection hook and the toolbar window * * Features: @@ -69,7 +64,7 @@ export class SelectionService { private initStatus: boolean = false private started: boolean = false - private triggerMode = TriggerMode.Selected + private triggerMode = SelectionTriggerMode.Selected private isFollowToolbar = true private isRemeberWinSize = false private filterMode = 'default' @@ -160,7 +155,7 @@ export class SelectionService { } private initConfig(): void { - this.triggerMode = preferenceService.get('feature.selection.trigger_mode') as TriggerMode + this.triggerMode = preferenceService.get('feature.selection.trigger_mode') this.isFollowToolbar = preferenceService.get('feature.selection.follow_toolbar') this.isRemeberWinSize = preferenceService.get('feature.selection.remember_win_size') this.filterMode = preferenceService.get('feature.selection.filter_mode') @@ -170,10 +165,10 @@ export class SelectionService { this.setHookFineTunedList() this.unsubscriberForChangeListeners.push( - preferenceService.subscribeChange('feature.selection.trigger_mode', (triggerMode: string) => { - const oldTriggerMode = this.triggerMode as TriggerMode + preferenceService.subscribeChange('feature.selection.trigger_mode', (triggerMode: SelectionTriggerMode) => { + const oldTriggerMode = this.triggerMode - this.triggerMode = triggerMode as TriggerMode + this.triggerMode = triggerMode this.processTriggerMode() //trigger mode changed, need to update the filter list @@ -233,7 +228,7 @@ export class SelectionService { let combinedMode = mode //only the selected mode need to combine the predefined blacklist with the user-defined blacklist - if (this.triggerMode === TriggerMode.Selected) { + if (this.triggerMode === SelectionTriggerMode.Selected) { switch (mode) { case 'blacklist': //combine the predefined blacklist with the user-defined blacklist @@ -753,7 +748,7 @@ export class SelectionService { * it's a public method used by shortcut service */ public processSelectTextByShortcut(): void { - if (!this.selectionHook || !this.started || this.triggerMode !== TriggerMode.Shortcut) return + if (!this.selectionHook || !this.started || this.triggerMode !== SelectionTriggerMode.Shortcut) return const selectionData = this.selectionHook.getCurrentSelection() @@ -1012,7 +1007,7 @@ export class SelectionService { */ private handleKeyDownHide = (data: KeyboardEventData) => { //dont hide toolbar when ctrlkey is pressed - if (this.triggerMode === TriggerMode.Ctrlkey && this.isCtrlkey(data.vkCode)) { + if (this.triggerMode === SelectionTriggerMode.Ctrlkey && this.isCtrlkey(data.vkCode)) { return } //dont hide toolbar when shiftkey or altkey is pressed, because it's used for selection @@ -1412,7 +1407,7 @@ export class SelectionService { if (!this.selectionHook) return switch (this.triggerMode) { - case TriggerMode.Selected: + case SelectionTriggerMode.Selected: if (this.isCtrlkeyListenerActive) { this.selectionHook.off('key-down', this.handleKeyDownCtrlkeyMode) this.selectionHook.off('key-up', this.handleKeyUpCtrlkeyMode) @@ -1422,7 +1417,7 @@ export class SelectionService { this.selectionHook.setSelectionPassiveMode(false) break - case TriggerMode.Ctrlkey: + case SelectionTriggerMode.Ctrlkey: if (!this.isCtrlkeyListenerActive) { this.selectionHook.on('key-down', this.handleKeyDownCtrlkeyMode) this.selectionHook.on('key-up', this.handleKeyUpCtrlkeyMode) @@ -1432,7 +1427,7 @@ export class SelectionService { this.selectionHook.setSelectionPassiveMode(true) break - case TriggerMode.Shortcut: + case SelectionTriggerMode.Shortcut: //remove the ctrlkey listener, don't need any key listener for shortcut mode if (this.isCtrlkeyListenerActive) { this.selectionHook.off('key-down', this.handleKeyDownCtrlkeyMode) @@ -1470,30 +1465,6 @@ export class SelectionService { selectionService?.determineToolbarSize(width, height) }) - ipcMain.handle(IpcChannel.Selection_SetEnabled, (_, enabled: boolean) => { - preferenceService.set('feature.selection.enabled', enabled) - }) - - ipcMain.handle(IpcChannel.Selection_SetTriggerMode, (_, triggerMode: SelectionTriggerMode) => { - preferenceService.set('feature.selection.trigger_mode', triggerMode) - }) - - ipcMain.handle(IpcChannel.Selection_SetFollowToolbar, (_, isFollowToolbar: boolean) => { - preferenceService.set('feature.selection.follow_toolbar', isFollowToolbar) - }) - - ipcMain.handle(IpcChannel.Selection_SetRemeberWinSize, (_, isRemeberWinSize: boolean) => { - preferenceService.set('feature.selection.remember_win_size', isRemeberWinSize) - }) - - ipcMain.handle(IpcChannel.Selection_SetFilterMode, (_, filterMode: SelectionFilterMode) => { - preferenceService.set('feature.selection.filter_mode', filterMode) - }) - - ipcMain.handle(IpcChannel.Selection_SetFilterList, (_, filterList: string[]) => { - preferenceService.set('feature.selection.filter_list', filterList) - }) - // [macOS] only macOS has the available isFullscreen mode ipcMain.handle( IpcChannel.Selection_ProcessAction, diff --git a/src/preload/index.ts b/src/preload/index.ts index 20f1a196d7..5ef38e049a 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -382,14 +382,6 @@ const api = { writeToClipboard: (text: string) => ipcRenderer.invoke(IpcChannel.Selection_WriteToClipboard, text), determineToolbarSize: (width: number, height: number) => ipcRenderer.invoke(IpcChannel.Selection_ToolbarDetermineSize, width, height), - setEnabled: (enabled: boolean) => ipcRenderer.invoke(IpcChannel.Selection_SetEnabled, enabled), - setTriggerMode: (triggerMode: string) => ipcRenderer.invoke(IpcChannel.Selection_SetTriggerMode, triggerMode), - setFollowToolbar: (isFollowToolbar: boolean) => - ipcRenderer.invoke(IpcChannel.Selection_SetFollowToolbar, isFollowToolbar), - setRemeberWinSize: (isRemeberWinSize: boolean) => - ipcRenderer.invoke(IpcChannel.Selection_SetRemeberWinSize, isRemeberWinSize), - setFilterMode: (filterMode: string) => ipcRenderer.invoke(IpcChannel.Selection_SetFilterMode, filterMode), - setFilterList: (filterList: string[]) => ipcRenderer.invoke(IpcChannel.Selection_SetFilterList, filterList), processAction: (actionItem: SelectionActionItem, isFullScreen: boolean = false) => ipcRenderer.invoke(IpcChannel.Selection_ProcessAction, actionItem, isFullScreen), closeActionWindow: () => ipcRenderer.invoke(IpcChannel.Selection_ActionWindowClose), diff --git a/src/renderer/src/store/selectionStore.ts b/src/renderer/src/store/selectionStore.ts index a9298c1810..698532c695 100644 --- a/src/renderer/src/store/selectionStore.ts +++ b/src/renderer/src/store/selectionStore.ts @@ -1,5 +1,9 @@ +/** + * @deprecated The whole file will be removed after data refactoring + */ import { createSlice, PayloadAction } from '@reduxjs/toolkit' -import type { SelectionActionItem, SelectionFilterMode, SelectionTriggerMode } from '@shared/data/preferenceTypes' +import type { SelectionActionItem } from '@shared/data/preferenceTypes' +import { SelectionFilterMode, SelectionTriggerMode } from '@shared/data/preferenceTypes' export interface SelectionState { selectionEnabled: boolean @@ -34,13 +38,13 @@ export const defaultActionItems: SelectionActionItem[] = [ export const initialState: SelectionState = { selectionEnabled: false, - triggerMode: 'selected', + triggerMode: SelectionTriggerMode.Selected, isCompact: false, isAutoClose: false, isAutoPin: false, isFollowToolbar: true, isRemeberWinSize: false, - filterMode: 'default', + filterMode: SelectionFilterMode.Default, filterList: [], actionWindowOpacity: 100, actionItems: defaultActionItems