...
This commit is contained in:
		| @@ -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"); | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								examples/doctreenew/sites/demo1/collection.hjson
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								examples/doctreenew/sites/demo1/collection.hjson
									
									
									
									
									
										Normal 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. | ||||||
|  |   } | ||||||
|  | ] | ||||||
							
								
								
									
										33
									
								
								examples/doctreenew/sites/demo1/footer.hjson
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								examples/doctreenew/sites/demo1/footer.hjson
									
									
									
									
									
										Normal 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." | ||||||
							
								
								
									
										32
									
								
								examples/doctreenew/sites/demo1/header.hjson
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								examples/doctreenew/sites/demo1/header.hjson
									
									
									
									
									
										Normal 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/ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    | ||||||
							
								
								
									
										14
									
								
								examples/doctreenew/sites/demo1/main.hjson
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								examples/doctreenew/sites/demo1/main.hjson
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										33
									
								
								examples/doctreenew/sites/demo1/pages.hjson
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								examples/doctreenew/sites/demo1/pages.hjson
									
									
									
									
									
										Normal 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 | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  |    | ||||||
		Reference in New Issue
	
	Block a user