Skip to content
Merged
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
7 changes: 7 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ opt-level = "s" # Optimize for binary size
strip = true # Remove debug symbols

[dependencies]
argmap = "1.1.2"
clap = { version = "4.5.20", features=["derive"] }
dunce = "1.0.5"
enum_dispatch = "0.3.13"
Expand Down
6 changes: 5 additions & 1 deletion example/basic/manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,18 @@ departments:
blender:
exports:
- .mesh.blend
- .shadergraph.blend
- .animbake.abc

assets:
3d:
prop:
- $template:
departments:
model:
- mesh
- !shot_local mesh
- lod
- test
lookdev:
- shadergraph
- defaultCubeA:
Expand Down
93 changes: 93 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 48 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
description = "my project description";

inputs = {
flake-utils.url = "github:numtide/flake-utils";
};

outputs = { self, blender-bin, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {
system = system;
};

libraries = with pkgs; [
rustc
cargo
rustfmt
rust-analyzer
clippy
nodejs
webkitgtk_4_1
pkg-config
libsoup_3
gtk3
webkitgtk_4_1
cairo
gdk-pixbuf
libsoup_3
gsettings-desktop-schemas
glib
];

in
{
devShell = pkgs.mkShell {
buildInputs = libraries;
LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath libraries}";
SHELL = "${pkgs.bashInteractive}/bin/bash";
WEBKIT_DISABLE_COMPOSITING_MODE=1;

# see: https://github.com/tauri-apps/tauri/issues/7354
shellHook = with pkgs; ''
export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS;
'';
};
}
);
}
4 changes: 2 additions & 2 deletions integration/common/conduct.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ def get_summary(self):
return summary

def setup(self, file_format):
args = ["dialog", "create_setup", "--file-format", file_format]
args = ["dialog", "create_setup", "--", "--file-format", file_format]
return self.run_process(args)

def dialog_load_asset(self, department, shot=None, asset=None ):
args = ["dialog", "load_asset", "--program", self.current_program, "--department", department]
args = ["dialog", "load_asset", "--", "--program", self.current_program, "--department", department]
if shot != None and shot != "":
args.append("--shot")
args.append(shot)
Expand Down
26 changes: 10 additions & 16 deletions src/core/commands/command_dialog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,13 @@ use query_string_builder::QueryString;
use crate::{core::project::Project, gui};
use serde::{Deserialize, Serialize};

use super::{args::CommonArgs, error::CommandError, Command};
use super::{error::CommandError, Command};

#[derive(Debug, Args, Serialize, Deserialize)]
pub struct DialogArgs {
#[command(flatten)]
#[serde(flatten)]
pub common: CommonArgs,

kind: String,

#[arg(short, long)]
program: Option<String>,

#[arg(short, long)]
file_format: Option<String>,
extras: Vec<String>,
}

pub struct DialogOptions {
Expand All @@ -35,12 +27,14 @@ impl Command for DialogArgs {
self,
project: &RwLock<Project>,
) -> Result<std::option::Option<serde_json::Value>, CommandError> {
let args = QueryString::dynamic()
.with_opt_value("department", self.common.department)
.with_opt_value("asset", self.common.asset)
.with_opt_value("shot", self.common.shot)
.with_opt_value("program", self.program)
.with_opt_value("file_format", self.file_format);
let (_, argv) = argmap::parse(self.extras.iter());
log::debug!("Got extras: {:?}", argv);

let mut args = QueryString::dynamic();
for pair in argv.iter() {
let value = pair.1.get(0).unwrap();
_ = args.push(pair.0.clone(), value.clone())
}

gui::gui(
project.read().unwrap().clone(),
Expand Down
36 changes: 33 additions & 3 deletions ui/src/api.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AssetTreeCategory, ListAssetsResult, ListShotsResult, SetupResult, SummaryResponse } from "./bindings/bindings_gen";
import { AssetTreeCategory, ListAssetsResult, ListElementsResult, ListExportFormatsResult, ListShotsResult, SetupResult, SummaryResponse } from "./bindings/bindings_gen";


declare global {
Expand Down Expand Up @@ -45,8 +45,15 @@ export async function getSummary(): Promise<SummaryResponse> {
return await result.json() as SummaryResponse
}

export async function doExport(): Promise<SummaryResponse> {
let result = await get("api/v1/command/export?asset=suzanneA&department=model")
export async function doExport(department: string, asset: string, element: string, shot: string | null | undefined, from: string, file_format: string): Promise<SummaryResponse> {
let result = await get("api/v1/command/export", {
"department": department,
"asset": asset,
"element": element,
"shot": shot,
"from": from,
"file_format": file_format
})
return await result.json() as SummaryResponse
}

Expand All @@ -72,6 +79,29 @@ export async function listAssets(department_filter: null | string = null): Promi
return await result.json() as ListAssetsResult
}

export async function listElements(asset: string, department: null | string = null, load: boolean = false): Promise<ListElementsResult> {
let result = await get("api/v1/command/list_elements", {
"department": department,
"asset": asset,
"load": load,
})

let data = await result.json()
console.log(data)
return data as ListElementsResult
}

export async function listExportFormats(department: string, program: string,): Promise<ListExportFormatsResult> {
let result = await get("api/v1/command/list_export_formats", {
"department": department,
"from": program
})

let data = await result.json()
console.log(data)
return data as ListExportFormatsResult
}

export async function getAssetTree(department_filter: null | string = null): Promise<AssetTreeCategory> {
let result = await get("api/v1/command/get_asset_tree", {
"department": department_filter
Expand Down
2 changes: 2 additions & 0 deletions ui/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import DialogCreateSetup from './pages/dialogs/create_setup';
import DialogLoadAsset from './pages/dialogs/load_asset';
import { ColorModeProvider } from '@kobalte/core/color-mode';
import { Component } from 'solid-js';
import DialogExport from './pages/dialogs/export';

const root = document.getElementById('root');

Expand All @@ -29,4 +30,5 @@ render(() => (<Router root={rootComponent}>
<Route path="/" component={App} />
<Route path="/dialogs/create_setup" component={DialogCreateSetup} />
<Route path="/dialogs/load_asset" component={DialogLoadAsset} />
<Route path="/dialogs/export" component={DialogExport} />
</Router>), root!);
2 changes: 1 addition & 1 deletion ui/src/pages/dialogs/create_setup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const DialogCreateSetup: Component = () => {
const [shots] = createResource(listShots);

const [searchParams, setSearchParams] = useSearchParams();
const fileFormat = () => searchParams.file_format;
const fileFormat = () => searchParams['file-format'];

const derivedState = () => {
return { department: selectedDepartment(), asset: selectedAsset(), shot: selectedShot() }
Expand Down
Loading