118 lines
7.3 KiB
JavaScript
118 lines
7.3 KiB
JavaScript
// src/bridge/featureBridge.js
|
|
const { ipcMain, app } = require('electron');
|
|
const settingsService = require('../features/settings/settingsService');
|
|
const authService = require('../features/common/services/authService');
|
|
const whisperService = require('../features/common/services/whisperService');
|
|
const ollamaService = require('../features/common/services/ollamaService');
|
|
const modelStateService = require('../features/common/services/modelStateService');
|
|
const shortcutsService = require('../features/shortcuts/shortcutsService');
|
|
|
|
const askService = require('../features/ask/askService');
|
|
const listenService = require('../features/listen/listenService');
|
|
|
|
module.exports = {
|
|
// Renderer로부터의 요청을 수신
|
|
initialize() {
|
|
|
|
// Settings Service
|
|
ipcMain.handle('settings:getPresets', async () => await settingsService.getPresets());
|
|
ipcMain.handle('settings:get-auto-update', async () => await settingsService.getAutoUpdateSetting());
|
|
ipcMain.handle('settings:set-auto-update', async (event, isEnabled) => await settingsService.setAutoUpdateSetting(isEnabled));
|
|
ipcMain.handle('settings:get-model-settings', async () => await settingsService.getModelSettings());
|
|
ipcMain.handle('settings:validate-and-save-key', async (e, { provider, key }) => await settingsService.validateAndSaveKey(provider, key));
|
|
ipcMain.handle('settings:clear-api-key', async (e, { provider }) => await settingsService.clearApiKey(provider));
|
|
ipcMain.handle('settings:set-selected-model', async (e, { type, modelId }) => await settingsService.setSelectedModel(type, modelId));
|
|
|
|
ipcMain.handle('settings:get-ollama-status', async () => await settingsService.getOllamaStatus());
|
|
ipcMain.handle('settings:ensure-ollama-ready', async () => await settingsService.ensureOllamaReady());
|
|
ipcMain.handle('settings:shutdown-ollama', async () => await settingsService.shutdownOllama());
|
|
|
|
// Shortcuts
|
|
ipcMain.handle('get-current-shortcuts', async () => await shortcutsService.loadKeybinds());
|
|
ipcMain.handle('get-default-shortcuts', async () => await shortcutsService.handleRestoreDefaults());
|
|
ipcMain.handle('save-shortcuts', async (event, newKeybinds) => await shortcutsService.handleSaveShortcuts(newKeybinds));
|
|
|
|
|
|
// User/Auth
|
|
ipcMain.handle('get-current-user', () => authService.getCurrentUser());
|
|
ipcMain.handle('start-firebase-auth', async () => await authService.startFirebaseAuthFlow());
|
|
ipcMain.handle('firebase-logout', async () => await authService.signOut());
|
|
|
|
// App
|
|
ipcMain.handle('quit-application', () => app.quit());
|
|
|
|
// Whisper
|
|
ipcMain.handle('whisper:download-model', async (event, modelId) => await whisperService.handleDownloadModel(event, modelId));
|
|
ipcMain.handle('whisper:get-installed-models', async () => await whisperService.handleGetInstalledModels());
|
|
|
|
// General
|
|
ipcMain.handle('get-preset-templates', () => presetRepository.getPresetTemplates());
|
|
ipcMain.handle('get-web-url', () => process.env.pickleglass_WEB_URL || 'http://localhost:3000');
|
|
|
|
// Ollama
|
|
ipcMain.handle('ollama:get-status', async () => await ollamaService.handleGetStatus());
|
|
ipcMain.handle('ollama:install', async (event) => await ollamaService.handleInstall(event));
|
|
ipcMain.handle('ollama:start-service', async (event) => await ollamaService.handleStartService(event));
|
|
ipcMain.handle('ollama:ensure-ready', async () => await ollamaService.handleEnsureReady());
|
|
ipcMain.handle('ollama:get-models', async () => await ollamaService.handleGetModels());
|
|
ipcMain.handle('ollama:get-model-suggestions', async () => await ollamaService.handleGetModelSuggestions());
|
|
ipcMain.handle('ollama:pull-model', async (event, modelName) => await ollamaService.handlePullModel(event, modelName));
|
|
ipcMain.handle('ollama:is-model-installed', async (event, modelName) => await ollamaService.handleIsModelInstalled(modelName));
|
|
ipcMain.handle('ollama:warm-up-model', async (event, modelName) => await ollamaService.handleWarmUpModel(modelName));
|
|
ipcMain.handle('ollama:auto-warm-up', async () => await ollamaService.handleAutoWarmUp());
|
|
ipcMain.handle('ollama:get-warm-up-status', async () => await ollamaService.handleGetWarmUpStatus());
|
|
ipcMain.handle('ollama:shutdown', async (event, force = false) => await ollamaService.handleShutdown(event, force));
|
|
|
|
// Ask
|
|
ipcMain.handle('ask:sendQuestionFromAsk', async (event, userPrompt) => await askService.sendMessage(userPrompt));
|
|
ipcMain.handle('ask:sendQuestionFromSummary', async (event, userPrompt) => await askService.sendMessage(userPrompt));
|
|
ipcMain.handle('ask:toggleAskButton', async () => await askService.toggleAskButton());
|
|
ipcMain.handle('stop-screen-capture', async () => askService.handleStopScreenCapture());
|
|
|
|
// Listen
|
|
ipcMain.handle('send-audio-content', async (event, { data, mimeType }) => await listenService.handleSendAudioContent(data, mimeType));
|
|
ipcMain.handle('send-system-audio-content', async (event, { data, mimeType }) => {
|
|
const result = await listenService.sttService.sendSystemAudioContent(data, mimeType);
|
|
if(result.success) {
|
|
listenService.sendToRenderer('system-audio-data', { data });
|
|
}
|
|
return result;
|
|
});
|
|
ipcMain.handle('start-macos-audio', async () => await listenService.handleStartMacosAudio());
|
|
ipcMain.handle('stop-macos-audio', async () => await listenService.handleStopMacosAudio());
|
|
ipcMain.handle('update-google-search-setting', async (event, enabled) => await listenService.handleUpdateGoogleSearchSetting(enabled));
|
|
ipcMain.handle('listen:changeSession', async (event, listenButtonText) => {
|
|
console.log('[FeatureBridge] listen:changeSession from mainheader', listenButtonText);
|
|
try {
|
|
await listenService.handleListenRequest(listenButtonText);
|
|
return { success: true };
|
|
} catch (error) {
|
|
console.error('[FeatureBridge] listen:changeSession failed', error.message);
|
|
return { success: false, error: error.message };
|
|
}
|
|
});
|
|
|
|
|
|
|
|
// ModelStateService
|
|
ipcMain.handle('model:validate-key', async (e, { provider, key }) => await modelStateService.handleValidateKey(provider, key));
|
|
ipcMain.handle('model:get-all-keys', () => modelStateService.getAllApiKeys());
|
|
ipcMain.handle('model:set-api-key', async (e, { provider, key }) => await modelStateService.setApiKey(provider, key));
|
|
ipcMain.handle('model:remove-api-key', async (e, { provider }) => await modelStateService.handleRemoveApiKey(provider));
|
|
ipcMain.handle('model:get-selected-models', () => modelStateService.getSelectedModels());
|
|
ipcMain.handle('model:set-selected-model', async (e, { type, modelId }) => await modelStateService.handleSetSelectedModel(type, modelId));
|
|
ipcMain.handle('model:get-available-models', (e, { type }) => modelStateService.getAvailableModels(type));
|
|
ipcMain.handle('model:are-providers-configured', () => modelStateService.areProvidersConfigured());
|
|
ipcMain.handle('model:get-current-model-info', (e, { type }) => modelStateService.getCurrentModelInfo(type));
|
|
ipcMain.handle('model:get-provider-config', () => modelStateService.getProviderConfig());
|
|
|
|
|
|
|
|
console.log('[FeatureBridge] Initialized with all feature handlers.');
|
|
},
|
|
|
|
// Renderer로 상태를 전송
|
|
sendAskProgress(win, progress) {
|
|
win.webContents.send('feature:ask:progress', progress);
|
|
},
|
|
}; |