Fix audio input mode persistence
This commit is contained in:
parent
8bdd4f5d3b
commit
7aef8f04a6
@ -7,8 +7,8 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
E1362A1D2DF893B600E86C6E /* whisper.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E136D0102DA3EE57000E1E8A /* whisper.xcframework */; };
|
E131EA9E2DFEF894009E79D8 /* whisper.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E11CB51D2DB1F8AF00F9F3ED /* whisper.xcframework */; };
|
||||||
E1362A1E2DF893B600E86C6E /* whisper.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E136D0102DA3EE57000E1E8A /* whisper.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
E131EA9F2DFEF894009E79D8 /* whisper.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E11CB51D2DB1F8AF00F9F3ED /* whisper.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
E1A261122CC143AC00B233D1 /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = E1A261112CC143AC00B233D1 /* KeyboardShortcuts */; };
|
E1A261122CC143AC00B233D1 /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = E1A261112CC143AC00B233D1 /* KeyboardShortcuts */; };
|
||||||
E1ADD45A2CC5352A00303ECB /* LaunchAtLogin in Frameworks */ = {isa = PBXBuildFile; productRef = E1ADD4592CC5352A00303ECB /* LaunchAtLogin */; };
|
E1ADD45A2CC5352A00303ECB /* LaunchAtLogin in Frameworks */ = {isa = PBXBuildFile; productRef = E1ADD4592CC5352A00303ECB /* LaunchAtLogin */; };
|
||||||
E1ADD45F2CC544F100303ECB /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E1ADD45E2CC544F100303ECB /* Sparkle */; };
|
E1ADD45F2CC544F100303ECB /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = E1ADD45E2CC544F100303ECB /* Sparkle */; };
|
||||||
@ -33,13 +33,13 @@
|
|||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
E1362A1F2DF893B600E86C6E /* Embed Frameworks */ = {
|
E131EAA02DFEF894009E79D8 /* Embed Frameworks */ = {
|
||||||
isa = PBXCopyFilesBuildPhase;
|
isa = PBXCopyFilesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
dstPath = "";
|
dstPath = "";
|
||||||
dstSubfolderSpec = 10;
|
dstSubfolderSpec = 10;
|
||||||
files = (
|
files = (
|
||||||
E1362A1E2DF893B600E86C6E /* whisper.xcframework in Embed Frameworks */,
|
E131EA9F2DFEF894009E79D8 /* whisper.xcframework in Embed Frameworks */,
|
||||||
);
|
);
|
||||||
name = "Embed Frameworks";
|
name = "Embed Frameworks";
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -80,7 +80,7 @@
|
|||||||
E1ADD45A2CC5352A00303ECB /* LaunchAtLogin in Frameworks */,
|
E1ADD45A2CC5352A00303ECB /* LaunchAtLogin in Frameworks */,
|
||||||
E1ADD45F2CC544F100303ECB /* Sparkle in Frameworks */,
|
E1ADD45F2CC544F100303ECB /* Sparkle in Frameworks */,
|
||||||
E1A261122CC143AC00B233D1 /* KeyboardShortcuts in Frameworks */,
|
E1A261122CC143AC00B233D1 /* KeyboardShortcuts in Frameworks */,
|
||||||
E1362A1D2DF893B600E86C6E /* whisper.xcframework in Frameworks */,
|
E131EA9E2DFEF894009E79D8 /* whisper.xcframework in Frameworks */,
|
||||||
E1F5FA7A2DA6CBF900B1FD8A /* Zip in Frameworks */,
|
E1F5FA7A2DA6CBF900B1FD8A /* Zip in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -142,7 +142,7 @@
|
|||||||
E11473AC2CBE0F0A00318EE4 /* Sources */,
|
E11473AC2CBE0F0A00318EE4 /* Sources */,
|
||||||
E11473AD2CBE0F0A00318EE4 /* Frameworks */,
|
E11473AD2CBE0F0A00318EE4 /* Frameworks */,
|
||||||
E11473AE2CBE0F0A00318EE4 /* Resources */,
|
E11473AE2CBE0F0A00318EE4 /* Resources */,
|
||||||
E1362A1F2DF893B600E86C6E /* Embed Frameworks */,
|
E131EAA02DFEF894009E79D8 /* Embed Frameworks */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
|
|||||||
@ -86,8 +86,13 @@ class AudioDeviceManager: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func fallbackToDefaultDevice() {
|
private func fallbackToDefaultDevice() {
|
||||||
selectInputMode(.systemDefault)
|
logger.info("Temporarily falling back to system default input device – user preference remains intact.")
|
||||||
logger.info("Switched to system default audio input mode due to fallback.")
|
|
||||||
|
if let currentID = selectedDeviceID, !isDeviceAvailable(currentID) {
|
||||||
|
selectedDeviceID = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyDeviceChange()
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadAvailableDevices(completion: (() -> Void)? = nil) {
|
func loadAvailableDevices(completion: (() -> Void)? = nil) {
|
||||||
@ -244,7 +249,11 @@ class AudioDeviceManager: ObservableObject {
|
|||||||
case .systemDefault:
|
case .systemDefault:
|
||||||
return fallbackDeviceID ?? 0
|
return fallbackDeviceID ?? 0
|
||||||
case .custom:
|
case .custom:
|
||||||
return selectedDeviceID ?? fallbackDeviceID ?? 0
|
if let id = selectedDeviceID, isDeviceAvailable(id) {
|
||||||
|
return id
|
||||||
|
} else {
|
||||||
|
return fallbackDeviceID ?? 0
|
||||||
|
}
|
||||||
case .prioritized:
|
case .prioritized:
|
||||||
let sortedDevices = prioritizedDevices.sorted { $0.priority < $1.priority }
|
let sortedDevices = prioritizedDevices.sorted { $0.priority < $1.priority }
|
||||||
for device in sortedDevices {
|
for device in sortedDevices {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user