This commit is contained in:
despiegk 2025-05-13 10:03:13 +03:00
parent 29ccc54a4d
commit 1e914aa56d
6 changed files with 172 additions and 13 deletions

View File

@ -72,7 +72,12 @@ fn main() -> Result<()> {
.subcommand( .subcommand(
SubCommand::with_name("export_to_ipfs") SubCommand::with_name("export_to_ipfs")
.about("Export a collection to IPFS") .about("Export a collection to IPFS")
.arg(Arg::with_name("collection").required(true).help("Name of the collection")) .arg(Arg::with_name("collection")
.short("c".chars().next().unwrap())
.long("collection")
.takes_value(true)
.required(false)
.help("Name of the collection (export all if not specified)"))
.arg(Arg::with_name("output").required(true).help("Output directory for IPFS export")) .arg(Arg::with_name("output").required(true).help("Output directory for IPFS export"))
.arg(Arg::with_name("doctree").long("doctree").takes_value(true).help("Name of the doctree (default: 'default')")), .arg(Arg::with_name("doctree").long("doctree").takes_value(true).help("Name of the doctree (default: 'default')")),
) )
@ -350,13 +355,13 @@ fn main() -> Result<()> {
doctree.delete_collection(collection)?; doctree.delete_collection(collection)?;
println!("Collection '{}' deleted successfully", collection); println!("Collection '{}' deleted successfully", collection);
} else if let Some(matches) = matches.subcommand_matches("export_to_ipfs") { } else if let Some(matches) = matches.subcommand_matches("export_to_ipfs") {
let collection_name = matches.value_of("collection").unwrap(); let output_path_str = matches.value_of("output").unwrap();
let output_path = matches.value_of("output").unwrap(); let output_path = Path::new(output_path_str);
let doctree_name = matches.value_of("doctree").unwrap_or("default"); let doctree_name = matches.value_of("doctree").unwrap_or("default");
let collection_name_opt = matches.value_of("collection");
if debug_mode { if debug_mode {
println!("DEBUG: Exporting collection '{}' from doctree '{}' to IPFS output path '{}'", println!("DEBUG: Handling export_to_ipfs command.");
collection_name, doctree_name, output_path);
} }
// Create a storage with the specified doctree name // Create a storage with the specified doctree name
@ -377,14 +382,36 @@ fn main() -> Result<()> {
// Load collections from Redis // Load collections from Redis
doctree.load_collections_from_redis()?; doctree.load_collections_from_redis()?;
// Get the collection match collection_name_opt {
let collection = doctree.get_collection(collection_name)?; Some(collection_name) => {
// Export a specific collection
// Call the synchronous export_collection_to_ipfs_sync function from the doctree crate if debug_mode {
let output_path = Path::new(output_path); println!("DEBUG: Exporting specific collection '{}'", collection_name);
doctree.export_collection_to_ipfs(collection_name, output_path)?; }
doctree.export_collection_to_ipfs(collection_name, output_path)?;
println!("Successfully exported collection '{}' to IPFS and generated metadata CSV at {:?}.", collection_name, output_path.join(format!("{}.csv", collection_name))); println!("Successfully exported collection '{}' to IPFS and generated metadata CSV at {:?}.", collection_name, output_path.join(format!("{}.csv", collection_name)));
}
None => {
// Export all collections
if debug_mode {
println!("DEBUG: Exporting all collections.");
}
let collections = doctree.list_collections();
if collections.is_empty() {
println!("No collections found to export.");
} else {
println!("Exporting the following collections:");
for collection_name in collections {
println!("- {}", collection_name);
if let Err(e) = doctree.export_collection_to_ipfs(&collection_name, output_path) {
eprintln!("Error exporting collection '{}': {}", collection_name, e);
} else {
println!("Successfully exported collection '{}' to IPFS and generated metadata CSV at {:?}.", collection_name, output_path.join(format!("{}.csv", collection_name)));
}
}
}
}
}
} else if let Some(matches) = matches.subcommand_matches("reset") { } else if let Some(matches) = matches.subcommand_matches("reset") {
let doctree_name = matches.value_of("doctree").unwrap_or("default"); let doctree_name = matches.value_of("doctree").unwrap_or("default");

View File

@ -0,0 +1,20 @@
[
{
name: docs_hero
#existing docusaurus site can be used as collection as long as no duplicates
url: https://git.ourworld.tf/tfgrid/docs_tfgrid4/src/branch/main/aibox/docs
description: Documentation for the ThreeFold Hero project.
}
{
name: biz
url: https://git.ourworld.tf/tfgrid/docs_tfgrid4/src/branch/main/aibox/collectios/aaa
description: Business documentation.
}
{
name: products
url: https://git.ourworld.tf/tfgrid/docs_tfgrid4/src/branch/main/aibox/collectios/vvv
description: Information about ThreeFold products.
}
]

View File

@ -0,0 +1,33 @@
# Footer configuration for the site
title: "Explore More"
sections: [
{
title: "Pages"
links: [
{ label: "Home", href: "/" }
{ label: "About Us", href: "/about" }
{ label: "Contact", href: "/contact" }
{ label: "Blog", href: "/blog" }
]
}
{
title: "Resources"
links: [
{ label: "Docs", href: "/docs" }
{ label: "API", href: "/api" }
]
}
{
title: "Social"
links: [
{ label: "GitHub", href: "https://github.com/yourproject" }
{ label: "Twitter", href: "https://twitter.com/yourhandle" }
]
}
]
copyright: "© 2025 YourSite. All rights reserved."

View File

@ -0,0 +1,32 @@
# Site Branding
logo:
src: /img/logo.svg
alt: Site Logo
# Site Title
title: ThreeFold Hero
# Navigation Menu
menu: [
{
label: Home
link: /
}
{
label: Docs
link: /docs/
}
{
label: About
link: /about/
}
]
# Login Button
login:
visible: true
label: Login
link: /login/

View File

@ -0,0 +1,14 @@
# Site Main Info
title: ThreeFold Hero Docs
tagline: Your Personal Hero
favicon: img/favicon.png
url: https://threefold.info
# SEO / Social Metadata
metadata:
title: ThreeFold Hero Docs
description: ThreeFold Hero - Your Personal Hero
image: https://threefold.info/herodocs/img/tf_graph.png
# Copyright Notice
copyright: ThreeFold

View File

@ -0,0 +1,33 @@
[
{
name: home
title: Home Page
description: This is the main landing page.
navPath: /
collection: acollection
}
{
name: about
title: About Us
navPath: /about
collection: acollection
}
{
name: docs
title: Documentation
navPath: /sub/docs
collection: docs_hero
}
{
name: hidden-page
title: Hidden Page
description: This page is not shown in navigation.
hidden: true
navPath: /cantsee
collection: acollection
}
]