UNPKG

@codejoy/random-learner

Version:

A comprehensive interview preparation and learning companion with AI-powered questions, mock interviews, skill assessments, and company-specific question sets for technical job interviews

240 lines (199 loc) 5.85 kB
const Store = require('electron-store'); class SettingsManager { constructor() { this.store = new Store({ name: 'random-learner-settings', defaults: { openaiApiKey: '', geminiApiKey: '', customPrompt: '', aiProvider: 'openai', // 'openai' or 'gemini' questionSettings: { preferredTopics: ['oops', 'java', 'python', 'ai', 'databases'], preferredLevels: ['beginner', 'intermediate', 'advanced'], useAI: false, mixStaticAndAI: true }, timingSettings: { minInterval: 2 * 60 * 1000, // 2 minutes maxInterval: 10 * 60 * 1000 // 10 minutes }, uiSettings: { alwaysOnTop: true, autoClose: true, autoCloseDelay: 5000 } } }); } // AI Provider Settings setAIProvider(provider) { this.store.set('aiProvider', provider); } getAIProvider() { return this.store.get('aiProvider'); } // OpenAI Settings setOpenAIApiKey(apiKey) { this.store.set('openaiApiKey', apiKey); } getOpenAIApiKey() { return this.store.get('openaiApiKey'); } // Gemini Settings setGeminiApiKey(apiKey) { this.store.set('geminiApiKey', apiKey); } getGeminiApiKey() { return this.store.get('geminiApiKey'); } setCustomPrompt(prompt) { this.store.set('customPrompt', prompt); } getCustomPrompt() { return this.store.get('customPrompt'); } clearCustomPrompt() { this.store.set('customPrompt', ''); } // Question Settings setQuestionSettings(settings) { this.store.set('questionSettings', { ...this.getQuestionSettings(), ...settings }); } getQuestionSettings() { return this.store.get('questionSettings'); } setPreferredTopics(topics) { const settings = this.getQuestionSettings(); settings.preferredTopics = topics; this.store.set('questionSettings', settings); } getPreferredTopics() { return this.getQuestionSettings().preferredTopics; } setPreferredLevels(levels) { const settings = this.getQuestionSettings(); settings.preferredLevels = levels; this.store.set('questionSettings', settings); } getPreferredLevels() { return this.getQuestionSettings().preferredLevels; } setUseAI(useAI) { const settings = this.getQuestionSettings(); settings.useAI = useAI; this.store.set('questionSettings', settings); } getUseAI() { return this.getQuestionSettings().useAI; } // Legacy method for backward compatibility setUseOpenAI(useOpenAI) { this.setUseAI(useOpenAI); } getUseOpenAI() { return this.getUseAI(); } // Timing Settings setTimingSettings(settings) { this.store.set('timingSettings', { ...this.getTimingSettings(), ...settings }); } getTimingSettings() { return this.store.get('timingSettings'); } setQuestionInterval(minInterval, maxInterval) { this.store.set('timingSettings', { minInterval: minInterval * 60 * 1000, // Convert minutes to milliseconds maxInterval: maxInterval * 60 * 1000 }); } getQuestionInterval() { const settings = this.getTimingSettings(); return { minInterval: settings.minInterval / (60 * 1000), // Convert back to minutes maxInterval: settings.maxInterval / (60 * 1000) }; } // UI Settings setUISettings(settings) { this.store.set('uiSettings', { ...this.getUISettings(), ...settings }); } getUISettings() { return this.store.get('uiSettings'); } // Get all settings getAllSettings() { return { openaiApiKey: this.getOpenAIApiKey(), geminiApiKey: this.getGeminiApiKey(), aiProvider: this.getAIProvider(), customPrompt: this.getCustomPrompt(), questionSettings: this.getQuestionSettings(), timingSettings: this.getTimingSettings(), uiSettings: this.getUISettings() }; } // Export settings exportSettings() { const settings = this.getAllSettings(); // Don't export the API keys for security delete settings.openaiApiKey; delete settings.geminiApiKey; return JSON.stringify(settings, null, 2); } // Import settings (excluding API key) importSettings(settingsJSON) { try { const settings = JSON.parse(settingsJSON); if (settings.customPrompt !== undefined) { this.setCustomPrompt(settings.customPrompt); } if (settings.questionSettings) { this.setQuestionSettings(settings.questionSettings); } if (settings.timingSettings) { this.setTimingSettings(settings.timingSettings); } if (settings.uiSettings) { this.setUISettings(settings.uiSettings); } return { success: true }; } catch (error) { return { success: false, error: error.message }; } } // Reset to defaults resetToDefaults() { this.store.clear(); return { success: true }; } // Check if OpenAI is properly configured isOpenAIConfigured() { const apiKey = this.getOpenAIApiKey(); return apiKey && apiKey.trim().length > 0; } // Check if Gemini is properly configured isGeminiConfigured() { const apiKey = this.getGeminiApiKey(); return apiKey && apiKey.trim().length > 0; } // Check if the current AI provider is configured isCurrentAIProviderConfigured() { const provider = this.getAIProvider(); if (provider === 'gemini') { return this.isGeminiConfigured(); } else { return this.isOpenAIConfigured(); } } // Get the current API key for the active provider getCurrentAIApiKey() { const provider = this.getAIProvider(); if (provider === 'gemini') { return this.getGeminiApiKey(); } else { return this.getOpenAIApiKey(); } } } module.exports = SettingsManager;