|
|
@@ -74,6 +74,7 @@ using water::String; |
|
|
|
static bool gIsInitiated = false; |
|
|
|
static volatile bool gCloseNow = false; |
|
|
|
static volatile bool gSaveNow = false; |
|
|
|
static volatile bool gLoadNow = false; |
|
|
|
|
|
|
|
#if defined(CARLA_OS_UNIX) |
|
|
|
static void closeSignalHandler(int) noexcept |
|
|
@@ -84,6 +85,10 @@ static void saveSignalHandler(int) noexcept |
|
|
|
{ |
|
|
|
gSaveNow = true; |
|
|
|
} |
|
|
|
static void loadSignalHandler(int) noexcept |
|
|
|
{ |
|
|
|
gLoadNow = true; |
|
|
|
} |
|
|
|
#elif defined(CARLA_OS_WIN) |
|
|
|
static BOOL WINAPI winSignalHandler(DWORD dwCtrlType) noexcept |
|
|
|
{ |
|
|
@@ -112,6 +117,11 @@ static void initSignalHandler() |
|
|
|
sig.sa_flags = SA_RESTART; |
|
|
|
sigemptyset(&sig.sa_mask); |
|
|
|
sigaction(SIGUSR1, &sig, nullptr); |
|
|
|
|
|
|
|
sig.sa_handler = loadSignalHandler; |
|
|
|
sig.sa_flags = SA_RESTART; |
|
|
|
sigemptyset(&sig.sa_mask); |
|
|
|
sigaction(SIGUSR2, &sig, nullptr); |
|
|
|
#elif defined(CARLA_OS_WIN) |
|
|
|
SetConsoleCtrlHandler(winSignalHandler, TRUE); |
|
|
|
#endif |
|
|
@@ -122,6 +132,31 @@ static void initSignalHandler() |
|
|
|
static String gProjectFilename; |
|
|
|
static CarlaHostHandle gHostHandle; |
|
|
|
|
|
|
|
static void gLoadPluginState() |
|
|
|
{ |
|
|
|
if (File(gProjectFilename).existsAsFile()) |
|
|
|
{ |
|
|
|
if (carla_load_plugin_state(gHostHandle, 0, gProjectFilename.toRawUTF8())) |
|
|
|
carla_stdout("Plugin state loaded successfully"); |
|
|
|
else |
|
|
|
carla_stderr("Plugin state load failed, error was:\n%s", carla_get_last_error(gHostHandle)); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
carla_stdout("Previous plugin state in '%s' is non-existent, will use default state", |
|
|
|
gProjectFilename.toRawUTF8()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void gSavePluginState() |
|
|
|
{ |
|
|
|
if (gProjectFilename.isNotEmpty()) |
|
|
|
{ |
|
|
|
if (! carla_save_plugin_state(gHostHandle, 0, gProjectFilename.toRawUTF8())) |
|
|
|
carla_stderr("Plugin preset save failed, error was:\n%s", carla_get_last_error(gHostHandle)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void gIdle() |
|
|
|
{ |
|
|
|
carla_engine_idle(gHostHandle); |
|
|
@@ -129,12 +164,13 @@ static void gIdle() |
|
|
|
if (gSaveNow) |
|
|
|
{ |
|
|
|
gSaveNow = false; |
|
|
|
gSavePluginState(); |
|
|
|
} |
|
|
|
|
|
|
|
if (gProjectFilename.isNotEmpty()) |
|
|
|
{ |
|
|
|
if (! carla_save_plugin_state(gHostHandle, 0, gProjectFilename.toRawUTF8())) |
|
|
|
carla_stderr("Plugin preset save failed, error was:\n%s", carla_get_last_error(gHostHandle)); |
|
|
|
} |
|
|
|
if (gLoadNow) |
|
|
|
{ |
|
|
|
gLoadNow = false; |
|
|
|
gLoadPluginState(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -212,18 +248,7 @@ public: |
|
|
|
if (! File::isAbsolutePath(gProjectFilename)) |
|
|
|
gProjectFilename = File::getCurrentWorkingDirectory().getChildFile(gProjectFilename).getFullPathName(); |
|
|
|
|
|
|
|
if (File(gProjectFilename).existsAsFile()) |
|
|
|
{ |
|
|
|
if (carla_load_plugin_state(gHostHandle, 0, gProjectFilename.toRawUTF8())) |
|
|
|
carla_stdout("Plugin state loaded successfully"); |
|
|
|
else |
|
|
|
carla_stderr("Plugin state load failed, error was:\n%s", carla_get_last_error(gHostHandle)); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
carla_stdout("Previous plugin state in '%s' is non-existent, will start from default state", |
|
|
|
gProjectFilename.toRawUTF8()); |
|
|
|
} |
|
|
|
gLoadPluginState(); |
|
|
|
} |
|
|
|
|
|
|
|
gIsInitiated = true; |
|
|
|