From 3575ac579cdcc5a9fa3ffec84952a634d1d7deaf Mon Sep 17 00:00:00 2001 From: Jokler Date: Thu, 4 Jun 2020 21:51:49 +0200 Subject: Improve the default website somewhat --- src/web_server.rs | 4 +-- src/web_server/default.rs | 33 ++++++++++++++++------ web_server/static/style.css | 42 ++++++++++++++++++++++++++++ web_server/templates/index.htm | 63 ++++++++++++++++++++++++++++++++++-------- web_server/templates/song.htm | 7 ----- 5 files changed, 120 insertions(+), 29 deletions(-) delete mode 100644 web_server/templates/song.htm diff --git a/src/web_server.rs b/src/web_server.rs index 01233f2..8ee740c 100644 --- a/src/web_server.rs +++ b/src/web_server.rs @@ -3,7 +3,7 @@ use std::time::Duration; use actix::{Addr, SyncArbiter}; use actix_web::{ - get, http::header, middleware::Logger, post, web, App, HttpResponse, HttpServer, Responder, + get, middleware::Logger, post, web, App, HttpServer, Responder, }; use askama::actix_web::TemplateIntoResponse; use askama::Template; @@ -91,8 +91,8 @@ async fn get_bot( front: FrontEnd, ) -> impl Responder { match front { + FrontEnd::Default => default::get_bot(bot, name.into_inner()).await, FrontEnd::Tmtu => tmtu::get_bot(bot, name.into_inner()).await, - FrontEnd::Default => Ok(HttpResponse::Found().header(header::LOCATION, "/").finish()), } } diff --git a/src/web_server/default.rs b/src/web_server/default.rs index b3c8291..ec86182 100644 --- a/src/web_server/default.rs +++ b/src/web_server/default.rs @@ -1,24 +1,41 @@ use actix::Addr; -use actix_web::{web, Error, HttpResponse}; +use actix_web::{http::header, web, Error, HttpResponse}; use askama::actix_web::TemplateIntoResponse; use askama::Template; -use crate::web_server::{filters, BotData, BotDataListRequest, BotExecutor}; +use crate::web_server::{filters, BotData, BotDataRequest, BotExecutor, BotNameListRequest}; #[derive(Template)] #[template(path = "index.htm")] struct OverviewTemplate<'a> { - bots: &'a [BotData], + bot_names: &'a [String], + bot: Option<&'a BotData>, } pub async fn index(bot: web::Data>) -> Result { - let bot_datas = match bot.send(BotDataListRequest).await.unwrap() { - Ok(data) => data, - Err(_) => Vec::with_capacity(0), - }; + let bot_names = bot.send(BotNameListRequest).await.unwrap().unwrap(); OverviewTemplate { - bots: &bot_datas[..], + bot_names: &bot_names, + bot: None, } .into_response() } + +pub async fn get_bot( + bot: web::Data>, + name: String, +) -> Result { + let bot_names = bot.send(BotNameListRequest).await.unwrap().unwrap(); + + if let Some(bot) = bot.send(BotDataRequest(name)).await.unwrap() { + OverviewTemplate { + bot_names: &bot_names, + bot: Some(&bot), + } + .into_response() + } else { + // TODO to 404 or not to 404 + Ok(HttpResponse::Found().header(header::LOCATION, "/").finish()) + } +} diff --git a/web_server/static/style.css b/web_server/static/style.css index 09a985c..7d2ba89 100644 --- a/web_server/static/style.css +++ b/web_server/static/style.css @@ -38,6 +38,48 @@ a:hover { color: #ccc; } +.thumbnail { + display: block; + max-height: 256px; + max-width: 512px; +} + +/* + * Playlist table + */ + +td { + padding-right: 16px; + padding-top: 1px; + padding-bottom: : 1px; +} + +td, th { + vertical-align:top; +} + +.tableheader td { + color: #918f8f; + border-bottom: 1px solid #3f4077; +} + +.stat { + text-align: right; + white-space: nowrap; + padding-left: 8px +} + +.tracktable { + border-left: 1px solid #3f4077; +} + +.tracktable tr:hover { + background-color: #163037; +} + +/* + * API Docs + */ pre { font-size: 0.9rem; font-family: monospace; diff --git a/web_server/templates/index.htm b/web_server/templates/index.htm index eed31f3..fc1f8e1 100644 --- a/web_server/templates/index.htm +++ b/web_server/templates/index.htm @@ -13,24 +13,63 @@ API -
    - {% for bot in bots %} + +{% match bot %} + {% when Some with (bot) %}

    {{ bot.name }}

    State: {{ bot.state }}
    Volume: {{ bot.volume * 100.0 }}%
    {% match bot.currently_playing %} {% when Some with (current) %} - Currently playing: - {% let item = current %} - {% include "song.htm" %} +

    Currently playing:

    + {% match current.thumbnail %} + {% when Some with (thumbnail) %} + + {% when None %} + {% endmatch %} + {{ current.title }} + ({{ current.duration|fmt_duration }}) {% when None %} {% endmatch %} - {% for item in bot.playlist %} -
  • - {% include "song.htm" %} -
  • - {% endfor %} - {% endfor %} -
+

Playlist

+ + + + + + + + {% for item in bot.playlist %} + + + + + + + {% endfor %} +
#tracklengthadded by
{{ loop.index }}{{ item.title }} + {% let duration = item.duration %} + {{ duration|fmt_duration }} + {{ item.added_by }}
+ + {% when None %} + {% endmatch %} {% endblock %} diff --git a/web_server/templates/song.htm b/web_server/templates/song.htm deleted file mode 100644 index 072567a..0000000 --- a/web_server/templates/song.htm +++ /dev/null @@ -1,7 +0,0 @@ -{{ item.title }} -({{ item.duration|fmt_duration }}) -{% match item.thumbnail %} - {% when Some with (thumbnail) %} - - {% when None %} -{% endmatch %} -- cgit v1.2.3-70-g09d2