[beast: 1/49] BSE: move most ServerImpl procedures to bseapi.idl
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast: 1/49] BSE: move most ServerImpl procedures to bseapi.idl
- Date: Wed, 1 Jul 2015 11:29:11 +0000 (UTC)
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]