File karukan-server-static-path.patch of Package karukan
--- a/karukan-cli/src/bin/server.rs
+++ b/karukan-cli/src/bin/server.rs
@@ -13,6 +13,7 @@ use karukan_engine::kanji::{
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
+use std::{env, path::Path};
use tower_http::{
cors::{Any, CorsLayer},
services::ServeDir,
@@ -275,9 +276,24 @@ async fn main() {
if args.debug {
app = app.route("/api/tokenize", post(tokenize_handler));
}
+
+ // Prefer packaged static files, but keep local dev fallback.
+ let static_dir = env::var("KARUKAN_STATIC_DIR")
+ .ok()
+ .filter(|v| !v.is_empty())
+ .or_else(|| {
+ if Path::new("/usr/share/karukan/static").is_dir() {
+ Some("/usr/share/karukan/static".to_string())
+ } else if Path::new("static").is_dir() {
+ Some("static".to_string())
+ } else {
+ None
+ }
+ })
+ .unwrap_or_else(|| "/usr/share/karukan/static".to_string());
let app = app
- .fallback_service(ServeDir::new("static"))
+ .fallback_service(ServeDir::new(static_dir))
.layer(DefaultBodyLimit::max(256 * 1024)) // 256 KB
.layer(cors)
.with_state(state);