|
|
@@ -10,6 +10,7 @@ |
|
|
|
#include <lv2/state/state.h> |
|
|
|
|
|
|
|
#include <stdlib.h> |
|
|
|
#include <stdio.h> |
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
#ifndef HAVE_LV2_STATE_FREE_PATH |
|
|
@@ -36,16 +37,41 @@ static LV2_Handle instantiate(const LV2_Descriptor* const descriptor, |
|
|
|
const char* const bundle_path, |
|
|
|
const LV2_Feature* const* const features) |
|
|
|
{ |
|
|
|
StateTest* instance = calloc(1, sizeof(StateTest)); |
|
|
|
const LV2_State_Free_Path* freePath = NULL; |
|
|
|
const LV2_State_Make_Path* makePath = NULL; |
|
|
|
const LV2_State_Map_Path* mapPath = NULL; |
|
|
|
|
|
|
|
for (int i=0; features[i] != NULL; ++i) |
|
|
|
{ |
|
|
|
if (strcmp(features[i]->URI, LV2_STATE__freePath) == 0) |
|
|
|
instance->freePath = features[i]->data; |
|
|
|
if (strcmp(features[i]->URI, LV2_STATE__makePath) == 0) |
|
|
|
instance->makePath = features[i]->data; |
|
|
|
if (strcmp(features[i]->URI, LV2_STATE__mapPath) == 0) |
|
|
|
instance->mapPath = features[i]->data; |
|
|
|
/**/ if (strcmp(features[i]->URI, LV2_STATE__freePath) == 0) |
|
|
|
freePath = features[i]->data; |
|
|
|
else if (strcmp(features[i]->URI, LV2_STATE__makePath) == 0) |
|
|
|
makePath = features[i]->data; |
|
|
|
else if (strcmp(features[i]->URI, LV2_STATE__mapPath) == 0) |
|
|
|
mapPath = features[i]->data; |
|
|
|
} |
|
|
|
|
|
|
|
if (freePath == NULL || makePath == NULL || mapPath == NULL) |
|
|
|
return NULL; |
|
|
|
|
|
|
|
StateTest* instance = calloc(1, sizeof(StateTest)); |
|
|
|
|
|
|
|
instance->freePath = freePath; |
|
|
|
instance->makePath = makePath; |
|
|
|
instance->mapPath = mapPath; |
|
|
|
|
|
|
|
{ |
|
|
|
char* const projectPath = makePath->path(makePath->handle, "."); |
|
|
|
|
|
|
|
if (projectPath != NULL) |
|
|
|
{ |
|
|
|
printf("state-test init ok, initial path is: '%s'\n", projectPath); |
|
|
|
freePath->free_path(freePath->handle, projectPath); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
printf("state-test init ok, but failed to get initial path\n"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return instance; |
|
|
@@ -121,6 +147,12 @@ static LV2_State_Status save(LV2_Handle instance, |
|
|
|
{ |
|
|
|
instancePtr->saved = true; |
|
|
|
return LV2_STATE_SUCCESS; |
|
|
|
|
|
|
|
// TODO |
|
|
|
(void)store; |
|
|
|
(void)handle; |
|
|
|
(void)flags; |
|
|
|
(void)features; |
|
|
|
} |
|
|
|
|
|
|
|
static LV2_State_Status restore(LV2_Handle instance, |
|
|
@@ -131,6 +163,12 @@ static LV2_State_Status restore(LV2_Handle instance, |
|
|
|
{ |
|
|
|
instancePtr->restored = true; |
|
|
|
return LV2_STATE_SUCCESS; |
|
|
|
|
|
|
|
// TODO |
|
|
|
(void)retrieve; |
|
|
|
(void)handle; |
|
|
|
(void)flags; |
|
|
|
(void)features; |
|
|
|
} |
|
|
|
|
|
|
|
static const void* extension_data(const char* const uri) |
|
|
@@ -151,6 +189,7 @@ const LV2_Descriptor* lv2_descriptor(const uint32_t index) |
|
|
|
{ |
|
|
|
static const LV2_Descriptor desc = { |
|
|
|
.URI = "https://git.kx.studio/falkTX/lv2-state-test", |
|
|
|
.instantiate = instantiate, |
|
|
|
.connect_port = connect_port, |
|
|
|
.activate = activate, |
|
|
|
.run = run, |
|
|
|