]> Untitled Git - lemmy.git/blobdiff - server/src/main.rs
Merge branch 'dev' into federation
[lemmy.git] / server / src / main.rs
index cc1cbcec4eb63b27bfa77b6cbb4f3b4535b6df7a..88d62eb997c9fd374a4a1fc3661257d1f64029a0 100644 (file)
@@ -2,41 +2,86 @@ extern crate lemmy_server;
 #[macro_use]
 extern crate diesel_migrations;
 
+use actix::prelude::*;
 use actix_web::*;
-use lemmy_server::db::establish_connection;
-use lemmy_server::routes::{federation, feeds, index, nodeinfo, webfinger, websocket};
+use diesel::r2d2::{ConnectionManager, Pool};
+use diesel::PgConnection;
+use failure::Error;
+use lemmy_server::apub::fetcher::fetch_all;
+use lemmy_server::db::code_migrations::run_advanced_migrations;
+use lemmy_server::routes::{api, federation, feeds, index, nodeinfo, webfinger, websocket};
 use lemmy_server::settings::Settings;
+use lemmy_server::websocket::server::*;
+use log::warn;
+use std::thread;
+use std::thread::sleep;
+use std::time::Duration;
 
 embed_migrations!();
 
-fn main() {
-  let _ = env_logger::init();
-  let sys = actix::System::new("lemmy");
+#[actix_rt::main]
+async fn main() -> Result<(), Error> {
+  env_logger::init();
+  let settings = Settings::get();
+
+  // Set up the r2d2 connection pool
+  let manager = ConnectionManager::<PgConnection>::new(&settings.get_database_url());
+  let pool = Pool::builder()
+    .max_size(settings.database.pool_size)
+    .build(manager)
+    .unwrap_or_else(|_| panic!("Error connecting to {}", settings.get_database_url()));
 
   // Run the migrations from code
-  let conn = establish_connection();
+  let conn = pool.get().unwrap();
   embedded_migrations::run(&conn).unwrap();
+  run_advanced_migrations(&conn).unwrap();
 
-  let settings = Settings::get();
+  // Set up websocket server
+  let server = ChatServer::startup(pool.clone()).start();
+
+  thread::spawn(move || {
+    // some work here
+    sleep(Duration::from_secs(5));
+    println!("Fetching apub data");
+    match fetch_all(&conn) {
+      Ok(_) => {}
+      Err(e) => warn!("Error during apub fetch: {}", e),
+    }
+  });
+
+  println!(
+    "Starting http server at {}:{}",
+    settings.bind, settings.port
+  );
 
   // Create Http server with websocket support
-  HttpServer::new(move || {
-    App::new()
-      .configure(federation::config)
-      .configure(feeds::config)
-      .configure(index::config)
-      .configure(nodeinfo::config)
-      .configure(webfinger::config)
-      .configure(websocket::config)
-      .service(actix_files::Files::new(
-        "/static",
-        settings.front_end_dir.to_owned(),
-      ))
-  })
-  .bind((settings.bind, settings.port))
-  .unwrap()
-  .start();
-
-  println!("Started http server at {}:{}", settings.bind, settings.port);
-  let _ = sys.run();
+  Ok(
+    HttpServer::new(move || {
+      let settings = Settings::get();
+      App::new()
+        .wrap(middleware::Logger::default())
+        .data(pool.clone())
+        .data(server.clone())
+        // The routes
+        .configure(api::config)
+        .configure(federation::config)
+        .configure(feeds::config)
+        .configure(index::config)
+        .configure(nodeinfo::config)
+        .configure(webfinger::config)
+        .configure(websocket::config)
+        // static files
+        .service(actix_files::Files::new(
+          "/static",
+          settings.front_end_dir.to_owned(),
+        ))
+        .service(actix_files::Files::new(
+          "/docs",
+          settings.front_end_dir.to_owned() + "/documentation",
+        ))
+    })
+    .bind((settings.bind, settings.port))?
+    .run()
+    .await?,
+  )
 }