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,4 +1,5 @@
|
|||
use actix_web::{get, web::{Data, self}, HttpResponse, Responder};
|
||||
use actix_web::{get, web::{self, Data}, HttpRequest, HttpResponse, Responder};
|
||||
use anyhow::anyhow;
|
||||
use std::{time::Instant, sync::Arc};
|
||||
use libseptastic::{route::RouteType, stop_schedule::Trip};
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
|
@ -8,27 +9,33 @@ use crate::AppState;
|
|||
use crate::database;
|
||||
|
||||
#[get("/routes")]
|
||||
async fn get_routes_html(state: Data<Arc<AppState>>) -> impl Responder {
|
||||
let start_time = Instant::now();
|
||||
async fn get_routes_html(req: HttpRequest, state: Data<Arc<AppState>>) -> impl Responder {
|
||||
crate::perform_action(req, move || {
|
||||
let statex = state.clone();
|
||||
async move {
|
||||
let start_time = Instant::now();
|
||||
|
||||
let all_routes = database::get_all_routes(&mut state.database.begin().await.unwrap()).await.unwrap();
|
||||
let all_routes = database::get_all_routes(&mut statex.database.begin().await?).await?;
|
||||
|
||||
let rr_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::RegionalRail).collect();
|
||||
let subway_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::SubwayElevated).collect();
|
||||
let trolley_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::Trolley).collect();
|
||||
let bus_routes = all_routes.into_iter().filter(|x| x.route_type == RouteType::TracklessTrolley || x.route_type == RouteType::Bus).collect();
|
||||
let rr_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::RegionalRail).collect();
|
||||
let subway_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::SubwayElevated).collect();
|
||||
let trolley_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::Trolley).collect();
|
||||
let bus_routes = all_routes.into_iter().filter(|x| x.route_type == RouteType::TracklessTrolley || x.route_type == RouteType::Bus).collect();
|
||||
|
||||
HttpResponse::Ok().body(crate::templates::ContentTemplate {
|
||||
page_title: Some(String::from("SEPTASTIC | Routes")),
|
||||
page_desc: Some(String::from("All SEPTA routes.")),
|
||||
content: crate::templates::RoutesTemplate {
|
||||
rr_routes,
|
||||
subway_routes,
|
||||
trolley_routes,
|
||||
bus_routes,
|
||||
},
|
||||
load_time_ms: Some(start_time.elapsed().as_millis())
|
||||
}.render().unwrap())
|
||||
Ok(crate::templates::ContentTemplate {
|
||||
page_title: Some(String::from("SEPTASTIC | Routes")),
|
||||
page_desc: Some(String::from("All SEPTA routes.")),
|
||||
widescreen: false,
|
||||
content: crate::templates::RoutesTemplate {
|
||||
rr_routes,
|
||||
subway_routes,
|
||||
trolley_routes,
|
||||
bus_routes,
|
||||
},
|
||||
load_time_ms: Some(start_time.elapsed().as_millis())
|
||||
})
|
||||
}
|
||||
}).await
|
||||
}
|
||||
|
||||
#[get("/routes.json")]
|
||||
|
|
@ -37,7 +44,7 @@ async fn get_routes_json(state: Data<Arc<AppState>>) -> impl Responder {
|
|||
HttpResponse::Ok().json(all_routes)
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
pub struct RouteQueryParams {
|
||||
#[serde(default)] // Optional: handle missing parameters with a default value
|
||||
stops: Option<String>,
|
||||
|
|
@ -67,39 +74,43 @@ async fn get_route_info(route_id: String, state: Data<Arc<AppState>>) -> ::anyho
|
|||
}
|
||||
|
||||
#[get("/route/{route_id}")]
|
||||
async fn get_route(state: Data<Arc<AppState>>, info: web::Query<RouteQueryParams>, path: web::Path<String>) -> impl Responder {
|
||||
let start_time = Instant::now();
|
||||
async fn get_route(state: Data<Arc<AppState>>, req: HttpRequest, info: web::Query<RouteQueryParams>, path: web::Path<String>) -> impl Responder {
|
||||
crate::perform_action(req, move || {
|
||||
let pathx = path.clone();
|
||||
let infox = info.clone();
|
||||
let statex = state.clone();
|
||||
async move {
|
||||
let mut filters: Option<Vec<i64>> = None;
|
||||
if let Some (stops_v) = infox.stops.clone() {
|
||||
let mut items = Vec::new();
|
||||
|
||||
let mut filters: Option<Vec<i64>> = None;
|
||||
if let Some (stops_v) = info.stops.clone() {
|
||||
let mut items = Vec::new();
|
||||
|
||||
for sid in stops_v.split(",") {
|
||||
items.push(sid.parse::<i64>().unwrap());
|
||||
for sid in stops_v.split(",") {
|
||||
items.push(sid.parse::<i64>().unwrap());
|
||||
}
|
||||
filters = Some(items);
|
||||
}
|
||||
filters = Some(items);
|
||||
}
|
||||
|
||||
let route_id = path.into_inner();
|
||||
let route_info_r = get_route_info(route_id.clone(), state).await;
|
||||
let load_time_ms = Some(start_time.elapsed().as_millis());
|
||||
let route_id = pathx;
|
||||
let route_info_r = get_route_info(route_id.clone(), statex.clone()).await;
|
||||
|
||||
if let Ok(route_info) = route_info_r {
|
||||
let timetables = crate::templates::build_timetables(route_info.directions, route_info.schedule);
|
||||
if let Ok(route_info) = route_info_r {
|
||||
let timetables = crate::templates::build_timetables(route_info.directions, route_info.schedule);
|
||||
|
||||
HttpResponse::Ok().body(crate::templates::ContentTemplate {
|
||||
page_title: Some(format!("SEPTASTIC | Schedules for {}", route_id.clone())),
|
||||
page_desc: Some(format!("Schedule information for {}", route_id.clone())),
|
||||
content: crate::templates::RouteTemplate {
|
||||
route: route_info.route,
|
||||
timetables,
|
||||
filter_stops: filters.clone()
|
||||
},
|
||||
load_time_ms
|
||||
}.render().unwrap())
|
||||
} else {
|
||||
HttpResponse::InternalServerError().body("Error")
|
||||
}
|
||||
Ok(crate::templates::ContentTemplate {
|
||||
widescreen: false,
|
||||
page_title: Some(format!("SEPTASTIC | Schedules for {}", route_id.clone())),
|
||||
page_desc: Some(format!("Schedule information for {}", route_id.clone())),
|
||||
content: crate::templates::RouteTemplate {
|
||||
route: route_info.route,
|
||||
timetables,
|
||||
filter_stops: filters.clone()
|
||||
},
|
||||
load_time_ms: None
|
||||
})
|
||||
} else {
|
||||
Err(anyhow!("test"))
|
||||
}
|
||||
}}).await
|
||||
}
|
||||
|
||||
#[get("/route/{route_id}.json")]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue