summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-05-18 13:25:42 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-05-18 14:25:41 +0200
commit0717aca15929ff476ac92ec3bf2242943f817a64 (patch)
tree2fda01c02aa7ed0415d567449b1781db500cf8b7
parent7da99d17d2220dcd19f0186c7f44bc34805a2970 (diff)
Split server into subcommand
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--src/cli.rs15
-rw-r--r--src/main.rs80
2 files changed, 59 insertions, 36 deletions
diff --git a/src/cli.rs b/src/cli.rs
index 64e011d..1eae246 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -14,6 +14,21 @@ pub struct CLI {
#[structopt(parse(from_os_str))]
configfile: Option<PathBuf>,
+
+ #[structopt(subcommand)]
+ cmd: Option<Command>
+}
+
+impl CLI {
+ pub fn cmd(&self) -> Option<&Command> {
+ self.cmd.as_ref()
+ }
+}
+
+#[derive(Debug, PartialEq, StructOpt)]
+#[structopt(about = "Start the server part (running in foreground")]
+pub enum Command {
+ Server,
}
pub fn cli() -> Result<CLI, Error> {
diff --git a/src/main.rs b/src/main.rs
index a3588f3..abd64e5 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -52,7 +52,7 @@ use anyhow::Error;
use actix_web::{web, HttpResponse, Responder};
use crate::app::App;
-use crate::cli::cli;
+use crate::cli::*;
use crate::configuration::Configuration;
use crate::repository::repository::Repository;
use crate::types::block::Block;
@@ -66,7 +66,12 @@ use crate::types::util::Version;
use std::process::exit;
-fn main() -> Result<()> {
+fn start_server(cli: &CLI) -> bool {
+ cli.cmd().map(|cmd| Command::Server == *cmd).unwrap_or(false)
+}
+
+#[actix_rt::main]
+async fn main() -> Result<()> {
let cli = cli()?;
let _ = env_logger::init();
let port = port_check::free_local_port().expect("Could not find free port");
@@ -82,29 +87,9 @@ fn main() -> Result<()> {
::toml::from_str(&configstr)?
};
- let app = {
- let device_name = config.get_device_name();
- let device_key = config.get_device_key();
-
- if let (Some(name), Some(key)) = (device_name, device_key) {
- let name = IPNSHash::from(name.clone());
- let key = key.clone();
- let api_url = config.get_api_url().clone();
- let api_port = config.get_api_port().clone();
-
- App::load(name, key, &api_url, api_port)
- } else {
- // ask user for name(s)
- // boot repository
- // load App object
- unimplemented!()
- }
- };
-
let adr = format!("127.0.0.1:{}", port);
- let webview_content = web_view::Content::Url(adr.clone());
- actix_rt::spawn(async move {
+ if start_server(&cli) {
actix_web::HttpServer::new(|| {
actix_web::App::new()
.service(actix_web::web::resource("/{name}/{id}/index.html").to(index))
@@ -113,19 +98,42 @@ fn main() -> Result<()> {
.expect(&format!("Could not bind to address {}", adr))
.run()
.await;
- });
-
- web_view::builder()
- .title("My Project")
- .content(webview_content)
- .resizable(true)
- .debug(true)
- .user_data(())
- .invoke_handler(|_webview, _arg| Ok(()))
- .build()
- .map_err(Error::from)?
- .run()
- .map_err(Error::from)
+
+ Ok(())
+ } else {
+ let app = {
+ let device_name = config.get_device_name();
+ let device_key = config.get_device_key();
+
+ if let (Some(name), Some(key)) = (device_name, device_key) {
+ let name = IPNSHash::from(name.clone());
+ let key = key.clone();
+ let api_url = config.get_api_url().clone();
+ let api_port = config.get_api_port().clone();
+
+ App::load(name, key, &api_url, api_port)
+ } else {
+ // ask user for name(s)
+ // boot repository
+ // load App object
+ unimplemented!()
+ }
+ };
+
+ let webview_content = web_view::Content::Url(adr.clone());
+
+ web_view::builder()
+ .title("My Project")
+ .content(webview_content)
+ .resizable(true)
+ .debug(true)
+ .user_data(())
+ .invoke_handler(|_webview, _arg| Ok(()))
+ .build()
+ .map_err(Error::from)?
+ .run()
+ .map_err(Error::from)
+ }
}
async fn index() -> impl Responder {