feat: Settings submenu (Settings.../About...), git column, projects tab

- main.cpp: registrar info About via fn_ui::about_window_set_info
- views.cpp: nueva columna "Git" en la tabla Apps (remote/local/-)
- data.h/cpp + data_http.cpp: AppRow gana repo_url + dir_path
- views.cpp: actions bar (Reindex / + Add / Reload / inbox) y modal Add
- views.cpp: tab Projects con tree + detalle anidado
- data_http.cpp: load_projects_http, load_project_detail_http, http_post_*
- http_client.cpp: SO_RCVTIMEO en Windows como DWORD ms (timeout 5 ms bug)
- CMakeLists: limpieza de srcs duplicados con fn_framework
- app.md: notas operativas y estado actual

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-28 22:04:58 +02:00
parent 57d8f0198a
commit a466fff71a
10 changed files with 800 additions and 59 deletions
+33
View File
@@ -55,11 +55,14 @@ struct AppRow {
std::string domain;
std::string description;
std::string framework;
std::string repo_url;
std::string dir_path;
};
struct AnalysisRow {
std::string id;
std::string name;
std::string lang;
std::string domain;
std::string description;
};
@@ -73,6 +76,32 @@ struct TypeRow {
std::string description;
};
struct VaultRow {
std::string id;
std::string name;
std::string path;
std::string description;
bool symlink = false;
};
struct ProjectRow {
std::string id;
std::string name;
std::string description;
int apps_count = 0;
int analyses_count = 0;
int vaults_count = 0;
};
struct ProjectDetail {
std::string id; // "" si no hay seleccion; "orphans" para huerfanas
std::string name;
std::string description;
std::vector<AppRow> apps;
std::vector<AnalysisRow> analyses;
std::vector<VaultRow> vaults;
};
// All data loaded from registry.db in one shot
struct RegistryData {
RegistryStats stats;
@@ -84,6 +113,10 @@ struct RegistryData {
std::vector<AppRow> apps;
std::vector<AnalysisRow> analyses;
std::vector<TypeRow> types;
std::vector<ProjectRow> projects;
int orphan_apps = 0;
int orphan_analyses = 0;
int orphan_vaults = 0;
// For chart data (populated by prepare_chart_data)
std::vector<std::string> lang_labels;