fix: move CarlaHost to Engine struct and fix TUI plugin dialog access

Co-authored-by: aider (deepseek/deepseek-coder) <aider@aider.chat>
This commit is contained in:
Loic Coenen
2026-05-03 10:30:36 +00:00
parent 8c9804d2ef
commit adcc5e14cf
5 changed files with 16 additions and 13 deletions

View File

@@ -191,6 +191,10 @@ int engine_init(Engine *engine, const char *client_name, DispatchFn dispatch) {
engine->sample_rate = jack_get_sample_rate(engine->client);
// Initialize Carla host
carla_init(&engine->carla_host, engine->client);
carla_scan_plugins(&engine->carla_host);
return 0;
}

View File

@@ -5,6 +5,7 @@
#include <jack/midiport.h>
#include <stdbool.h>
#include "dispatcher.h"
#include "carla.h"
typedef struct {
jack_client_t *client;
@@ -18,6 +19,8 @@ typedef struct {
DispatchFn dispatch;
jack_nframes_t sample_rate;
bool running;
CarlaHost carla_host; // Carla host state for plugin management
} Engine;
int engine_init(Engine *engine, const char *client_name, DispatchFn dispatch);

9
gui.c
View File

@@ -46,7 +46,7 @@ static int loop_length = 8; /* beats */
static int current_beat = 0;
/* Carla host and plugin URI input */
static CarlaHost carla_host;
/* CarlaHost is now stored in Engine struct */
static char plugin_uri_input[256];
static int plugin_uri_input_len = 0;
static int selected_channel = 0;
@@ -136,7 +136,7 @@ static void gui_update(void)
mu_layout_row(ctx, 1, (int[]) { -1 }, 0);
if (mu_button(ctx, "Add Plugin")) {
if (plugin_uri_input_len > 0) {
carla_add_plugin(&carla_host, selected_channel, plugin_uri_input, PLUGIN_TYPE_INTERNAL);
carla_add_plugin(&g_engine->carla_host, selected_channel, plugin_uri_input, PLUGIN_TYPE_INTERNAL);
plugin_uri_input_len = 0;
plugin_uri_input[0] = '\0';
}
@@ -155,8 +155,7 @@ int gui_main(Engine *engine)
{
g_engine = engine;
/* Initialize Carla host */
carla_init(&carla_host, engine->client);
/* Carla host is now initialized in engine_init */
/* initialise microui */
ctx = malloc(sizeof(mu_Context));
@@ -259,7 +258,7 @@ int gui_main(Engine *engine)
}
/* cleanup */
carla_cleanup(&carla_host);
carla_cleanup(&g_engine->carla_host);
endwin();
free(ctx);
return 0;

5
main.c
View File

@@ -97,10 +97,7 @@ int main(int argc, char *argv[]) {
initial_state.clips[i].read_position = 0;
}
// Initialize Carla host in the initial state (before dispatcher starts)
carla_init(&initial_state.carla_host, NULL);
carla_scan_plugins(&initial_state.carla_host);
// Carla host is now initialized in engine_init
// Initialize dispatcher
dispatch = dispatcher_init(&initial_state);

8
tui.c
View File

@@ -323,7 +323,7 @@ static void draw_fuzzy_search(void) {
attron(A_REVERSE);
}
int count;
const char **plugins = carla_get_available_plugins(NULL, &count);
const char **plugins = carla_get_available_plugins(&g_engine->carla_host, &count);
if (plugins && idx >= 0 && idx < count) {
mvprintw(start_y + 2 + i, start_x, "%s", plugins[idx]);
}
@@ -360,7 +360,7 @@ static bool handle_fuzzy_search(int ch) {
// Update results
fuzzy_search.num_results = 0;
int count;
const char **plugins = carla_get_available_plugins(NULL, &count);
const char **plugins = carla_get_available_plugins(&g_engine->carla_host, &count);
for (int i = 0; i < count; i++) {
if (fuzzy_match(fuzzy_search.query, plugins[i])) {
fuzzy_search.result_indices[fuzzy_search.num_results++] = i;
@@ -391,7 +391,7 @@ static bool handle_fuzzy_search(int ch) {
// Update results
fuzzy_search.num_results = 0;
int count;
const char **plugins = carla_get_available_plugins(NULL, &count);
const char **plugins = carla_get_available_plugins(&g_engine->carla_host, &count);
for (int i = 0; i < count; i++) {
if (fuzzy_match(fuzzy_search.query, plugins[i])) {
fuzzy_search.result_indices[fuzzy_search.num_results++] = i;
@@ -417,7 +417,7 @@ static void start_fuzzy_search(const char *prompt, void (*callback)(const char *
// Initialize results with all plugins
fuzzy_search.num_results = 0;
int count = 0;
carla_get_available_plugins(NULL, &count);
carla_get_available_plugins(&g_engine->carla_host, &count);
for (int i = 0; i < count; i++) {
fuzzy_search.result_indices[fuzzy_search.num_results++] = i;
}