feat(framework): assets/ subfolder para distribuibles read-only
Refina la convencion de layout: el top de cada app distribuible solo lleva el .exe + DLLs nativas; todo lo demas (TTFs, enrichers, runtime Python, MCP servers) vive en <exe_dir>/assets/. Cambios: - cpp/CMakeLists.txt::add_imgui_app — copia las 5 TTFs (Karla, Roboto, DroidSans, Cousine, tabler-icons) a $<TARGET_FILE_DIR>/assets/ en lugar de junto al exe. - framework/app_base: nuevas funciones fn::asset_dir() y fn::asset_path(name) que resuelven a <exe_dir>/assets/<name>. - functions/core/icon_font.cpp::find_asset — anade fn::asset_path(filename) como PRIMERA ruta de busqueda, antes de las legacy ./<file> y ./assets/<file>. Mantiene los fallbacks para dev (FN_ASSETS_DIR, FN_CPP_ROOT). - .claude/commands/compile.md — el deploy a Desktop pone TTFs + enrichers/ + runtime/ + gx-cli en <DEST>/assets/. Solo .exe y DLLs nativas (duckdb.dll) quedan en el top. local_files/ se preserva si existe. Layout final: Desktop/apps/<APP>/ ├── <APP>.exe + *.dll (binario + DLLs Windows) ├── assets/ (read-only distribuible) │ ├── *.ttf, enrichers/, runtime/, gx-cli, ... └── local_files/ (per-PC, creado al primer arranque) Esto cierra la separacion conceptual de la convencion: la carpeta es trivial de zippear (solo .exe + assets/), el reset/sync es trivial (local_files/), y todas las apps del registry adoptan el mismo layout via fn_framework. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "icon_font.h"
|
||||
|
||||
#include "app_settings.h"
|
||||
#include "../../framework/app_base.h"
|
||||
#include "imgui.h"
|
||||
|
||||
#include <cstdio>
|
||||
@@ -25,13 +26,18 @@ bool file_exists(const char* path) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Busca un asset (TTF) en las rutas estandar del registry. Devuelve la primera
|
||||
// Busca un asset (TTF) en las rutas estandar. Devuelve la primera
|
||||
// ruta valida o vacio.
|
||||
//
|
||||
// Orden: ./<filename> → ./assets/<filename> → $FN_ASSETS_DIR/<filename>
|
||||
// → ${FN_CPP_ROOT}/<repo_subpath>
|
||||
// Orden:
|
||||
// 1. fn::asset_path(filename) <exe_dir>/assets/<filename>
|
||||
// 2. ./<filename> cwd directo (legacy)
|
||||
// 3. ./assets/<filename> cwd subdir (legacy / dev)
|
||||
// 4. $FN_ASSETS_DIR/<filename> override env
|
||||
// 5. ${FN_CPP_ROOT}/<repo_subpath> fuente del repo (dev sin build)
|
||||
std::string find_asset(const char* filename, const char* repo_subpath) {
|
||||
std::string p;
|
||||
p = fn::asset_path(filename); if (file_exists(p.c_str())) return p;
|
||||
p = std::string("./") + filename; if (file_exists(p.c_str())) return p;
|
||||
p = std::string("./assets/") + filename; if (file_exists(p.c_str())) return p;
|
||||
if (const char* env = std::getenv("FN_ASSETS_DIR")) {
|
||||
|
||||
Reference in New Issue
Block a user