[SCM] calf/master: + JACK host: added support for LASH session restore
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:36:56 UTC 2013
The following commit has been merged in the master branch:
commit 6048c3c4db48c3373835113e5e67bd33c9aaa327
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date: Wed Jan 9 22:04:49 2008 +0000
+ JACK host: added support for LASH session restore
git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@84 78b06b96-2940-0410-b7fc-879d825d01d8
diff --git a/configure.in b/configure.in
index 4a7c28b..d7f0e91 100644
--- a/configure.in
+++ b/configure.in
@@ -162,7 +162,7 @@ AC_MSG_RESULT([
DSSI GUI enabled: $DSSI_GUI_ENABLED
JACK host enabled: $JACK_ENABLED
LV2 enabled: $LV2_ENABLED (unused for now)
- LASH enabled: $LASH_ENABLED (unused for now)
+ LASH enabled: $LASH_ENABLED
Old-style JACK MIDI: $OLD_JACK
PHAT GUI enabled: $PHAT_ENABLED
diff --git a/src/calf/preset.h b/src/calf/preset.h
index 5250bf1..85836f9 100644
--- a/src/calf/preset.h
+++ b/src/calf/preset.h
@@ -84,6 +84,7 @@ struct preset_list
static std::string get_preset_filename();
bool load_defaults();
+ void parse(const std::string &data);
void load(const char *filename);
void save(const char *filename);
void add(const plugin_preset &sp);
diff --git a/src/jackhost.cpp b/src/jackhost.cpp
index 9ec2355..d1e463d 100644
--- a/src/jackhost.cpp
+++ b/src/jackhost.cpp
@@ -285,6 +285,8 @@ void host_session::update_lash()
if (!event)
break;
+ // printf("type = %d\n", lash_event_get_type(event));
+
switch(lash_event_get_type(event)) {
case LASH_Save_Data_Set:
{
@@ -302,13 +304,40 @@ void host_session::update_lash()
send_lash(LASH_Save_Data_Set, "");
break;
}
+
+ case LASH_Restore_Data_Set:
+ {
+ // printf("!!!Restore data set!!!\n");
+ while(lash_config_t *cfg = lash_get_config(lash_client)) {
+ const char *key = lash_config_get_key(cfg);
+ // printf("key = %s\n", lash_config_get_key(cfg));
+ string data = string((const char *)lash_config_get_value(cfg), lash_config_get_value_size(cfg));
+ if (!strncmp(key, "plugin", 6))
+ {
+ unsigned int nplugin = atoi(key + 6);
+ if (nplugin < plugins.size())
+ {
+ preset_list tmp;
+ tmp.parse("<presets>"+data+"</presets>");
+ if (tmp.presets.size())
+ {
+ tmp.presets[0].activate(plugins[nplugin]);
+ guis[nplugin]->gui->refresh();
+ }
+ }
+ }
+ lash_config_destroy(cfg);
+ }
+ send_lash(LASH_Restore_Data_Set, "");
+ break;
+ }
case LASH_Quit:
gtk_main_quit();
break;
default:
- printf("Unhandled event %d (%s)\n", lash_event_get_type(event), lash_event_get_string(event));
+ g_warning("Unhandled LASH event %d (%s)", lash_event_get_type(event), lash_event_get_string(event));
break;
}
} while(1);
@@ -333,7 +362,7 @@ int main(int argc, char *argv[])
sess.lash_args = lash_extract_args(&argc, &argv);
sess.lash_client = lash_init(sess.lash_args, PACKAGE_NAME, LASH_Config_Data_Set, LASH_PROTOCOL(2, 0));
if (!sess.lash_client) {
- fprintf(stderr, "Warning: failed to create a LASH connection\n");
+ g_warning("Warning: failed to create a LASH connection");
}
#endif
glade_init();
diff --git a/src/preset.cpp b/src/preset.cpp
index 250bd1a..93d9ef2 100644
--- a/src/preset.cpp
+++ b/src/preset.cpp
@@ -200,6 +200,18 @@ bool preset_list::load_defaults()
return false;
}
+void preset_list::parse(const std::string &data)
+{
+ state = START;
+ XML_Parser parser = XML_ParserCreate("UTF-8");
+ XML_SetUserData(parser, this);
+ XML_SetElementHandler(parser, xml_start_element_handler, xml_end_element_handler);
+ XML_Status status = XML_Parse(parser, data.c_str(), data.length(), 1);
+ if (status == XML_STATUS_ERROR)
+ throw preset_exception(string("Parse error: ") + XML_ErrorString(XML_GetErrorCode(parser))+ " in ", "string", errno);
+ XML_ParserFree(parser);
+}
+
void preset_list::load(const char *filename)
{
state = START;
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list