From e987e8714a6c9e92b5c519cf3b0f476d58a293d0 Mon Sep 17 00:00:00 2001 From: Jonni Liljamo Date: Wed, 18 Jan 2023 21:21:05 +0200 Subject: [PATCH] feat: serve the image straight, dont redirect --- src/main.rs | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index 00126a6..e512255 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,6 @@ -use actix_web::{self, get, web, App, HttpResponse, HttpServer, Responder}; +use actix_web::{ + self, get, http::header::ContentType, web, App, HttpResponse, HttpServer, Responder, +}; use rand::seq::SliceRandom; use reqwest; use serde::Deserialize; @@ -42,7 +44,7 @@ struct WHSearchRes { pub data: Vec, } -/// get redirected to random img +/// get a random image /// e.g. localhost:3000/random/2560x1440/16x9/100/001/+forest #[get("/random/{atleast}/{ratios}/{purity}/{categories}/{q}")] async fn random(args: web::Path) -> impl Responder { @@ -59,7 +61,9 @@ async fn random(args: web::Path) -> impl Responder { log::info!("doing the thing with args 'atl={atl} rats={rats} pur={pur} cats={cats} q={q}'"); - let search_resp = reqwest::get(wh_url).await; + let client = reqwest::Client::new(); + + let search_resp = client.get(wh_url).send().await; match search_resp { Err(err) => { @@ -77,9 +81,28 @@ async fn random(args: web::Path) -> impl Responder { Ok(res) => { let imgs = res.data; let url = imgs.choose(&mut rand::thread_rng()).unwrap(); - return HttpResponse::TemporaryRedirect() - .append_header(("Location", url.path.clone())) - .finish(); + + let img_resp = client.get(url.path.clone()).send().await; + + match img_resp { + Err(err) => { + log::error!("no voi vittu ny... err is '{err}'"); + } + Ok(img_res) => { + let img_bytes_res = img_res.bytes().await; + + match img_bytes_res { + Err(err) => { + log::error!("how lol. err is '{err}'"); + } + Ok(img_bytes) => { + return HttpResponse::Ok() + .content_type(ContentType::jpeg()) + .body(img_bytes); + } + } + } + } } } } -- 2.44.1