mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-08 11:01:35 +00:00
add "frontend_subscriber_id" to image-to-object
This commit is contained in:
1 parent
73a6d0494b
commit
3632fb833e
5 files changed
+65
-11
No files matched your search
+23
-2
@@ -17,6 +17,7 @@ use crate::services::storyteller::state::storyteller_credential_manager::Storyte
|
||||
use log::{error, info, warn};
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
use tauri::{AppHandle, State};
|
||||
use enums::tauri::ux::tauri_command_caller::TauriCommandCaller;
|
||||
use tokens::tokens::media_files::MediaFileToken;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
@@ -27,6 +28,21 @@ pub struct EnqueueImageTo3dObjectRequest {
|
||||
|
||||
/// The model to use.
|
||||
pub model: Option<EnqueueImageTo3dObjectModel>,
|
||||
|
||||
/// OPTIONAL.
|
||||
/// Name of the frontend caller.
|
||||
/// We'll use this to selectively trigger events.
|
||||
pub frontend_caller: Option<TauriCommandCaller>,
|
||||
|
||||
/// OPTIONAL.
|
||||
/// A frontend-defined identifier that we'll send back to the frontend
|
||||
/// as a Tauri event on task completion.
|
||||
pub frontend_subscriber_id: Option<String>,
|
||||
|
||||
/// OPTIONAL.
|
||||
/// A frontend-defined payload that we'll send back to the frontend
|
||||
/// as a Tauri event on task completion.
|
||||
pub frontend_subscriber_payload: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Debug, Copy, Clone)]
|
||||
@@ -159,7 +175,7 @@ pub async fn handle_request(
|
||||
) -> Result<TaskEnqueueSuccess, GenerateError> {
|
||||
|
||||
let result = handle_object(
|
||||
request,
|
||||
&request,
|
||||
&app,
|
||||
&app_env_configs,
|
||||
&app_data_root,
|
||||
@@ -173,7 +189,12 @@ pub async fn handle_request(
|
||||
};
|
||||
|
||||
let result = success_event
|
||||
.insert_into_task_database(task_database)
|
||||
.insert_into_task_database_with_frontend_payload(
|
||||
task_database,
|
||||
request.frontend_caller.clone(),
|
||||
request.frontend_subscriber_id.as_deref(),
|
||||
request.frontend_subscriber_payload.as_deref(),
|
||||
)
|
||||
.await;
|
||||
|
||||
if let Err(err) = result {
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ use crate::services::storyteller::state::storyteller_credential_manager::Storyte
|
||||
use tauri::AppHandle;
|
||||
|
||||
pub async fn handle_object(
|
||||
request: EnqueueImageTo3dObjectRequest,
|
||||
request: &EnqueueImageTo3dObjectRequest,
|
||||
app: &AppHandle,
|
||||
app_env_configs: &AppEnvConfigs,
|
||||
app_data_root: &AppDataRoot,
|
||||
|
||||
+3
-3
@@ -19,7 +19,7 @@ use storyteller_client::endpoints::generate::object::generate_hunyuan_3d_2_1_ima
|
||||
use tauri::AppHandle;
|
||||
|
||||
pub async fn handle_object_artcraft(
|
||||
request: EnqueueImageTo3dObjectRequest,
|
||||
request: &EnqueueImageTo3dObjectRequest,
|
||||
app: &AppHandle,
|
||||
app_env_configs: &AppEnvConfigs,
|
||||
app_data_root: &AppDataRoot,
|
||||
@@ -59,7 +59,7 @@ pub async fn handle_object_artcraft(
|
||||
used_model = Some(GenerationModel::Hunyuan3d2_0);
|
||||
let request = GenerateHunyuan20ImageTo3dRequest {
|
||||
uuid_idempotency_token,
|
||||
media_file_token: request.image_media_token,
|
||||
media_file_token: request.image_media_token.clone(),
|
||||
};
|
||||
let result = generate_hunyuan3d_2_0_image_to_3d(
|
||||
&app_env_configs.storyteller_host,
|
||||
@@ -82,7 +82,7 @@ pub async fn handle_object_artcraft(
|
||||
used_model = Some(GenerationModel::Hunyuan3d2_1);
|
||||
let request = GenerateHunyuan21ImageTo3dRequest {
|
||||
uuid_idempotency_token,
|
||||
media_file_token: request.image_media_token,
|
||||
media_file_token: request.image_media_token.clone(),
|
||||
};
|
||||
let result = generate_hunyuan3d_2_1_image_to_3d(
|
||||
&app_env_configs.storyteller_host,
|
||||
|
||||
@@ -21,6 +21,8 @@ pub enum TauriCommandCaller {
|
||||
TextToImage,
|
||||
/// The image-to-video page
|
||||
ImageToVideo,
|
||||
/// A mini-app (doesn't specify which one)
|
||||
MiniApp,
|
||||
}
|
||||
|
||||
impl_enum_display_and_debug_using_to_str!(TauriCommandCaller);
|
||||
@@ -36,6 +38,7 @@ impl TauriCommandCaller {
|
||||
Self::ImageEditor => "image_editor",
|
||||
Self::TextToImage => "text_to_image",
|
||||
Self::ImageToVideo => "image_to_video",
|
||||
Self::MiniApp => "mini_app",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +48,7 @@ impl TauriCommandCaller {
|
||||
"image_editor" => Ok(Self::ImageEditor),
|
||||
"text_to_image" => Ok(Self::TextToImage),
|
||||
"image_to_video" => Ok(Self::ImageToVideo),
|
||||
"mini_app" => Ok(Self::MiniApp),
|
||||
_ => Err(EnumError::CouldNotConvertFromString(value.to_string())),
|
||||
}
|
||||
}
|
||||
@@ -57,6 +61,7 @@ impl TauriCommandCaller {
|
||||
Self::ImageEditor,
|
||||
Self::TextToImage,
|
||||
Self::ImageToVideo,
|
||||
Self::MiniApp,
|
||||
])
|
||||
}
|
||||
}
|
||||
@@ -76,6 +81,7 @@ mod tests {
|
||||
assert_serialization(TauriCommandCaller::ImageEditor, "image_editor");
|
||||
assert_serialization(TauriCommandCaller::TextToImage, "text_to_image");
|
||||
assert_serialization(TauriCommandCaller::ImageToVideo, "image_to_video");
|
||||
assert_serialization(TauriCommandCaller::MiniApp, "mini_app");
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -84,6 +90,7 @@ mod tests {
|
||||
assert_eq!(TauriCommandCaller::ImageEditor.to_str(), "image_editor");
|
||||
assert_eq!(TauriCommandCaller::TextToImage.to_str(), "text_to_image");
|
||||
assert_eq!(TauriCommandCaller::ImageToVideo.to_str(), "image_to_video");
|
||||
assert_eq!(TauriCommandCaller::MiniApp.to_str(), "mini_app");
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -92,6 +99,7 @@ mod tests {
|
||||
assert_eq!(TauriCommandCaller::from_str("image_editor").unwrap(), TauriCommandCaller::ImageEditor);
|
||||
assert_eq!(TauriCommandCaller::from_str("text_to_image").unwrap(), TauriCommandCaller::TextToImage);
|
||||
assert_eq!(TauriCommandCaller::from_str("image_to_video").unwrap(), TauriCommandCaller::ImageToVideo);
|
||||
assert_eq!(TauriCommandCaller::from_str("mini_app").unwrap(), TauriCommandCaller::MiniApp);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -108,11 +116,12 @@ mod tests {
|
||||
#[test]
|
||||
fn all_variants() {
|
||||
let mut variants = TauriCommandCaller::all_variants();
|
||||
assert_eq!(variants.len(), 4);
|
||||
assert_eq!(variants.len(), 5);
|
||||
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::Canvas));
|
||||
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::ImageEditor));
|
||||
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::TextToImage));
|
||||
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::ImageToVideo));
|
||||
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::MiniApp));
|
||||
assert_eq!(variants.pop_first(), None);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,19 @@ export enum EnqueueImageTo3dObjectErrorType {
|
||||
export interface EnqueueImageTo3dObjectRequest {
|
||||
image_media_token?: string;
|
||||
model?: EnqueueImageTo3dObjectModel;
|
||||
|
||||
// TODO: Actual enum.
|
||||
frontend_caller?: string;
|
||||
|
||||
// Optional frontend state to return later.
|
||||
frontend_subscriber_id?: string;
|
||||
}
|
||||
|
||||
interface EnqueueImageTo3dObjectRequestRaw {
|
||||
image_media_token?: string;
|
||||
model?: EnqueueImageTo3dObjectModel;
|
||||
frontend_caller?: string;
|
||||
frontend_subscriber_id?: string;
|
||||
}
|
||||
|
||||
export enum EnqueueImageTo3dObjectModel {
|
||||
@@ -40,11 +53,22 @@ export interface EnqueueImageTo3dObjectSuccess extends CommandResult {
|
||||
export type EnqueueImageTo3dObjectResult = EnqueueImageTo3dObjectSuccess | EnqueueImageTo3dObjectError;
|
||||
|
||||
export const EnqueueImageTo3dObject = async (request: EnqueueImageTo3dObjectRequest) : Promise<EnqueueImageTo3dObjectResult> => {
|
||||
let mutableRequest : EnqueueImageTo3dObjectRequestRaw = {
|
||||
image_media_token: request.image_media_token,
|
||||
model: request.model,
|
||||
};
|
||||
|
||||
if (!!request.frontend_caller) {
|
||||
mutableRequest.frontend_caller = request.frontend_caller;
|
||||
}
|
||||
|
||||
if (!!request.frontend_subscriber_id) {
|
||||
mutableRequest.frontend_subscriber_id = request.frontend_subscriber_id;
|
||||
}
|
||||
|
||||
let result = await invoke("enqueue_image_to_3d_object_command", {
|
||||
request: {
|
||||
image_media_token: request.image_media_token,
|
||||
model: request.model,
|
||||
}
|
||||
request: mutableRequest,
|
||||
});
|
||||
|
||||
return (result as EnqueueImageTo3dObjectResult);
|
||||
}
|
||||
Reference in new issue
Block a user