[beast: 1/49] BSE: move most ServerImpl procedures to bseapi.idl



commit 16568479379d6cec00339d4cfa3e15fc78e7889d
Author: Tim Janik <timj gnu org>
Date:   Sat Jun 20 00:26:20 2015 +0200

    BSE: move most ServerImpl procedures to bseapi.idl

 beast-gtk/bstmain.cc        |   10 +-
 beast-gtk/bstpreferences.cc |    2 +-
 bse/bseapi.idl              |   13 ++-
 bse/bseserver.cc            |  227 ++++++++++++++++++++++++++-
 bse/bseserver.hh            |    8 +
 bse/bseserver.proc          |  372 -------------------------------------------
 6 files changed, 248 insertions(+), 384 deletions(-)
---
diff --git a/beast-gtk/bstmain.cc b/beast-gtk/bstmain.cc
index 8f7161e..969da80 100644
--- a/beast-gtk/bstmain.cc
+++ b/beast-gtk/bstmain.cc
@@ -169,7 +169,7 @@ main (int   argc,
        * so we wait until all are done
        */
       registration_done = FALSE;
-      bse_server_register_core_plugins (BSE_SERVER);
+      bse_server.register_core_plugins();
       while (!registration_done)
        {
          GDK_THREADS_LEAVE ();
@@ -188,7 +188,7 @@ main (int   argc,
        * so we wait until all are done
        */
       registration_done = FALSE;
-      bse_server_register_ladspa_plugins (BSE_SERVER);
+      bse_server.register_ladspa_plugins();
       while (!registration_done)
        {
          GDK_THREADS_LEAVE ();
@@ -216,7 +216,7 @@ main (int   argc,
        * so we wait until all are done
        */
       registration_done = FALSE;
-      bse_server_register_scripts (BSE_SERVER);
+      bse_server.register_scripts();
       while (!registration_done)
        {
          GDK_THREADS_LEAVE ();
@@ -247,7 +247,7 @@ main (int   argc,
         }
 
       /* load waves into the last project */
-      if (bse_server_can_load (BSE_SERVER, argv[i]))
+      if (bse_server.can_load (argv[i]))
        {
          if (app)
            {
@@ -401,7 +401,7 @@ main (int   argc,
   if (update_rc_files && !bst_preferences_saved())
     {
       if (may_auto_update_bse_rc_file)
-        bse_server_save_preferences (BSE_SERVER);
+        bse_server.save_preferences();
       /* save BEAST configuration and accelerator map */
       gchar *file_name = BST_STRDUP_RC_FILE ();
       BseErrorType error = bst_rc_dump (file_name);
diff --git a/beast-gtk/bstpreferences.cc b/beast-gtk/bstpreferences.cc
index 8b5852f..cde89cb 100644
--- a/beast-gtk/bstpreferences.cc
+++ b/beast-gtk/bstpreferences.cc
@@ -316,7 +316,7 @@ bst_preferences_save (BstPreferences *self)
 
   g_return_if_fail (BST_IS_PREFERENCES (self));
 
-  bse_server_save_preferences (BSE_SERVER);
+  bse_server.save_preferences();
 
   file_name = BST_STRDUP_RC_FILE ();
   error = bst_rc_dump (file_name);
diff --git a/bse/bseapi.idl b/bse/bseapi.idl
index eb5661a..3efe9d6 100644
--- a/bse/bseapi.idl
+++ b/bse/bseapi.idl
@@ -53,8 +53,17 @@ interface Server : Object {
   String        get_effect_path ();                     ///< Retrieve effect search path.
   String        get_demo_path ();                       ///< Retrieve demo search path.
   String        get_custom_instrument_dir ();           ///< Retrieve user specific instruments directory.
-  String        get_custom_effect_dir ();               ///< Retrieve user specific effects directory.
-  String        get_version ();                         ///< Retrieve BSE version.
+  String        get_custom_effect_dir ();    ///< Retrieve user specific effects directory.
+  String        get_version ();              ///< Retrieve BSE version.
+  void          save_preferences ();         ///< Save the bse-preferences property to disk.
+  void          register_ladspa_plugins();   ///< Register LADSPA (Linux Audio Developer's Simple Plugin 
API) plugins.
+  void          register_core_plugins();     ///< Register core plugins.
+  void          register_scripts();          ///< Register external scripts.
+  bool          preferences_locked();        ///< Returns whether the bse-preferences property is currently 
locked against modifications or not.
+  int32         n_scripts();                 ///< Return the number of scripts currently running on this 
server.
+  bool          can_load (String file_name); ///< Check whether a loader can be found for a wave file.
+  void          start_recording (String wave_file, float64 n_seconds); ///< Start recording to a WAV file.
+  // Project    use_new_project (String project_name);  ///< Create a new project, owned by the caller (name 
is modified to be unique if necessary.
 };
 
 } // Bse
diff --git a/bse/bseserver.cc b/bse/bseserver.cc
index c753225..e6759e0 100644
--- a/bse/bseserver.cc
+++ b/bse/bseserver.cc
@@ -11,15 +11,17 @@
 #include "bsemididevice-null.hh"
 #include "bsejanitor.hh"
 #include "bsecxxplugin.hh"
+#include "bsepcmmodule.cc"
+#include "topconfig.h"
+#include "gsldatahandle-mad.hh"
+#include "gslvorbis-enc.hh"
+#include "bsescripthelper.hh"
+#include "bseladspa.hh"
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <string.h>
-#include "bsepcmmodule.cc"
-#include "topconfig.h"
-#include "gsldatahandle-mad.hh"
-#include "gslvorbis-enc.hh"
 using namespace Bse;
 
 /* --- parameters --- */
@@ -1241,4 +1243,221 @@ ServerImpl::get_custom_instrument_dir ()
   return strings.size() ? strings[0] : "";
 }
 
+void
+ServerImpl::save_preferences ()
+{
+  gchar *file_name = g_strconcat (g_get_home_dir (), "/.bserc", NULL);
+  int fd = open (file_name, O_WRONLY | O_CREAT | O_TRUNC /* | O_EXCL */, 0666);
+  g_free (file_name);
+  if (fd < 0)
+    return;
+
+  SfiWStore *wstore = sfi_wstore_new ();
+  sfi_wstore_printf (wstore, "; rc-file for BSE v%s\n", BST_VERSION);
+
+  /* store BseGConfig */
+  sfi_wstore_puts (wstore, "\n; BseGConfig Dump\n");
+  SfiRec *rec = bse_gconfig_to_rec (bse_global_config);
+  GValue *value = sfi_value_rec (rec);
+  sfi_wstore_put_param (wstore, value, bse_gconfig_pspec ());
+  sfi_value_free (value);
+  sfi_rec_unref (rec);
+  sfi_wstore_puts (wstore, "\n");
+
+  /* flush stuff to rc file */
+  sfi_wstore_flush_fd (wstore, fd);
+  sfi_wstore_destroy (wstore);
+  close (fd);
+}
+
+static gboolean
+register_ladspa_plugins_handler (gpointer data)
+{
+  BseServer *server = (BseServer*) data;
+  SfiRing *lplugins = (SfiRing*) g_object_get_data ((GObject*) server, "ladspa-registration-queue");
+  const gchar *error;
+
+  if (g_object_get_data ((GObject*) server, "plugin-registration-queue"))
+    {
+      /* give precedence to core plugins until they're done registering */
+      return TRUE;
+    }
+
+  if (lplugins)
+    {
+      char *name = (char*) sfi_ring_pop_head (&lplugins);
+      g_object_set_data ((GObject*) server, "ladspa-registration-queue", lplugins);
+      error = bse_ladspa_plugin_check_load (name);
+      bse_server_registration (server, BSE_REGISTER_PLUGIN, name, error);
+      g_free (name);
+    }
+  else
+    {
+      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
+      return FALSE;
+    }
+  return TRUE;
+}
+
+void
+ServerImpl::register_ladspa_plugins ()
+{
+  static bool registration_done = false;
+  if (registration_done)
+    {
+      // always honor register_ladspa_plugins() with register_done signal
+      bse_server_registration (as<BseServer*>(), BSE_REGISTER_DONE, NULL, NULL);
+      return;
+    }
+  SfiRing *ring = bse_ladspa_plugin_path_list_files ();
+  BseServer *server = as<BseServer*>();
+  g_object_set_data (server, "ladspa-registration-queue", ring);
+  bse_idle_normal (register_ladspa_plugins_handler, server);
+  registration_done = true;
+}
+
+static gboolean
+register_core_plugins_handler (gpointer data)
+{
+  BseServer *server = (BseServer*) data;
+  SfiRing *plugins = (SfiRing*) g_object_get_data ((GObject*) server, "plugin-registration-queue");
+  const gchar *error;
+
+  if (plugins)
+    {
+      char *name = (char*) sfi_ring_pop_head (&plugins);
+      g_object_set_data ((GObject*) server, "plugin-registration-queue", plugins);
+      error = bse_plugin_check_load (name);
+      bse_server_registration (server, BSE_REGISTER_PLUGIN, name, error);
+      g_free (name);
+    }
+  else
+    {
+      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
+      return FALSE;
+    }
+  return TRUE;
+}
+
+void
+ServerImpl::register_core_plugins ()
+{
+  static gboolean registration_done = false;
+  BseServer *server = as<BseServer*>();
+  if (registration_done)
+    {
+      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
+      return;
+    }
+  SfiRing *ring = bse_plugin_path_list_files (!bse_main_args->load_drivers_early, TRUE);
+  g_object_set_data (server, "plugin-registration-queue", ring);
+  bse_idle_normal (register_core_plugins_handler, server);
+  registration_done = true;
+}
+
+void
+ServerImpl::start_recording (const String &wave_file, double n_seconds)
+{
+  BseServer *server = as<BseServer*>();
+  bse_server_start_recording (server, wave_file.c_str(), n_seconds);
+}
+
+struct ScriptRegistration
+{
+  gchar         *script;
+  BseErrorType (*register_func) (const gchar *script, BseJanitor **janitor_p);
+  ScriptRegistration *next;
+};
+
+static gboolean        register_scripts_handler (gpointer data);
+
+static void
+script_janitor_closed (BseJanitor *janitor,
+                      BseServer  *server)
+{
+  bse_server_registration (server, BSE_REGISTER_SCRIPT, janitor->script_name, NULL);
+  bse_idle_normal (register_scripts_handler, server);
+}
+
+static gboolean
+register_scripts_handler (gpointer data)
+{
+  BseServer *server = (BseServer*) data;
+  ScriptRegistration *scr = (ScriptRegistration*) g_object_get_data ((GObject*) server, 
"script-registration-queue");
+  BseJanitor *janitor = NULL;
+  BseErrorType error;
+
+  if (!scr)
+    {
+      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
+      return FALSE;
+    }
+  g_object_set_data ((GObject*) server, "script-registration-queue", scr->next);
+
+  error = scr->register_func (scr->script, &janitor);
+  if (!janitor)
+    bse_server_registration (server, BSE_REGISTER_SCRIPT, scr->script, bse_error_blurb (error));
+  else
+    g_object_connect (janitor, "signal::shutdown", script_janitor_closed, server, NULL);
+  g_free (scr->script);
+  g_free (scr);
+  return !janitor;
+}
+
+void
+ServerImpl::register_scripts ()
+{
+  static gboolean registration_done = false;
+  BseServer *server = as<BseServer*>();
+
+  if (registration_done)
+    {
+      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
+      return;
+    }
+  registration_done = true;
+
+  SfiRing *ring = bse_script_path_list_files ();
+  ScriptRegistration *scr_list = NULL;
+  while (ring)
+    {
+      ScriptRegistration *scr = g_new0 (ScriptRegistration, 1);
+      scr->script = (char*) sfi_ring_pop_head (&ring);
+      scr->register_func = bse_script_file_register;
+      scr->next = scr_list;
+      scr_list = scr;
+    }
+
+  g_object_set_data (server, "script-registration-queue", scr_list);
+  bse_idle_normal (register_scripts_handler, server);
+}
+
+bool
+ServerImpl::preferences_locked ()
+{
+  return bse_gconfig_locked();
+}
+
+int
+ServerImpl::n_scripts()
+{
+  BseServer *server = as<BseServer*>();
+  // count script controls
+  uint n_scripts = 0;
+  for (GSList *slist = server->children; slist; slist = slist->next)
+    if (BSE_IS_JANITOR (slist->data))
+      n_scripts++;
+  return n_scripts;
+}
+
+bool
+ServerImpl::can_load (const String &file_name)
+{
+  // find a loader
+  BseWaveFileInfo *finfo = bse_wave_file_info_load (file_name.c_str(), NULL);
+  if (finfo)
+    bse_wave_file_info_unref (finfo);
+  return finfo != NULL;
+}
+
 } // Bse
diff --git a/bse/bseserver.hh b/bse/bseserver.hh
index 0c5b2fe..d10cf5d 100644
--- a/bse/bseserver.hh
+++ b/bse/bseserver.hh
@@ -119,6 +119,14 @@ public:
   virtual String        get_version         () override;
   virtual String        get_custom_effect_dir () override;
   virtual String        get_custom_instrument_dir () override;
+  virtual void   save_preferences        () override;
+  virtual void   register_ladspa_plugins () override;
+  virtual void   register_core_plugins   () override;
+  virtual void   start_recording         (const String &wave_file, double n_seconds) override;
+  virtual void   register_scripts        () override;
+  virtual bool   preferences_locked      () override;
+  virtual int    n_scripts               () override;
+  virtual bool   can_load                (const std::string &file_name) override;
   void                  send_user_message   (const UserMessage &umsg);
   static ServerImpl&    instance            ();
 };
diff --git a/bse/bseserver.proc b/bse/bseserver.proc
index e912900..9aff7d3 100644
--- a/bse/bseserver.proc
+++ b/bse/bseserver.proc
@@ -9,11 +9,9 @@
 #include <bse/bsejanitor.hh>
 #include <bse/bsescripthelper.hh>
 #include <bse/bsegconfig.hh>
-#include <bse/bseladspa.hh>
 #include "topconfig.h"
 #include <string.h>
 
-
 AUTHORS        = "Tim Janik <timj gtk org>";
 LICENSE = "GNU Lesser General Public License";
 
@@ -61,373 +59,3 @@ BODY (BseProcedureClass *proc,
 
   return BSE_ERROR_NONE;
 }
-
-METHOD (BseServer, can-load) {
-  HELP = "Check whether a loader can be found for a wave file";
-  IN   = bse_param_spec_object ("server", "Server", NULL,
-                                BSE_TYPE_SERVER, SFI_PARAM_STANDARD);
-  IN    = sfi_pspec_string ("file_name", "File Name", "The file to find a loader for",
-                           NULL, SFI_PARAM_STANDARD);
-  OUT   = sfi_pspec_bool ("can-load", NULL, NULL,
-                         FALSE, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseServer *server = (BseServer*) bse_value_get_object (in_values++);
-  const char *file_name = sfi_value_get_string (in_values++);
-  BseWaveFileInfo *finfo;
-
-  /* check parameters */
-  if (!BSE_IS_SERVER (server) || !file_name)
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  /* find a loader */
-  finfo = bse_wave_file_info_load (file_name, NULL);
-  sfi_value_set_bool (out_values++, finfo != NULL);
-  if (finfo)
-    bse_wave_file_info_unref (finfo);
-
-  return BSE_ERROR_NONE;
-}
-
-METHOD (BseServer, n-scripts) {
-  HELP = "Return the number of scripts currently running on this server.";
-  IN   = bse_param_spec_object ("server", "Server", NULL,
-                                BSE_TYPE_SERVER, SFI_PARAM_STANDARD);
-  OUT   = sfi_pspec_int ("n_connections", NULL, "Number of Connections",
-                        0, 0, G_MAXINT, 1,
-                        SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseServer *server = (BseServer*) bse_value_get_object (in_values++);
-  GSList *slist;
-  guint n_scripts = 0;
-
-  /* check parameters */
-  if (!BSE_IS_SERVER (server))
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  /* count script controls */
-  for (slist = server->children; slist; slist = slist->next)
-    if (BSE_IS_JANITOR (slist->data))
-      n_scripts++;
-
-  /* set output parameters */
-  sfi_value_set_int (out_values++, n_scripts);
-
-  return BSE_ERROR_NONE;
-}
-
-METHOD (BseServer, preferences-locked) {
-  HELP = "Returns whether the bse-preferences property is currently locked against modifications or not.";
-  IN   = bse_param_spec_object ("server", "Server", NULL,
-                                BSE_TYPE_SERVER, SFI_PARAM_STANDARD);
-  OUT   = sfi_pspec_bool ("locked", NULL, NULL,
-                         FALSE, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseServer *server = (BseServer*) bse_value_get_object (in_values++);
-
-  /* check parameters */
-  if (!BSE_IS_SERVER (server))
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  /* set output parameters */
-  sfi_value_set_int (out_values++, bse_gconfig_locked ());
-
-  return BSE_ERROR_NONE;
-}
-
-typedef struct _ScriptRegistration ScriptRegistration;
-struct _ScriptRegistration
-{
-  gchar         *script;
-  BseErrorType (*register_func) (const gchar *script,
-                                BseJanitor **janitor_p);
-  ScriptRegistration *next;
-};
-
-static gboolean        register_scripts (gpointer data);
-
-static void
-script_janitor_closed (BseJanitor *janitor,
-                      BseServer  *server)
-{
-  bse_server_registration (server, BSE_REGISTER_SCRIPT, janitor->script_name, NULL);
-  bse_idle_normal (register_scripts, server);
-}
-
-static gboolean
-register_scripts (gpointer data)
-{
-  BseServer *server = (BseServer*) data;
-  ScriptRegistration *scr = (ScriptRegistration*) g_object_get_data ((GObject*) server, 
"script-registration-queue");
-  BseJanitor *janitor = NULL;
-  BseErrorType error;
-
-  if (!scr)
-    {
-      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
-      return FALSE;
-    }
-  g_object_set_data ((GObject*) server, "script-registration-queue", scr->next);
-
-  error = scr->register_func (scr->script, &janitor);
-  if (!janitor)
-    bse_server_registration (server, BSE_REGISTER_SCRIPT, scr->script, bse_error_blurb (error));
-  else
-    g_object_connect (janitor, "signal::shutdown", script_janitor_closed, server, NULL);
-  g_free (scr->script);
-  g_free (scr);
-  return !janitor;
-}
-
-METHOD (BseServer, register-scripts) {
-  HELP = "Register external scripts.";
-  IN   = bse_param_spec_object ("server", "Server", NULL,
-                                BSE_TYPE_SERVER, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  static gboolean registration_done = FALSE;
-  /* extract parameter values */
-  BseServer *server = (BseServer*) bse_value_get_object (in_values++);
-  ScriptRegistration *scr_list = NULL;
-  SfiRing *ring;
-
-  /* check parameters */
-  if (!BSE_IS_SERVER (server))
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  if (registration_done)
-    {
-      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
-      return BSE_ERROR_NONE;
-    }
-  registration_done = TRUE;
-
-  ring = bse_script_path_list_files ();
-  while (ring)
-    {
-      ScriptRegistration *scr = g_new0 (ScriptRegistration, 1);
-      scr->script = (char*) sfi_ring_pop_head (&ring);
-      scr->register_func = bse_script_file_register;
-      scr->next = scr_list;
-      scr_list = scr;
-    }
-
-  g_object_set_data ((GObject*) server, "script-registration-queue", scr_list);
-  bse_idle_normal (register_scripts, server);
-
-  return BSE_ERROR_NONE;
-}
-
-static gboolean
-register_core_plugins (gpointer data)
-{
-  BseServer *server = (BseServer*) data;
-  SfiRing *plugins = (SfiRing*) g_object_get_data ((GObject*) server, "plugin-registration-queue");
-  const gchar *error;
-
-  if (plugins)
-    {
-      char *name = (char*) sfi_ring_pop_head (&plugins);
-      g_object_set_data ((GObject*) server, "plugin-registration-queue", plugins);
-      error = bse_plugin_check_load (name);
-      bse_server_registration (server, BSE_REGISTER_PLUGIN, name, error);
-      g_free (name);
-    }
-  else
-    {
-      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
-      return FALSE;
-    }
-  return TRUE;
-}
-
-METHOD (BseServer, register-core-plugins) {
-  HELP = "Register core plugins.";
-  IN   = bse_param_spec_object ("server", "Server", NULL,
-                                BSE_TYPE_SERVER, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  static gboolean registration_done = FALSE;
-  /* extract parameter values */
-  BseServer *server = (BseServer*) bse_value_get_object (in_values++);
-  SfiRing *ring;
-
-  /* check parameters */
-  if (!BSE_IS_SERVER (server))
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  if (registration_done)
-    {
-      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
-      return BSE_ERROR_NONE;
-    }
-  registration_done = TRUE;
-
-  ring = bse_plugin_path_list_files (!bse_main_args->load_drivers_early, TRUE);
-  g_object_set_data ((GObject*) server, "plugin-registration-queue", ring);
-
-  bse_idle_normal (register_core_plugins, server);
-
-  return BSE_ERROR_NONE;
-}
-
-static gboolean
-register_ladspa_plugins (gpointer data)
-{
-  BseServer *server = (BseServer*) data;
-  SfiRing *lplugins = (SfiRing*) g_object_get_data ((GObject*) server, "ladspa-registration-queue");
-  const gchar *error;
-
-  if (g_object_get_data ((GObject*) server, "plugin-registration-queue"))
-    {
-      /* give precedence to core plugins until they're done registering */
-      return TRUE;
-    }
-
-  if (lplugins)
-    {
-      char *name = (char*) sfi_ring_pop_head (&lplugins);
-      g_object_set_data ((GObject*) server, "ladspa-registration-queue", lplugins);
-      error = bse_ladspa_plugin_check_load (name);
-      bse_server_registration (server, BSE_REGISTER_PLUGIN, name, error);
-      g_free (name);
-    }
-  else
-    {
-      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
-      return FALSE;
-    }
-  return TRUE;
-}
-
-METHOD (BseServer, register-ladspa-plugins) {
-  HELP = "Register LADSPA (Linux Audio Developer's Simple Plugin API) plugins.";
-  IN   = bse_param_spec_object ("server", "Server", NULL,
-                                BSE_TYPE_SERVER, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  static gboolean registration_done = FALSE;
-  /* extract parameter values */
-  BseServer *server = (BseServer*) bse_value_get_object (in_values++);
-  SfiRing *ring;
-
-  /* check parameters */
-  if (!BSE_IS_SERVER (server))
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  if (registration_done)
-    {
-      bse_server_registration (server, BSE_REGISTER_DONE, NULL, NULL);
-      return BSE_ERROR_NONE;
-    }
-  registration_done = TRUE;
-
-  ring = bse_ladspa_plugin_path_list_files ();
-  g_object_set_data ((GObject*) server, "ladspa-registration-queue", ring);
-
-  bse_idle_normal (register_ladspa_plugins, server);
-
-  return BSE_ERROR_NONE;
-}
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-METHOD (BseServer, save-preferences) {
-  HELP = "Request the bse-preferences property to be saved into BSE's configuration file.";
-  IN   = bse_param_spec_object ("server", "Server", NULL,
-                                BSE_TYPE_SERVER, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseServer *server = (BseServer*) bse_value_get_object (in_values++);
-  SfiWStore *wstore;
-  gchar *file_name;
-  GValue *value;
-  SfiRec *rec;
-  gint fd;
-
-  /* check parameters */
-  if (!BSE_IS_SERVER (server))
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  file_name = g_strconcat (g_get_home_dir (), "/.bserc", NULL);
-  fd = open (file_name,
-            O_WRONLY | O_CREAT | O_TRUNC, /* O_EXCL, */
-            0666);
-  g_free (file_name);
-  if (fd < 0)
-    return BSE_ERROR_NONE;
-
-  wstore = sfi_wstore_new ();
-  sfi_wstore_printf (wstore, "; rc-file for BSE v%s\n", BST_VERSION);
-
-  /* store BseGConfig */
-  sfi_wstore_puts (wstore, "\n; BseGConfig Dump\n");
-  rec = bse_gconfig_to_rec (bse_global_config);
-  value = sfi_value_rec (rec);
-  sfi_wstore_put_param (wstore, value, bse_gconfig_pspec ());
-  sfi_value_free (value);
-  sfi_rec_unref (rec);
-  sfi_wstore_puts (wstore, "\n");
-
-  /* flush stuff to rc file */
-  sfi_wstore_flush_fd (wstore, fd);
-  sfi_wstore_destroy (wstore);
-  close (fd);
-
-  return BSE_ERROR_NONE;
-}
-
-METHOD (BseServer, start-recording) {
-  HELP = "Start recording to a WAV file.";
-  IN   = bse_param_spec_object ("server", "Server", NULL,
-                                BSE_TYPE_SERVER, SFI_PARAM_STANDARD);
-  IN   = sfi_pspec_string ("wave-file", NULL, NULL, NULL, SFI_PARAM_STANDARD);
-  IN    = sfi_pspec_real ("n_seconds", NULL, "Maximum number of recorded seconds",
-                         0, 0, SFI_MAXNUM, 60, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseServer *server = (BseServer*) bse_value_get_object (in_values++);
-  const char *wave_file = g_value_get_string (in_values++);
-  double n_seconds      = g_value_get_double (in_values++);
-
-  /* check parameters */
-  if (!BSE_IS_SERVER (server))
-    return BSE_ERROR_PROC_PARAM_INVAL;
-
-  bse_server_start_recording (server, wave_file, n_seconds);
-  return BSE_ERROR_NONE;
-}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]