Add widescreen setting and universal time
This commit is contained in:
parent
775d6c2899
commit
ce912d4b85
7 changed files with 295 additions and 64 deletions
|
|
@ -1,29 +1,75 @@
|
|||
use actix_web::{get, web::Data, App, HttpResponse, HttpServer, Responder};
|
||||
use actix_web::{cookie::Cookie, get, web::Data, App, HttpRequest, HttpResponse, HttpServer, Responder};
|
||||
use env_logger::Env;
|
||||
use log::*;
|
||||
use dotenv::dotenv;
|
||||
use serde::Deserialize;
|
||||
use services::trip_tracking::{self};
|
||||
use std::sync::Arc;
|
||||
use templates::ContentTemplate;
|
||||
use std::{sync::Arc, time::Instant};
|
||||
use askama::Template;
|
||||
|
||||
mod database;
|
||||
mod services;
|
||||
mod controllers;
|
||||
mod templates;
|
||||
mod middleware;
|
||||
|
||||
pub struct AppState {
|
||||
database: ::sqlx::postgres::PgPool,
|
||||
trip_tracking_service: services::trip_tracking::TripTrackingService
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct LocalStateQuery {
|
||||
pub widescreen: Option<bool>
|
||||
}
|
||||
|
||||
pub async fn perform_action<F, Fut, T >(req: HttpRequest, func: F) -> impl Responder
|
||||
where T: Template,
|
||||
F: Fn() -> Fut,
|
||||
Fut: Future<Output = anyhow::Result<ContentTemplate<T>>> + 'static {
|
||||
|
||||
let start_time = Instant::now();
|
||||
let mut enable_widescreen = false;
|
||||
if let Some(widescreen_set) = req.cookie("widescreen") {
|
||||
enable_widescreen = widescreen_set.value() == "true";
|
||||
}
|
||||
|
||||
let query_params = actix_web::web::Query::<LocalStateQuery>::from_query(req.query_string()).unwrap();
|
||||
|
||||
if let Some(set_widescreen) = query_params.widescreen {
|
||||
enable_widescreen = set_widescreen;
|
||||
}
|
||||
|
||||
let x = func().await;
|
||||
|
||||
match x {
|
||||
Ok(mut y) => {
|
||||
y.widescreen = enable_widescreen;
|
||||
y.load_time_ms = Some(start_time.elapsed().as_nanos());
|
||||
let mut cookie = Cookie::new("widescreen", y.widescreen.to_string());
|
||||
cookie.set_path("/");
|
||||
HttpResponse::Ok()
|
||||
.cookie(cookie)
|
||||
.body(y.render().unwrap())
|
||||
},
|
||||
Err(_) => {
|
||||
HttpResponse::InternalServerError().body("Error")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
async fn get_index() -> impl Responder {
|
||||
HttpResponse::Ok().body(templates::ContentTemplate {
|
||||
async fn get_index(req: HttpRequest) -> impl Responder {
|
||||
perform_action(req, move || async {
|
||||
Ok(templates::ContentTemplate {
|
||||
page_title: None,
|
||||
page_desc: None,
|
||||
content: templates::IndexTemplate {},
|
||||
load_time_ms: None
|
||||
}.render().unwrap())
|
||||
load_time_ms: None,
|
||||
widescreen: false
|
||||
})
|
||||
}).await
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
|
|
@ -53,6 +99,7 @@ async fn main() -> ::anyhow::Result<()> {
|
|||
HttpServer::new(move || {
|
||||
App::new()
|
||||
.wrap(actix_cors::Cors::permissive())
|
||||
.wrap(actix_web::middleware::from_fn(middleware::local_state::local_state))
|
||||
.app_data(Data::new(state.clone()))
|
||||
.service(controllers::route::api_get_route)
|
||||
.service(controllers::route::api_get_schedule)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue