You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.6 KiB

5 years ago
  1. #![feature(const_generics)]
  2. mod common;
  3. mod patch;
  4. use crate::patch::patch::{PatchServerState, PatchTreeIterItem, generate_patch_tree, load_config, load_motd};
  5. fn main() {
  6. println!("[patch] starting server");
  7. let patch_config = load_config();
  8. let patch_motd: String = load_motd();
  9. if let Err(_) = std::fs::read_dir(patch_config.path.as_str()) {
  10. println!("Patch directory {} does not exist. Attempting to create it...", patch_config.path.as_str());
  11. if let Err(err) = std::fs::create_dir(patch_config.path.as_str()) {
  12. panic!("Failed to create patch directory! \n{}", err);
  13. }
  14. }
  15. let (patch_file_tree, patch_file_lookup) = generate_patch_tree(patch_config.path.as_str());
  16. println!("[patch] files to patch:");
  17. let mut indent = 0;
  18. for item in patch_file_tree.flatten() {
  19. match item {
  20. PatchTreeIterItem::Directory(path) => {
  21. let s = path.to_str().unwrap();
  22. println!("{: >2$}\u{2517}\u{2500}\u{2500} {}", "", s, indent * 4);
  23. indent += 1;
  24. },
  25. PatchTreeIterItem::File(path, id) => {
  26. let s = path.to_str().unwrap();
  27. println!("{: >3$}\u{2520}\u{2500}\u{2500} {} ({})", "", s, id, indent * 4);
  28. },
  29. PatchTreeIterItem::UpDirectory => {
  30. indent -= 1;
  31. }
  32. }
  33. }
  34. let patch_state = PatchServerState::new(patch_file_tree, patch_file_lookup, patch_motd);
  35. common::mainloop::mainloop(patch_state, patch_config.port);
  36. println!("[patch] exiting...");
  37. }