Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions openless-all/app/crates/openless-core/src/provider_resolution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,65 @@ pub(crate) async fn resolve_session_provider(
keep_loaded_secs: None,
})
}

#[cfg(test)]
mod tests {
use super::*;
use crate::credentials::{ChannelMutation, CredentialDirectory, InMemoryCredentialStore};

#[tokio::test]
async fn reordered_asr_channel_wins_over_stale_preference() {
let store = Arc::new(InMemoryCredentialStore::default());
let directory = CredentialDirectory::new(store.clone());
for provider_type in ["foundry-local-whisper", "volcengine", "volcengine"] {
directory
.mutate_channel(ChannelMutation::Create {
kind: ChannelKind::Asr,
provider_type: provider_type.into(),
name: provider_type.into(),
})
.await
.unwrap();
}
directory
.mutate_channel(ChannelMutation::Reorder {
kind: ChannelKind::Asr,
ids: vec![
"volcengine-2".into(),
"volcengine".into(),
"foundry-local-whisper".into(),
],
})
.await
.unwrap();
assert_eq!(
directory.active_provider(ProviderSlot::Asr).await.unwrap(),
"volcengine-2"
);

let credential_store: Arc<dyn CredentialStore> = store;
for stale_preference in ["foundry-local-whisper", "volcengine"] {
let resolved = resolve_session_provider(
&credential_store,
ProviderSlot::Asr,
stale_preference,
)
.await
.unwrap();
assert_eq!(resolved.provider_id, "volcengine-2");
assert_eq!(resolved.provider_type, "volcengine");
}
}

#[tokio::test]
async fn empty_asr_selection_uses_legacy_preference_fallback() {
let credential_store: Arc<dyn CredentialStore> =
Arc::new(InMemoryCredentialStore::default());
let resolved =
resolve_session_provider(&credential_store, ProviderSlot::Asr, "volcengine")
.await
.unwrap();
assert_eq!(resolved.provider_id, "volcengine");
assert_eq!(resolved.provider_type, "volcengine");
}
}
2 changes: 1 addition & 1 deletion openless-all/app/src-tauri/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -633,7 +633,7 @@ fn run_desktop() {
#[cfg(not(target_os = "windows"))]
let coordinator = Arc::new(coordinator::Coordinator::new());
let core_backend = coordinator.backend();
// Runtime effects and active-provider mirroring follow Core startup/recovery
// Runtime effects follow Core startup/recovery
// in tauri_events::start; pending restore must not mutate the old vault here.
let builder = tauri::Builder::default();
// macOS:胶囊要叠到别的 app 的全屏 Space 之上,必须是「非激活 NSPanel」(普通
Expand Down
7 changes: 0 additions & 7 deletions openless-all/app/src-tauri/src/tauri_events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,6 @@ pub fn start(app: AppHandle, backend: Arc<OpenLessBackend>) {
return;
}
let preferences = backend.get_preferences();
if !preferences.active_asr_provider.is_empty() {
if let Err(error) =
crate::commands::sync_active_asr_provider_to_vault(&preferences.active_asr_provider)
{
log::warn!("[startup] active ASR provider mirror failed: {error}");
}
}
#[cfg(target_os = "windows")]
{
let target = openless_core::WindowsKeyboardRuntimeTarget::from(&preferences);
Expand Down
Loading