[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