Skip to content

Commit a5f432b

Browse files
authored
refactor: hide invalid services (#836)
1 parent 553c057 commit a5f432b

File tree

9 files changed

+83
-17
lines changed

9 files changed

+83
-17
lines changed

src/utils/service_instance.ts

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
export enum ServiceType {
2+
TRANSLATE = 'translate',
3+
RECOGNIZE = 'recognize',
4+
TTS = 'tts',
5+
COLLECTION = 'Collection'
6+
}
7+
18
export enum ServiceSourceType {
29
BUILDIN = 'buildin',
310
PLUGIN = 'plugin',
@@ -29,9 +36,15 @@ export function getServiceName(serviceInstanceKey: string): string {
2936
return serviceInstanceKey.split('@')[0]
3037
}
3138

32-
3339
export function getDisplayInstanceName(instanceName: string, serviceNameSupplier: () => string): string {
3440
return instanceName || serviceNameSupplier()
3541
}
3642

37-
export const INSTANCE_NAME_CONFIG_KEY = 'instanceName'
43+
export const INSTANCE_NAME_CONFIG_KEY = 'instanceName'
44+
45+
export function whetherAvailableService(serviceInstanceKey: string, availableServices: Record<ServiceSourceType, Record<string, any>>) {
46+
const serviceSourceType = getServiceSouceType(serviceInstanceKey)
47+
const serviceName = getServiceName(serviceInstanceKey)
48+
return availableServices[serviceSourceType]?.[serviceName] !== undefined
49+
50+
}

src/window/Config/pages/History/index.jsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { useConfig, useToastStyle } from '../../../../hooks';
1717
import { LanguageFlag } from '../../../../utils/language';
1818
import { store } from '../../../../utils/store';
1919
import { osType } from '../../../../utils/env';
20+
import { ServiceSourceType, ServiceType, whetherAvailableService } from '../../../../utils/service_instance';
2021

2122
export default function History() {
2223
const [collectionServiceList] = useConfig('collection_service_list', []);
@@ -145,7 +146,10 @@ export default function History() {
145146
emptyContent={'No History to display.'}
146147
items={items}
147148
>
148-
{(item) => (
149+
{(item) => whetherAvailableService(item.service, {
150+
[ServiceSourceType.BUILDIN]: builtinServices,
151+
[ServiceSourceType.PLUGIN]: pluginList[ServiceType.TRANSLATE]
152+
}) && (
149153
<TableRow key={item.id}>
150154
<TableCell>
151155
{item.service.startsWith('[plugin]') ? (

src/window/Config/pages/Service/Collection/index.jsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { useConfig } from '../../../../../hooks';
99
import ServiceItem from './ServiceItem';
1010
import SelectModal from './SelectModal';
1111
import ConfigModal from './ConfigModal';
12+
import * as builtinCollectionServices from '../../../../../services/collection';
13+
import { ServiceSourceType, whetherAvailableService } from '../../../../../utils/service_instance';
1214

1315
export default function Collection(props) {
1416
const { pluginList } = props;
@@ -67,7 +69,12 @@ export default function Collection(props) {
6769
{...provided.droppableProps}
6870
>
6971
{collectionServiceList !== null &&
70-
collectionServiceList.map((x, i) => {
72+
collectionServiceList.filter(instanceKey => {
73+
return whetherAvailableService(instanceKey, {
74+
[ServiceSourceType.BUILDIN]: builtinCollectionServices,
75+
[ServiceSourceType.PLUGIN]: pluginList
76+
})
77+
}).map((x, i) => {
7178
return (
7279
<Draggable
7380
key={x}

src/window/Config/pages/Service/Recognize/index.jsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import { useConfig } from '../../../../../hooks';
1111
import ServiceItem from './ServiceItem';
1212
import SelectModal from './SelectModal';
1313
import ConfigModal from './ConfigModal';
14+
import * as builtinRecognizeServices from '../../../../../services/recognize';
15+
import { ServiceSourceType, whetherAvailableService } from '../../../../../utils/service_instance';
16+
1417

1518
export default function Recognize(props) {
1619
const { pluginList } = props;
@@ -79,7 +82,12 @@ export default function Recognize(props) {
7982
{...provided.droppableProps}
8083
>
8184
{recognizeServiceList !== null &&
82-
recognizeServiceList.map((x, i) => {
85+
recognizeServiceList.filter(instanceKey => {
86+
return whetherAvailableService(instanceKey, {
87+
[ServiceSourceType.BUILDIN]: builtinRecognizeServices,
88+
[ServiceSourceType.PLUGIN]: pluginList
89+
})
90+
}).map((x, i) => {
8391
return (
8492
<Draggable
8593
key={x}

src/window/Config/pages/Service/Translate/index.jsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import ServiceItem from './ServiceItem';
1212
import SelectModal from './SelectModal';
1313
import ConfigModal from './ConfigModal';
1414

15+
import * as builtinTranslateServices from '../../../../../services/translate';
16+
import { ServiceSourceType, whetherAvailableService } from '../../../../../utils/service_instance';
17+
1518
export default function Translate(props) {
1619
const { pluginList } = props;
1720
const {
@@ -81,7 +84,12 @@ export default function Translate(props) {
8184
{...provided.droppableProps}
8285
>
8386
{translateServiceInstanceList !== null &&
84-
translateServiceInstanceList.map((x, i) => {
87+
translateServiceInstanceList.filter(instanceKey => {
88+
return whetherAvailableService(instanceKey, {
89+
[ServiceSourceType.BUILDIN]: builtinTranslateServices,
90+
[ServiceSourceType.PLUGIN]: pluginList
91+
})
92+
}).map((x, i) => {
8593
return (
8694
<Draggable
8795
key={x}

src/window/Config/pages/Service/Tts/index.jsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { useConfig } from '../../../../../hooks';
1111
import ServiceItem from './ServiceItem';
1212
import SelectModal from './SelectModal';
1313
import ConfigModal from './ConfigModal';
14+
import * as builtinTtsServices from '../../../../../services/tts';
15+
import { ServiceSourceType, whetherAvailableService } from '../../../../../utils/service_instance';
1416

1517
export default function Tts(props) {
1618
const { pluginList } = props;
@@ -76,7 +78,12 @@ export default function Tts(props) {
7678
{...provided.droppableProps}
7779
>
7880
{ttsServiceList !== null &&
79-
ttsServiceList.map((x, i) => {
81+
ttsServiceList.filter(instanceKey => {
82+
return whetherAvailableService(instanceKey, {
83+
[ServiceSourceType.BUILDIN]: builtinTtsServices,
84+
[ServiceSourceType.PLUGIN]: pluginList
85+
})
86+
}).map((x, i) => {
8087
return (
8188
<Draggable
8289
key={x}

src/window/Config/pages/Service/index.jsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Translate from './Translate';
99
import Recognize from './Recognize';
1010
import Collection from './Collection';
1111
import Tts from './Tts';
12+
import { ServiceType } from '../../../../utils/service_instance';
1213

1314
let unlisten = null;
1415

@@ -66,25 +67,25 @@ export default function Service() {
6667
key='translate'
6768
title={t(`config.service.translate`)}
6869
>
69-
<Translate pluginList={pluginList['translate']} />
70+
<Translate pluginList={pluginList[ServiceType.TRANSLATE]} />
7071
</Tab>
7172
<Tab
7273
key='recognize'
7374
title={t(`config.service.recognize`)}
7475
>
75-
<Recognize pluginList={pluginList['recognize']} />
76+
<Recognize pluginList={pluginList[ServiceType.RECOGNIZE]} />
7677
</Tab>
7778
<Tab
7879
key='tts'
7980
title={t(`config.service.tts`)}
8081
>
81-
<Tts pluginList={pluginList['tts']} />
82+
<Tts pluginList={pluginList[ServiceType.TTS]} />
8283
</Tab>
8384
<Tab
8485
key='collection'
8586
title={t(`config.service.collection`)}
8687
>
87-
<Collection pluginList={pluginList['collection']} />
88+
<Collection pluginList={pluginList[ServiceType.COLLECTION]} />
8889
</Tab>
8990
</Tabs>
9091
)

src/window/Recognize/ControlArea/index.jsx

+11-5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { useConfig } from '../../../hooks';
1212
import { textAtom } from '../TextArea';
1313
import { pluginListAtom } from '..';
1414
import { osType } from '../../../utils/env';
15+
import { whetherAvailableService } from '../../../utils/service_instance';
1516

1617
export const serviceNameAtom = atom();
1718
export const languageAtom = atom();
@@ -53,8 +54,8 @@ export default function ControlArea() {
5354
serviceName.startsWith('[plugin]')
5455
? pluginList[serviceName].icon
5556
: builtinService[serviceName].info.icon === 'system'
56-
? `logo/${osType}.svg`
57-
: builtinService[serviceName].info.icon
57+
? `logo/${osType}.svg`
58+
: builtinService[serviceName].info.icon
5859
}
5960
/>
6061
}
@@ -71,7 +72,12 @@ export default function ControlArea() {
7172
setServiceName(key);
7273
}}
7374
>
74-
{serviceList.map((name) => {
75+
{serviceList.filter(instanceKey => {
76+
return whetherAvailableService(instanceKey, {
77+
[ServiceSourceType.BUILDIN]: builtinService,
78+
[ServiceSourceType.PLUGIN]: pluginList
79+
})
80+
}).map((name) => {
7581
return (
7682
<DropdownItem
7783
key={name}
@@ -82,8 +88,8 @@ export default function ControlArea() {
8288
name.startsWith('[plugin]')
8389
? pluginList[name].icon
8490
: builtinService[name].info.icon === 'system'
85-
? `logo/${osType}.svg`
86-
: builtinService[name].info.icon
91+
? `logo/${osType}.svg`
92+
: builtinService[name].info.icon
8793
}
8894
/>
8995
}

src/window/Translate/index.jsx

+13-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ import { osType } from '../../utils/env';
1616
import { useConfig } from '../../hooks';
1717
import { store } from '../../utils/store';
1818
import { info } from 'tauri-plugin-log-api';
19+
20+
import * as builtinTranslateServices from '../../services/translate';
21+
import { ServiceSourceType, ServiceType, whetherAvailableService } from '../../utils/service_instance';
22+
1923
let blurTimeout = null;
2024
let resizeTimeout = null;
2125
let moveTimeout = null;
@@ -268,7 +272,15 @@ export default function Translate() {
268272
{...provided.droppableProps}
269273
>
270274
{translateServiceInstanceList !== null && serviceInstanceConfigMap !== null &&
271-
translateServiceInstanceList.map((serviceInstanceKey, index) => {
275+
translateServiceInstanceList.filter(serviceInstanceKey => {
276+
return whetherAvailableService(
277+
serviceInstanceKey,
278+
{
279+
[ServiceSourceType.PLUGIN]: pluginList[ServiceType.TRANSLATE],
280+
[ServiceSourceType.BUILDIN]: builtinTranslateServices
281+
}
282+
)
283+
}).map((serviceInstanceKey, index) => {
272284
const config = serviceInstanceConfigMap[serviceInstanceKey] ?? {};
273285
const enable = config['enable'] ?? true;
274286

0 commit comments

Comments
 (0)