Add Support for Expressions
All checks were successful
Build and Test / cache-mii (push) Successful in 3m20s
All checks were successful
Build and Test / cache-mii (push) Successful in 3m20s
This commit is contained in:
parent
6299bb5ab3
commit
fecd2da25f
2 changed files with 37 additions and 11 deletions
|
|
@ -1,4 +1,2 @@
|
||||||
# Cache Mii
|
# Cache Mii
|
||||||
Mii Render Caching Server that saves a .png and .tga render of a user's mii for use across SPFN's services
|
Mii Render Caching Server that saves a .png and .tga render of a user's mii for use across SPFN's services
|
||||||
|
|
||||||
Renderer Used: https://mii-server.cubexmine.dev/
|
|
||||||
|
|
|
||||||
46
src/main.rs
46
src/main.rs
|
|
@ -7,9 +7,39 @@ use bytes::Bytes;
|
||||||
|
|
||||||
static MII_RENDERER_URL: &str = "https://mii-renderer.bloxerhd.co.uk";
|
static MII_RENDERER_URL: &str = "https://mii-renderer.bloxerhd.co.uk";
|
||||||
|
|
||||||
async fn request_mii_render(client: &State<Client>, mii_data: &str, ext: &str) -> Result<Bytes, (Status, String)> {
|
static EXPRESSIONS: [&str; 24] = [
|
||||||
|
"normal", "normal_open_mouth",
|
||||||
|
"happy", "open_mouth",
|
||||||
|
"smile", "smile_open_mouth",
|
||||||
|
"anger", "anger_open_mouth",
|
||||||
|
"sorrow", "sorrow_open_mouth",
|
||||||
|
"surprise", "surprise_open_mouth",
|
||||||
|
"blink", "blink_open_mouth",
|
||||||
|
"like", "like_wink_left", "like_wink_right",
|
||||||
|
"wink_left", "wink_left_open_mouth",
|
||||||
|
"wink_right", "wink_right_open_mouth",
|
||||||
|
"frustrated", "surprised", "puzzled",
|
||||||
|
];
|
||||||
|
|
||||||
|
static EXTENSIONS: [&str; 2] = [
|
||||||
|
"png", "tga"
|
||||||
|
];
|
||||||
|
|
||||||
|
async fn request_mii_render(client: &State<Client>, mii_data: &str, path: &str) -> Result<Bytes, (Status, String)> {
|
||||||
|
let expression = path.splitn(2, ".").nth(0).unwrap_or("normal");
|
||||||
|
let ext = path.splitn(2, ".").nth(1).unwrap_or(".png");
|
||||||
|
|
||||||
let mii_data = urlencoding::encode(mii_data);
|
let mii_data = urlencoding::encode(mii_data);
|
||||||
let req_str = format!("{MII_RENDERER_URL}/miis/image.{ext}?data={mii_data}");
|
let expression = if expression == "main" {
|
||||||
|
"normal"
|
||||||
|
} else {
|
||||||
|
expression
|
||||||
|
};
|
||||||
|
|
||||||
|
if !EXPRESSIONS.contains(&expression) { return Err((Status::BadRequest, format!("{expression} is not a valid expression"))) };
|
||||||
|
if !EXTENSIONS.contains(&ext) { return Err((Status::BadRequest, format!("{ext} is not a valid file extension"))) }
|
||||||
|
|
||||||
|
let req_str = format!("{MII_RENDERER_URL}/miis/image.{ext}?data={mii_data}&expression={expression}");
|
||||||
|
|
||||||
let response = client.get(req_str)
|
let response = client.get(req_str)
|
||||||
.send()
|
.send()
|
||||||
|
|
@ -45,8 +75,6 @@ async fn request_mii_render(client: &State<Client>, mii_data: &str, ext: &str) -
|
||||||
|
|
||||||
#[rocket::get("/<pid>/<path>")]
|
#[rocket::get("/<pid>/<path>")]
|
||||||
pub async fn mii_render(pid: i32, path: &str, client: &State<Client>) -> Result<NamedFile, (Status, String)> {
|
pub async fn mii_render(pid: i32, path: &str, client: &State<Client>) -> Result<NamedFile, (Status, String)> {
|
||||||
let ext = path.splitn(2, ".").nth(1).unwrap_or(".png");
|
|
||||||
|
|
||||||
let mii_data = {
|
let mii_data = {
|
||||||
let route = format!("https://account.spfn.net/api/v2/users/{pid}/mii");
|
let route = format!("https://account.spfn.net/api/v2/users/{pid}/mii");
|
||||||
let response = client.get(route)
|
let response = client.get(route)
|
||||||
|
|
@ -94,11 +122,11 @@ pub async fn mii_render(pid: i32, path: &str, client: &State<Client>) -> Result<
|
||||||
Ok(hash) => {
|
Ok(hash) => {
|
||||||
if hash == mii_data { // Cached images are correct
|
if hash == mii_data { // Cached images are correct
|
||||||
if !img_path.exists() || !img_path.is_file() { // File type was not found - Request data
|
if !img_path.exists() || !img_path.is_file() { // File type was not found - Request data
|
||||||
let img_data = request_mii_render(client, &mii_data, ext).await?;
|
let img_data = request_mii_render(client, &mii_data, path).await?;
|
||||||
let _ = std::fs::write(&img_path, &img_data);
|
let _ = std::fs::write(&img_path, &img_data);
|
||||||
}
|
}
|
||||||
} else { // Cached images are outdated - Update data
|
} else { // Cached images are outdated - Update data
|
||||||
let img_data = request_mii_render(client, &mii_data, ext).await?;
|
let img_data = request_mii_render(client, &mii_data, path).await?;
|
||||||
let _ = std::fs::write(&img_path, &img_data);
|
let _ = std::fs::write(&img_path, &img_data);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -106,14 +134,14 @@ pub async fn mii_render(pid: i32, path: &str, client: &State<Client>) -> Result<
|
||||||
Err(_) => { // Data cannot be read - Request data
|
Err(_) => { // Data cannot be read - Request data
|
||||||
let _ = std::fs::write(data_path, &mii_data);
|
let _ = std::fs::write(data_path, &mii_data);
|
||||||
|
|
||||||
let img_data = request_mii_render(client, &mii_data, ext).await?;
|
let img_data = request_mii_render(client, &mii_data, path).await?;
|
||||||
let _ = std::fs::write(&img_path, &img_data);
|
let _ = std::fs::write(&img_path, &img_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // Data isn't saved - Request data
|
} else { // Data isn't saved - Request data
|
||||||
let _ = std::fs::write(data_path, &mii_data);
|
let _ = std::fs::write(data_path, &mii_data);
|
||||||
|
|
||||||
let img_file = request_mii_render(client, &mii_data, ext).await?;
|
let img_file = request_mii_render(client, &mii_data, path).await?;
|
||||||
let _ = std::fs::write(&img_path, &img_file);
|
let _ = std::fs::write(&img_path, &img_file);
|
||||||
}
|
}
|
||||||
} else { // Mii data was never cached - Request data
|
} else { // Mii data was never cached - Request data
|
||||||
|
|
@ -121,7 +149,7 @@ pub async fn mii_render(pid: i32, path: &str, client: &State<Client>) -> Result<
|
||||||
|
|
||||||
let _ = std::fs::write(data_path, &mii_data);
|
let _ = std::fs::write(data_path, &mii_data);
|
||||||
|
|
||||||
let img_data = request_mii_render(client, &mii_data, ext).await?;
|
let img_data = request_mii_render(client, &mii_data, path).await?;
|
||||||
let _ = std::fs::write(&img_path, &img_data);
|
let _ = std::fs::write(&img_path, &img_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue