wallpapers: map of all wallpapers

This commit is contained in:
Philippe Loctaux 2023-12-01 13:07:25 +01:00
parent e61ef1d4c3
commit 19622b8dff
6 changed files with 99 additions and 22 deletions

View file

@ -7,7 +7,7 @@ use std::path::PathBuf;
const WALLPAPERS_PATH: &str = "/public/wallpapers"; const WALLPAPERS_PATH: &str = "/public/wallpapers";
const CRATE_PATH: &str = env!("CARGO_MANIFEST_DIR"); const CRATE_PATH: &str = env!("CARGO_MANIFEST_DIR");
const IMPORTS: &str = r#"use crate::types::{Location,Wallpaper};"#; const IMPORTS: &str = r#"use crate::types::{Gps, Location, Wallpaper};"#;
#[derive(Debug)] #[derive(Debug)]
struct Metadata { struct Metadata {
@ -185,8 +185,19 @@ fn main() {
println!("Precise location is `{}`", precise); println!("Precise location is `{}`", precise);
println!("Broad location is `{}`", broad); println!("Broad location is `{}`", broad);
// Construct struct // Construct structs
let wallpaper_struct = format!("&Wallpaper {{ file: \"{}\", date: \"{}\", location: Location {{ precise: \"{}\", broad: \"{}\", latitude: {}, longitude: {} }} }},\n", wallpaper.file, wallpaper.date, precise, broad, wallpaper.latitude, wallpaper.longitude); let gps_struct = format!(
"Gps {{ latitude: {}, longitude: {} }}",
wallpaper.latitude, wallpaper.longitude
);
let location_struct = format!(
"Location {{ precise: \"{}\", broad: \"{}\", gps: {} }}",
precise, broad, gps_struct
);
let wallpaper_struct = format!(
"&Wallpaper {{ file: \"{}\", date: \"{}\", location: {} }},\n",
wallpaper.file, wallpaper.date, location_struct
);
wallpapers.push_str(&wallpaper_struct); wallpapers.push_str(&wallpaper_struct);
} }

View file

@ -12,22 +12,28 @@ mod wallpapers;
#[launch] #[launch]
fn rocket() -> _ { fn rocket() -> _ {
rocket::build() let server = rocket::build()
.mount("/", FileServer::from("public")) .mount("/", FileServer::from("public"))
.mount("/", routes![root, email]) .mount("/", routes![root, email, wallpapers_route])
.register("/", catchers![not_found]) .register("/", catchers![not_found]);
.attach(
rocket_async_compression::CachedCompression::path_suffix_fairing(vec![ if cfg!(debug_assertions) {
// Code server
".js".into(), } else {
".css".into(), server
// Documents .attach(
".pdf".into(), rocket_async_compression::CachedCompression::path_suffix_fairing(vec![
".txt".into(), // Code
]), ".js".into(),
) ".css".into(),
.attach(cache::CacheControl::default()) // Documents
.attach(minify::Minify) ".pdf".into(),
".txt".into(),
]),
)
.attach(cache::CacheControl::default())
.attach(minify::Minify)
}
} }
#[catch(404)] #[catch(404)]
@ -59,3 +65,12 @@ fn email() -> templates::Email<'static> {
year: chrono::Utc::now().year(), year: chrono::Utc::now().year(),
} }
} }
#[get("/wallpapers")]
fn wallpapers_route() -> templates::Wallpapers<'static> {
templates::Wallpapers {
title: "Wallpapers",
year: chrono::Utc::now().year(),
wallpapers: WALLPAPERS,
}
}

View file

@ -1,8 +1,7 @@
use crate::filters; use crate::filters;
use crate::types::*; use crate::types::*;
use askama::Template;
#[derive(Template)] #[derive(askama::Template)]
#[template(path = "pages/root.html")] #[template(path = "pages/root.html")]
pub struct Root<'a> { pub struct Root<'a> {
pub title: &'a str, pub title: &'a str,
@ -20,7 +19,7 @@ struct RootResponder<'a> {
template: Root<'a>, template: Root<'a>,
} }
#[derive(Template)] #[derive(askama::Template)]
#[template(path = "pages/404.html")] #[template(path = "pages/404.html")]
pub struct NotFound<'a> { pub struct NotFound<'a> {
pub title: &'a str, pub title: &'a str,
@ -32,7 +31,7 @@ struct NotFoundResponder<'a> {
template: NotFound<'a>, template: NotFound<'a>,
} }
#[derive(Template)] #[derive(askama::Template)]
#[template(path = "pages/email.html")] #[template(path = "pages/email.html")]
pub struct Email<'a> { pub struct Email<'a> {
pub title: &'a str, pub title: &'a str,
@ -43,3 +42,16 @@ pub struct Email<'a> {
struct EmailResponder<'a> { struct EmailResponder<'a> {
template: Email<'a>, template: Email<'a>,
} }
#[derive(askama::Template)]
#[template(path = "pages/wallpapers.html")]
pub struct Wallpapers<'a> {
pub title: &'a str,
pub year: i32,
pub wallpapers: &'static [&'static Wallpaper],
}
#[derive(rocket::Responder)]
struct WallpapersResponder<'a> {
template: Wallpapers<'a>,
}

View file

@ -26,9 +26,20 @@ pub struct Link {
pub struct Location { pub struct Location {
pub precise: &'static str, pub precise: &'static str,
pub broad: &'static str, pub broad: &'static str,
pub gps: Gps,
}
pub struct Gps {
pub latitude: f32, pub latitude: f32,
pub longitude: f32, pub longitude: f32,
} }
impl std::fmt::Display for Gps {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "[{}, {}]", self.latitude, self.longitude)
}
}
pub struct Wallpaper { pub struct Wallpaper {
pub file: &'static str, pub file: &'static str,
pub date: &'static str, pub date: &'static str,

View file

@ -7,6 +7,7 @@ module.exports = {
extend: { extend: {
height: { height: {
almostscreen: '90vh', almostscreen: '90vh',
halfscreen: '60vh',
} }
}, },
}, },

View file

@ -0,0 +1,27 @@
{% extends "content.html" %}
{% block content %}
<p class="mb-2">Pictures I took around the world</p>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
<div id="map" class="w-full h-halfscreen"></div>
<script>
let map = L.map('map').setView([0, 0], 1);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
</script>
{% for wallpaper in wallpapers %}
<script>
var marker = L.marker({{ wallpaper.location.gps }}).addTo(map);
marker.bindPopup(`<a target="_blank" href="{{ wallpaper.file }}">{{ wallpaper.location.precise }}</a><br>{{ wallpaper.location.broad }}<br><b>{{ wallpaper.date }}</b>`);
</script>
{% endfor %}
{% endblock %}