+#[get("/pgen/3/{scale}")]
+async fn img_pgen3(req: HttpRequest, path: web::Path<u32>, canvas2: web::Data<Arc<Mutex<Canvas2>>>) -> Result<impl Responder> {
+ let scale = path.into_inner();
+ let data = match req.headers().get("user-agent") {
+ Some(header) => header.to_str().unwrap_or(""),
+ _ => ""
+ };
+ let time = OffsetDateTime::now_utc().time();
+ let (hour, minute): (i64, i64) = (time.hour().into(), time.minute().into());
+ let rgbimg: RgbImage = rgb_encode(ImageBuffer::new(TIMEAVATAR_SIZE_U32, TIMEAVATAR_SIZE_U32), &mut data.bytes())?;
+ let resimg: RgbImage = ({
+ let canvas_option = &mut *canvas2.lock().unwrap();
+ let mut canvas = match canvas_option.0.take() {
+ Some(canvas) => canvas,
+ None => Canvas::new(60 * TIMEAVATAR_SIZE_U32, 24 * TIMEAVATAR_SIZE_U32)
+ };
+ overlay(&mut canvas.img, &rgbimg, minute * TIMEAVATAR_SIZE_I64, hour * TIMEAVATAR_SIZE_I64);
+ Ok(canvas_option.0.insert(canvas).img.clone())
+ } as Result<RgbImage, CanvasError>)?;
+ let cursor = image_to_cursor(resimg, scale)?;
+ Ok(HttpResponse::build(StatusCode::OK)
+ .content_type("image/png")
+ .body(cursor.into_inner()))
+}
+