get/set provider priority

This commit is contained in:
Brandon Thomas committed 2025-06-27 19:47:44 -04:00
1 parent 2b5bedf131
commit 068ff6ac10
8 files changed
+88 -2

No files matched your search

@@ -4,7 +4,6 @@ use crate::core::commands::enqueue::video::internal_video_error::InternalVideoEr
use crate::core::commands::response::failure_response_wrapper::{CommandErrorResponseWrapper, CommandErrorStatus};
use crate::core::commands::response::shorthand::Response;
use crate::core::commands::response::success_response_wrapper::SerializeMarker;
use crate::core::events::sendable_event_trait::SendableEvent;
use crate::core::model::video_models::VideoModel;
use crate::core::state::data_dir::app_data_root::AppDataRoot;
use crate::core::state::data_dir::trait_data_subdir::DataSubdir;
@@ -3,4 +3,5 @@ pub mod enqueue;
pub mod flip_image;
pub mod get_app_info_command;
pub mod platform_info_command;
pub mod providers;
pub mod response;
@@ -0,0 +1,33 @@
use crate::core::commands::response::shorthand::ResponseOrErrorMessage;
use crate::core::commands::response::success_response_wrapper::SerializeMarker;
use crate::core::state::app_preferences::app_preferences_manager::AppPreferencesManager;
use crate::core::state::app_preferences::preferred_download_directory::PreferredDownloadDirectory;
use crate::core::state::provider_priority::{Provider, ProviderPriorityStore};
use errors::AnyhowResult;
use log::{error, info};
use serde_derive::Serialize;
use tauri::{AppHandle, State};
#[derive(Serialize)]
pub struct GetProviderOrderResponse {
pub providers: Vec<Provider>,
}
impl SerializeMarker for GetProviderOrderResponse{}
#[tauri::command]
pub async fn get_provider_order_command(
provider_priority_store: State<'_, ProviderPriorityStore>,
) -> ResponseOrErrorMessage<GetProviderOrderResponse> {
info!("get_provider_order_command called");
let providers = provider_priority_store.get_priority()
.map_err(|err| {
error!("Failed to get provider order: {:?}", err);
"Failed to retrieve provider order"
})?;
Ok(GetProviderOrderResponse {
providers,
}.into())
}
@@ -0,0 +1,2 @@
pub mod get_provider_order_command;
pub mod set_provider_order_command;
@@ -0,0 +1,31 @@
use crate::core::commands::response::shorthand::{ResponseOrErrorMessage, SuccessOrErrorMessage};
use crate::core::commands::response::success_response_wrapper::SerializeMarker;
use crate::core::model::image_models::ImageModel;
use crate::core::state::app_preferences::app_preferences_manager::AppPreferencesManager;
use crate::core::state::app_preferences::preferred_download_directory::PreferredDownloadDirectory;
use crate::core::state::provider_priority::{Provider, ProviderPriorityStore};
use errors::AnyhowResult;
use log::{error, info};
use serde_derive::{Deserialize, Serialize};
use tauri::{AppHandle, State};
#[derive(Deserialize)]
pub struct SetProviderOrderRequest {
pub providers: Vec<Provider>,
}
#[tauri::command]
pub async fn set_provider_order_command(
request: SetProviderOrderRequest,
provider_priority_store: State<'_, ProviderPriorityStore>,
) -> SuccessOrErrorMessage {
info!("set_provider_order_command called");
provider_priority_store.set_priority(&request.providers)
.map_err(|err| {
error!("Failed to set provider order: {:?}", err);
"Failed to set provider order"
})?;
Ok(().into())
}
@@ -30,3 +30,19 @@ pub type Response<SuccessPayload, ErrType, ErrPayload> =
/// No inner payloads for this type. Just strings as messages.
pub type SimpleResponse = Response<(), (), ()>;
/// Either an empty success payload or error message.
pub type SuccessOrErrorMessage =
Result<CommandSuccessResponseWrapper<()>, CommandErrorResponseWrapper<(), ()>>;
/// Either a success or error message.
pub type ResponseOrErrorMessage<SuccessPayload> =
Result<CommandSuccessResponseWrapper<SuccessPayload>, CommandErrorResponseWrapper<(), ()>>;
/// Either a success or error type.
pub type ResponseOrErrorType<SuccessPayload, ErrType> =
Result<CommandSuccessResponseWrapper<SuccessPayload>, CommandErrorResponseWrapper<ErrType, ()>>;
/// Either a success or error payload.
pub type ResponseOrError<SuccessPayload, ErrPayload> =
Result<CommandSuccessResponseWrapper<SuccessPayload>, CommandErrorResponseWrapper<(), ErrPayload>>;
@@ -84,7 +84,7 @@ impl ProviderPriorityStore {
}
}
pub fn set_priority(&mut self, ordered_list: &[Provider]) -> AnyhowResult<()> {
pub fn set_priority(&self, ordered_list: &[Provider]) -> AnyhowResult<()> {
match self.provider_priority.write() {
Err(err) => {
Err(anyhow::anyhow!("Failed to acquire write lock on provider priority: {}", err))
+4
View File
@@ -11,6 +11,8 @@ use crate::core::commands::enqueue::video::enqueue_image_to_video_command::enque
use crate::core::commands::flip_image::flip_image;
use crate::core::commands::get_app_info_command::get_app_info_command;
use crate::core::commands::platform_info_command::platform_info_command;
use crate::core::commands::providers::get_provider_order_command::get_provider_order_command;
use crate::core::commands::providers::set_provider_order_command::set_provider_order_command;
use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs;
use crate::core::state::app_preferences::app_preferences_manager::load_app_preferences_or_default;
use crate::core::state::data_dir::app_data_root::AppDataRoot;
@@ -197,6 +199,8 @@ pub fn run() {
get_app_info_command,
get_app_preferences_command,
get_fal_api_key_command,
get_provider_order_command,
set_provider_order_command,
open_sora_login_command,
platform_info_command,
set_fal_api_key_command,