Implement /gen/3
authorMegaBrutal <code+git@megabrutal.com>
Sat, 15 Oct 2022 00:30:30 +0000 (02:30 +0200)
committerMegaBrutal <code+git@megabrutal.com>
Sat, 15 Oct 2022 00:30:30 +0000 (02:30 +0200)
src/main.rs

index 01ce022b41158354acf337c49c1b63ab131a9bd1..8653ec3d9da8d766f2c7ae43a6088fa52a9cfe2d 100644 (file)
@@ -12,8 +12,9 @@ use actix_web::body::BoxBody;
 use actix_web::http::StatusCode;
 use image::{ImageBuffer, ColorType, Rgb, RgbImage, write_buffer_with_format};
 use image::ImageOutputFormat::Png;
-use image::imageops::{FilterType, resize};
+use image::imageops::{FilterType, overlay, resize};
 use image::error::{LimitError, LimitErrorKind};
+use actix_web::cookie::time::OffsetDateTime;
 
 
 #[derive(Debug)]
@@ -264,6 +265,23 @@ async fn img_gen2(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result<
        .body(cursor.into_inner()))
 }
 
+#[get("/gen/3/{scale}")]
+async fn img_gen3(req: HttpRequest, path: web::Path<u32>) -> Result<impl Responder> {
+    let scale = path.into_inner();
+    let data = match req.headers().get("user-agent") {
+        Some(header) => header.to_str().unwrap_or(""),
+        _ => ""
+    };
+    let rgbimg: RgbImage = rgb_encode(ImageBuffer::new(6, 6), &mut data.bytes())?;
+    let mut resimg: RgbImage = ImageBuffer::new(60 * 6, 24 * 6);
+    let time = OffsetDateTime::now_utc().time();
+    overlay(&mut resimg, &rgbimg, (time.minute() * 6).into(), (time.hour() * 6).into());
+    let cursor = image_to_cursor(resimg, scale)?;
+    Ok(HttpResponse::build(StatusCode::OK)
+       .content_type("image/png")
+       .body(cursor.into_inner()))
+}
+
 #[get("/pgen/0/{data}")]
 async fn img_pgen0(req: HttpRequest, canvas0: web::Data<Arc<Mutex<Canvas0>>>) -> Result<impl Responder> {
     let data = req.uri().path().split("/").skip(3).next().unwrap();
@@ -333,6 +351,7 @@ async fn main() -> std::io::Result<()> {
             .service(img_gen0)
             .service(img_gen1)
             .service(img_gen2)
+            .service(img_gen3)
             .service(img_pgen0)
             .service(img_pgen1)
             .service(img_pgen2)