Typstify /egg endpoint
This commit is contained in:
parent
6d4db1ca2e
commit
db06addc42
12 changed files with 141 additions and 112 deletions
9
showbits-thermal-printer/src/documents/egg/data.json
Normal file
9
showbits-thermal-printer/src/documents/egg/data.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"covers": 7,
|
||||
"patterns": 40,
|
||||
"bad_covers": 1,
|
||||
"bad_patterns": 7,
|
||||
"seed": 1,
|
||||
"mode": null,
|
||||
"feed": true
|
||||
}
|
||||
1
showbits-thermal-printer/src/documents/egg/egg
Symbolic link
1
showbits-thermal-printer/src/documents/egg/egg
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../../showbits-assets/data/egg
|
||||
1
showbits-thermal-printer/src/documents/egg/egg_bad
Symbolic link
1
showbits-thermal-printer/src/documents/egg/egg_bad
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../../showbits-assets/data/egg_bad
|
||||
1
showbits-thermal-printer/src/documents/egg/lib.typ
Symbolic link
1
showbits-thermal-printer/src/documents/egg/lib.typ
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../lib.typ
|
||||
55
showbits-thermal-printer/src/documents/egg/main.typ
Normal file
55
showbits-thermal-printer/src/documents/egg/main.typ
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
#import "@preview/oxifmt:0.2.1": strfmt
|
||||
#import "@preview/suiji:0.3.0": *
|
||||
#import "lib.typ";
|
||||
#show: it => lib.init(it)
|
||||
|
||||
#let data = json("data.json")
|
||||
#let rng = gen-rng(data.seed)
|
||||
|
||||
#let file_series(n, fmt) = array.range(n).map(n => strfmt(fmt, n))
|
||||
|
||||
#let good_covers = file_series(data.covers, "egg/cover_{:02}.png")
|
||||
#let good_patterns = file_series(data.patterns, "egg/pattern_{:02}.png")
|
||||
#let bad_covers = file_series(data.bad_covers, "egg_bad/cover_{:02}.png")
|
||||
#let bad_patterns = file_series(data.bad_patterns, "egg_bad/pattern_{:02}.png")
|
||||
|
||||
// Always generate random value to so that egg looks the same whether we chose
|
||||
// the mode directly or randomly.
|
||||
#let (rng, val) = random(rng)
|
||||
|
||||
#let (covers, patterns) = if data.mode == "good" {
|
||||
(good_covers, good_patterns)
|
||||
} else if data.mode == "bad" {
|
||||
(bad_covers, bad_patterns)
|
||||
} else if val < 1 / 8 {
|
||||
(bad_covers, bad_patterns)
|
||||
} else {
|
||||
(good_covers, good_patterns)
|
||||
}
|
||||
|
||||
#context {
|
||||
let (rng, cover) = choice(rng, covers)
|
||||
let cover = image(cover, width: lib.width)
|
||||
let cover_size = measure(cover)
|
||||
|
||||
let pattern_stack_height = 0pt
|
||||
let pattern_stack = while pattern_stack_height < cover_size.height {
|
||||
let pattern = ()
|
||||
(rng, pattern) = choice(rng, patterns)
|
||||
let pattern = image(pattern, width: cover_size.width)
|
||||
pattern_stack_height += measure(pattern).height
|
||||
(pattern,)
|
||||
}
|
||||
|
||||
box(
|
||||
height: cover_size.height,
|
||||
clip: true,
|
||||
stack(dir: ttb, ..pattern_stack),
|
||||
)
|
||||
|
||||
place(top + left, cover)
|
||||
}
|
||||
|
||||
#if data.feed {
|
||||
lib.feed
|
||||
}
|
||||
64
showbits-thermal-printer/src/documents/egg/mod.rs
Normal file
64
showbits-thermal-printer/src/documents/egg/mod.rs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
use axum::{Form, extract::State};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
drawer::{Command, NewTypstDrawing},
|
||||
server::Server,
|
||||
};
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct Data {
|
||||
covers: usize,
|
||||
patterns: usize,
|
||||
bad_covers: usize,
|
||||
bad_patterns: usize,
|
||||
seed: i64,
|
||||
mode: Option<String>,
|
||||
feed: bool,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct FormData {
|
||||
pub seed: Option<i64>,
|
||||
pub mode: Option<String>,
|
||||
pub feed: Option<bool>,
|
||||
}
|
||||
|
||||
pub async fn post(server: State<Server>, Form(form): Form<FormData>) {
|
||||
let seed = form.seed.unwrap_or_else(rand::random);
|
||||
|
||||
let data = Data {
|
||||
covers: showbits_assets::EGG_COVERS.len(),
|
||||
patterns: showbits_assets::EGG_PATTERNS.len(),
|
||||
bad_covers: showbits_assets::EGG_BAD_COVERS.len(),
|
||||
bad_patterns: showbits_assets::EGG_BAD_PATTERNS.len(),
|
||||
seed,
|
||||
mode: form.mode,
|
||||
feed: form.feed.unwrap_or(true),
|
||||
};
|
||||
|
||||
let mut typst = super::typst_with_lib()
|
||||
.with_json("/data.json", &data)
|
||||
.with_main_file(include_str!("main.typ"));
|
||||
|
||||
for (i, cover) in showbits_assets::EGG_COVERS.iter().enumerate() {
|
||||
typst.add_file(format!("/egg/cover_{i:02}.png"), *cover);
|
||||
}
|
||||
|
||||
for (i, pattern) in showbits_assets::EGG_PATTERNS.iter().enumerate() {
|
||||
typst.add_file(format!("/egg/pattern_{i:02}.png"), *pattern);
|
||||
}
|
||||
|
||||
for (i, cover) in showbits_assets::EGG_BAD_COVERS.iter().enumerate() {
|
||||
typst.add_file(format!("/egg_bad/cover_{i:02}.png"), *cover);
|
||||
}
|
||||
|
||||
for (i, pattern) in showbits_assets::EGG_BAD_PATTERNS.iter().enumerate() {
|
||||
typst.add_file(format!("/egg_bad/pattern_{i:02}.png"), *pattern);
|
||||
}
|
||||
|
||||
let _ = server
|
||||
.tx
|
||||
.send(Command::draw(NewTypstDrawing::new(typst)))
|
||||
.await;
|
||||
}
|
||||
1
showbits-thermal-printer/src/documents/egg/plugin.wasm
Symbolic link
1
showbits-thermal-printer/src/documents/egg/plugin.wasm
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../plugin.wasm
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
#let width = 384pt
|
||||
|
||||
#let init(it) = {
|
||||
set page(
|
||||
width: 384pt,
|
||||
width: width,
|
||||
height: auto,
|
||||
margin: (x: 0pt, y: 4pt),
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue