diff --git a/README.md b/README.md index ba101b4..9c2bf4d 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ YouTube

- + w Download VoiceInk diff --git a/VoiceInk.xcodeproj/project.pbxproj b/VoiceInk.xcodeproj/project.pbxproj index ba41428..0b945f0 100644 --- a/VoiceInk.xcodeproj/project.pbxproj +++ b/VoiceInk.xcodeproj/project.pbxproj @@ -468,7 +468,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 95; + CURRENT_PROJECT_VERSION = 96; DEVELOPMENT_ASSET_PATHS = "\"VoiceInk/Preview Content\""; DEVELOPMENT_TEAM = V6J6A3VWY2; ENABLE_HARDENED_RUNTIME = YES; @@ -483,7 +483,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 14.0; - MARKETING_VERSION = 0.95; + MARKETING_VERSION = 0.96; PRODUCT_BUNDLE_IDENTIFIER = com.prakashjoshipax.VoiceInk; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -501,7 +501,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 95; + CURRENT_PROJECT_VERSION = 96; DEVELOPMENT_ASSET_PATHS = "\"VoiceInk/Preview Content\""; DEVELOPMENT_TEAM = V6J6A3VWY2; ENABLE_HARDENED_RUNTIME = YES; @@ -516,7 +516,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 14.0; - MARKETING_VERSION = 0.95; + MARKETING_VERSION = 0.96; PRODUCT_BUNDLE_IDENTIFIER = com.prakashjoshipax.VoiceInk; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/VoiceInk/Models/PowerModeConfig.swift b/VoiceInk/Models/PowerModeConfig.swift index e932402..7455e27 100644 --- a/VoiceInk/Models/PowerModeConfig.swift +++ b/VoiceInk/Models/PowerModeConfig.swift @@ -30,11 +30,16 @@ class PowerModeManager: ObservableObject { static let shared = PowerModeManager() @Published var configurations: [PowerModeConfig] = [] @Published var defaultConfig: PowerModeConfig + @Published var isPowerModeEnabled: Bool private let configKey = "powerModeConfigurations" private let defaultConfigKey = "defaultPowerModeConfig" + private let powerModeEnabledKey = "isPowerModeEnabled" private init() { + // Load power mode enabled state + self.isPowerModeEnabled = UserDefaults.standard.bool(forKey: powerModeEnabledKey) + // Initialize default config with default values if let data = UserDefaults.standard.data(forKey: defaultConfigKey), let config = try? JSONDecoder().decode(PowerModeConfig.self, from: data) { @@ -150,4 +155,9 @@ class PowerModeManager: ObservableObject { } } } + + // Save power mode enabled state + func savePowerModeEnabled() { + UserDefaults.standard.set(isPowerModeEnabled, forKey: powerModeEnabledKey) + } } \ No newline at end of file diff --git a/VoiceInk/Services/ActiveWindowService.swift b/VoiceInk/Services/ActiveWindowService.swift index 4e3a2a0..c53340b 100644 --- a/VoiceInk/Services/ActiveWindowService.swift +++ b/VoiceInk/Services/ActiveWindowService.swift @@ -57,22 +57,29 @@ class ActiveWindowService: ObservableObject { guard let enhancementService = enhancementService else { return } await MainActor.run { - // Apply AI enhancement settings - enhancementService.isEnhancementEnabled = config.isAIEnhancementEnabled - - // Handle prompt selection - if config.isAIEnhancementEnabled { - if let promptId = config.selectedPrompt, - let uuid = UUID(uuidString: promptId) { - print("🎯 Applied Prompt: \(enhancementService.allPrompts.first(where: { $0.id == uuid })?.title ?? "Unknown")") - enhancementService.selectedPromptId = uuid - } else { - // Auto-select first prompt if none is selected and AI is enabled - if let firstPrompt = enhancementService.allPrompts.first { - print("🎯 Auto-selected Prompt: \(firstPrompt.title)") - enhancementService.selectedPromptId = firstPrompt.id + // Only apply settings if power mode is enabled globally + if PowerModeManager.shared.isPowerModeEnabled { + // Apply AI enhancement settings + enhancementService.isEnhancementEnabled = config.isAIEnhancementEnabled + + // Handle prompt selection + if config.isAIEnhancementEnabled { + if let promptId = config.selectedPrompt, + let uuid = UUID(uuidString: promptId) { + print("🎯 Applied Prompt: \(enhancementService.allPrompts.first(where: { $0.id == uuid })?.title ?? "Unknown")") + enhancementService.selectedPromptId = uuid + } else { + // Auto-select first prompt if none is selected and AI is enabled + if let firstPrompt = enhancementService.allPrompts.first { + print("🎯 Auto-selected Prompt: \(firstPrompt.title)") + enhancementService.selectedPromptId = firstPrompt.id + } } } + } else { + // If power mode is disabled globally, disable AI enhancement + enhancementService.isEnhancementEnabled = false + print("🔌 Power Mode is disabled globally") } } } diff --git a/VoiceInk/Views/PowerModeView.swift b/VoiceInk/Views/PowerModeView.swift index c0d803e..4646a91 100644 --- a/VoiceInk/Views/PowerModeView.swift +++ b/VoiceInk/Views/PowerModeView.swift @@ -349,61 +349,80 @@ struct PowerModeView: View { subtitle: "See Power Mode in action" ) - // Default Configuration Section + // Power Mode Toggle Section VStack(alignment: .leading, spacing: 16) { - Text("Default Configuration") - .font(.headline) - - ConfiguredAppRow( - config: powerModeManager.defaultConfig, - isEditing: configurationMode?.isEditingDefault ?? false, - action: { - configurationMode = .editDefault(powerModeManager.defaultConfig) - showingConfigSheet = true - } - ) - .background(RoundedRectangle(cornerRadius: 8) - .fill(Color(.windowBackgroundColor).opacity(0.4))) - .overlay(RoundedRectangle(cornerRadius: 8) - .stroke(Color.accentColor.opacity(0.2), lineWidth: 1)) + HStack { + Text("Enable Power Mode") + .font(.headline) + Spacer() + Toggle("", isOn: $powerModeManager.isPowerModeEnabled) + .toggleStyle(SwitchToggleStyle(tint: .blue)) + .labelsHidden() + .scaleEffect(1.2) + .onChange(of: powerModeManager.isPowerModeEnabled) { _ in + powerModeManager.savePowerModeEnabled() + } + } } .padding(.horizontal) - // Apps Section - VStack(spacing: 16) { - if powerModeManager.configurations.isEmpty { - PowerModeEmptyStateView( - showAddModal: $showingConfigSheet, - configMode: $configurationMode - ) - } else { - Text("Power Mode Configurations") + if powerModeManager.isPowerModeEnabled { + // Default Configuration Section + VStack(alignment: .leading, spacing: 16) { + Text("Default Configuration") .font(.headline) - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.horizontal) - ConfiguredAppsGrid(powerModeManager: powerModeManager) - - Button(action: { - print("🔍 Add button clicked - Setting config mode and showing sheet") - configurationMode = .add - print("🔍 Configuration mode set to: \(String(describing: configurationMode))") - showingConfigSheet = true - print("🔍 showingConfigSheet set to: \(showingConfigSheet)") - }) { - HStack(spacing: 6) { - Image(systemName: "plus") - .font(.system(size: 12, weight: .semibold)) - Text("Add New Mode") - .font(.system(size: 13, weight: .medium)) + ConfiguredAppRow( + config: powerModeManager.defaultConfig, + isEditing: configurationMode?.isEditingDefault ?? false, + action: { + configurationMode = .editDefault(powerModeManager.defaultConfig) + showingConfigSheet = true } + ) + .background(RoundedRectangle(cornerRadius: 8) + .fill(Color(.windowBackgroundColor).opacity(0.4))) + .overlay(RoundedRectangle(cornerRadius: 8) + .stroke(Color.accentColor.opacity(0.2), lineWidth: 1)) + } + .padding(.horizontal) + + // Apps Section + VStack(spacing: 16) { + if powerModeManager.configurations.isEmpty { + PowerModeEmptyStateView( + showAddModal: $showingConfigSheet, + configMode: $configurationMode + ) + } else { + Text("Power Mode Configurations") + .font(.headline) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal) + + ConfiguredAppsGrid(powerModeManager: powerModeManager) + + Button(action: { + print("🔍 Add button clicked - Setting config mode and showing sheet") + configurationMode = .add + print("🔍 Configuration mode set to: \(String(describing: configurationMode))") + showingConfigSheet = true + print("🔍 showingConfigSheet set to: \(showingConfigSheet)") + }) { + HStack(spacing: 6) { + Image(systemName: "plus") + .font(.system(size: 12, weight: .semibold)) + Text("Add New Mode") + .font(.system(size: 13, weight: .medium)) + } + } + .buttonStyle(.borderedProminent) + .controlSize(.regular) + .tint(Color(NSColor.controlAccentColor)) + .frame(maxWidth: .infinity, alignment: .center) + .help("Add a new mode") + .padding(.top, 12) } - .buttonStyle(.borderedProminent) - .controlSize(.regular) - .tint(Color(NSColor.controlAccentColor)) - .frame(maxWidth: .infinity, alignment: .center) - .help("Add a new mode") - .padding(.top, 12) } } } diff --git a/appcast.xml b/appcast.xml index 91b817e..22e2872 100644 --- a/appcast.xml +++ b/appcast.xml @@ -3,19 +3,18 @@ VoiceInk Releases - 0.95 + 0.96 Thu, 20 Feb 2025 07:51:55 +0545 - 95 - 0.95 + 96 + 0.96 14.0 What's New in Version 0.95 🚀⚡ +

What's New in Version 0.96 🚀⚡

    -
  • More stats in dashboard
  • -
  • Minor fixes & Improvements
  • +
  • Added Power Mode Toggle option
]]>
- +