- Remove unused imports (n8n_search, universal_search, Client, Arc, etc.) - Update API endpoints for identity, face recognition, search - Fix postgres_db.rs search_videos parent_uuid column - Add snapshot API and identity agent API - Clean up backup files (.bak, .bak2)
321 lines
7.9 KiB
Rust
321 lines
7.9 KiB
Rust
//! Momentry Core - Digital asset management system with video analysis and RAG
|
|
//!
|
|
//! This is the main entry point for the CLI application.
|
|
|
|
use anyhow::Result;
|
|
use clap::Parser;
|
|
|
|
// Local modules
|
|
mod cli;
|
|
mod processing;
|
|
|
|
use cli::*;
|
|
use processing::handlers::*;
|
|
|
|
/// Main entry point
|
|
#[tokio::main]
|
|
async fn main() -> Result<()> {
|
|
let cli = Cli::parse();
|
|
|
|
match cli.command {
|
|
Commands::Register { path } => {
|
|
handle_register(&path).await?;
|
|
}
|
|
Commands::Process {
|
|
target,
|
|
modules,
|
|
cloud,
|
|
force,
|
|
resume,
|
|
} => {
|
|
handle_process(&target, modules, cloud, force, resume).await?;
|
|
}
|
|
Commands::Chunk { uuid } => {
|
|
handle_chunk(&uuid).await?;
|
|
}
|
|
Commands::Story { uuid } => {
|
|
handle_story(&uuid).await?;
|
|
}
|
|
Commands::Vectorize { uuid } => {
|
|
handle_vectorize(&uuid).await?;
|
|
}
|
|
Commands::Play { target } => {
|
|
handle_play(&target).await?;
|
|
}
|
|
Commands::Watch { directories } => {
|
|
handle_watch(directories).await?;
|
|
}
|
|
Commands::System { gpu } => {
|
|
handle_system(gpu).await?;
|
|
}
|
|
Commands::Server { host, port } => {
|
|
handle_server(&host, port).await?;
|
|
}
|
|
Commands::Worker {
|
|
max_concurrent,
|
|
poll_interval,
|
|
batch_size,
|
|
} => {
|
|
handle_worker(max_concurrent, poll_interval, batch_size).await?;
|
|
}
|
|
Commands::Query { query } => {
|
|
handle_query(&query).await?;
|
|
}
|
|
Commands::Lookup { path } => {
|
|
handle_lookup(&path).await?;
|
|
}
|
|
Commands::Resolve { uuid } => {
|
|
handle_resolve(&uuid).await?;
|
|
}
|
|
Commands::Thumbnails { uuid, count } => {
|
|
handle_thumbnails(uuid, count).await?;
|
|
}
|
|
Commands::Status { uuid } => {
|
|
handle_status(uuid).await?;
|
|
}
|
|
Commands::Backup { action, days } => {
|
|
handle_backup(&action, days).await?;
|
|
}
|
|
Commands::ApiKey {
|
|
action,
|
|
name,
|
|
key_type,
|
|
ttl,
|
|
key,
|
|
} => {
|
|
handle_api_key(action, name, key_type, ttl, key).await?;
|
|
}
|
|
Commands::Gitea {
|
|
action,
|
|
username,
|
|
password,
|
|
token_name,
|
|
scopes,
|
|
} => {
|
|
handle_gitea(action, username, password, token_name, scopes).await?;
|
|
}
|
|
Commands::N8n {
|
|
action,
|
|
api_key,
|
|
label,
|
|
expires_in_days,
|
|
} => {
|
|
handle_n8n(action, api_key, label, expires_in_days).await?;
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle register command
|
|
async fn handle_register(path: &str) -> Result<()> {
|
|
println!("Registering video: {}", path);
|
|
|
|
// TODO: Implement registration logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle process command
|
|
async fn handle_process(
|
|
target: &str,
|
|
modules: Option<Vec<String>>,
|
|
cloud: Option<Vec<String>>,
|
|
force: bool,
|
|
resume: bool,
|
|
) -> Result<()> {
|
|
println!("Processing video: {}", target);
|
|
println!("Modules: {:?}", modules);
|
|
println!("Cloud modules: {:?}", cloud);
|
|
println!("Force: {}, Resume: {}", force, resume);
|
|
|
|
// TODO: Implement processing logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle chunk command
|
|
async fn handle_chunk(uuid: &str) -> Result<()> {
|
|
println!("Generating chunks for: {}", uuid);
|
|
|
|
// TODO: Implement chunk logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle story command
|
|
async fn handle_story(uuid: &str) -> Result<()> {
|
|
println!("Generating story for: {}", uuid);
|
|
|
|
// TODO: Implement story logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle vectorize command
|
|
async fn handle_vectorize(uuid: &str) -> Result<()> {
|
|
println!("Vectorizing chunks for: {}", uuid);
|
|
|
|
// TODO: Implement vectorize logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle play command
|
|
async fn handle_play(target: &str) -> Result<()> {
|
|
println!("Playing video: {}", target);
|
|
|
|
// TODO: Implement play logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle watch command
|
|
async fn handle_watch(directories: Option<String>) -> Result<()> {
|
|
println!("Watching directories: {:?}", directories);
|
|
|
|
// TODO: Implement watch logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle system command
|
|
async fn handle_system(gpu: bool) -> Result<()> {
|
|
println!("Checking system resources...");
|
|
|
|
// TODO: Implement proper system resource checking
|
|
println!("System Information:");
|
|
println!(" CPU: (would show CPU info)");
|
|
println!(" Memory: (would show memory info)");
|
|
|
|
if gpu {
|
|
println!("GPU details: (would show GPU info if available)");
|
|
}
|
|
|
|
println!("(System resource checking would be implemented here)");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle server command
|
|
async fn handle_server(host: &str, port: Option<u16>) -> Result<()> {
|
|
let port = port.unwrap_or(3002);
|
|
println!("Starting API server on {}:{}", host, port);
|
|
|
|
// Start the actual API server
|
|
momentry_core::api::start_server(host, port).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle worker command
|
|
async fn handle_worker(
|
|
max_concurrent: Option<usize>,
|
|
poll_interval: Option<u64>,
|
|
batch_size: Option<i32>,
|
|
) -> Result<()> {
|
|
println!("Starting job worker");
|
|
println!("Max concurrent: {:?}", max_concurrent);
|
|
println!("Poll interval: {:?}", poll_interval);
|
|
println!("Batch size: {:?}", batch_size);
|
|
|
|
// TODO: Implement worker logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle query command
|
|
async fn handle_query(query: &str) -> Result<()> {
|
|
println!("Querying: {}", query);
|
|
|
|
// TODO: Implement query logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle lookup command
|
|
async fn handle_lookup(path: &str) -> Result<()> {
|
|
println!("Looking up UUID for path: {}", path);
|
|
|
|
// TODO: Implement lookup logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle resolve command
|
|
async fn handle_resolve(uuid: &str) -> Result<()> {
|
|
println!("Resolving path for UUID: {}", uuid);
|
|
|
|
// TODO: Implement resolve logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle thumbnails command
|
|
async fn handle_thumbnails(uuid: Option<String>, count: u32) -> Result<()> {
|
|
println!("Generating thumbnails");
|
|
println!("UUID: {:?}", uuid);
|
|
println!("Count: {}", count);
|
|
|
|
// TODO: Implement thumbnails logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle status command
|
|
async fn handle_status(uuid: Option<String>) -> Result<()> {
|
|
println!("Checking storage status");
|
|
println!("UUID: {:?}", uuid);
|
|
|
|
// TODO: Implement status logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle backup command
|
|
async fn handle_backup(action: &str, days: Option<u32>) -> Result<()> {
|
|
println!("Backup action: {}", action);
|
|
println!("Days to keep: {:?}", days);
|
|
|
|
// TODO: Implement backup logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle API key command
|
|
async fn handle_api_key(
|
|
action: ApiKeyAction,
|
|
name: Option<String>,
|
|
key_type: Option<String>,
|
|
ttl: Option<i64>,
|
|
key: Option<String>,
|
|
) -> Result<()> {
|
|
println!("API Key action: {:?}", action);
|
|
println!("Name: {:?}", name);
|
|
println!("Key type: {:?}", key_type);
|
|
println!("TTL: {:?}", ttl);
|
|
println!("Key: {:?}", key);
|
|
|
|
// TODO: Implement API key logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle Gitea command
|
|
async fn handle_gitea(
|
|
action: GiteaAction,
|
|
username: Option<String>,
|
|
password: Option<String>,
|
|
token_name: Option<String>,
|
|
scopes: Option<String>,
|
|
) -> Result<()> {
|
|
println!("Gitea action: {:?}", action);
|
|
println!("Username: {:?}", username);
|
|
println!("Token name: {:?}", token_name);
|
|
println!("Scopes: {:?}", scopes);
|
|
|
|
// TODO: Implement Gitea logic
|
|
Ok(())
|
|
}
|
|
|
|
/// Handle n8n command
|
|
async fn handle_n8n(
|
|
action: N8nAction,
|
|
api_key: Option<String>,
|
|
label: Option<String>,
|
|
expires_in_days: Option<i64>,
|
|
) -> Result<()> {
|
|
println!("n8n action: {:?}", action);
|
|
println!("API key: {:?}", api_key);
|
|
println!("Label: {:?}", label);
|
|
println!("Expires in days: {:?}", expires_in_days);
|
|
|
|
// TODO: Implement n8n logic
|
|
Ok(())
|
|
}
|