// use actix::prelude::*; use git_next_file_watcher_actor::{FileUpdated, FileWatcher}; use git_next_git::repository::RepositoryFactory; use git_next_server_actor::Server; use kxio::{fs::FileSystem, network::Network}; use std::path::PathBuf; use tracing::{error, info}; use tracing_subscriber::EnvFilter; pub fn init(fs: FileSystem) { let file_name = "git-next-server.toml"; let pathbuf = PathBuf::from(file_name); let Ok(exists) = fs.path_exists(&pathbuf) else { eprintln!("Could not check if file exist: {}", file_name); return; }; if exists { eprintln!( "The configuration file already exists at {} - not overwritting it.", file_name ); } else { match fs.file_write(&pathbuf, include_str!("../../../server-default.toml")) { Ok(_) => println!("Created a default configuration file at {}", file_name), Err(e) => { eprintln!("Failed to write to the configuration file: {}", e) } } } } pub fn start( fs: FileSystem, net: Network, repo: Box, sleep_duration: std::time::Duration, ) { init_logging(); info!("Starting Server..."); let execution = async move { //- let server = Server::new(fs.clone(), net.clone(), repo, sleep_duration).start(); server.do_send(FileUpdated); info!("Starting File Watcher..."); let fw = match FileWatcher::new("git-next-server.toml".into(), server.recipient()) { Ok(fw) => fw, Err(err) => { error!(?err, "Failed to start file watcher"); return; } }; fw.start(); info!("Server running - Press Ctrl-C to stop..."); let _ = actix_rt::signal::ctrl_c().await; info!("Ctrl-C received, shutting down..."); System::current().stop(); }; let system = System::new(); Arbiter::current().spawn(execution); if let Err(err) = system.run() { tracing::error!(?err, "") }; } pub fn init_logging() { use tracing_subscriber::prelude::*; let subscriber = tracing_subscriber::fmt::layer() // NOTE: set RUSTLOG in ${root}/.cargo/config .with_target(false) .with_file(true) .with_line_number(true) .with_filter(EnvFilter::from_default_env()); tracing_subscriber::registry() .with(console_subscriber::ConsoleLayer::builder().spawn()) .with(subscriber) .init(); }