From 1bff2d94ecdd90a2d3e73f25769d3decf54dd01b Mon Sep 17 00:00:00 2001
From: Beingpax
Date: Sat, 1 Mar 2025 13:24:02 +0545
Subject: [PATCH] feat: Add Power Mode Toggle and update to version 0.96
---
README.md | 2 +-
VoiceInk.xcodeproj/project.pbxproj | 8 +-
VoiceInk/Models/PowerModeConfig.swift | 10 ++
VoiceInk/Services/ActiveWindowService.swift | 35 +++---
VoiceInk/Views/PowerModeView.swift | 113 ++++++++++++--------
appcast.xml | 13 ++-
6 files changed, 108 insertions(+), 73 deletions(-)
diff --git a/README.md b/README.md
index ba101b4..9c2bf4d 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
YouTube
-
+ w
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
]]>
-
+