From 2806828962e63a2b2ad078ed6328dbd64e02e3eb Mon Sep 17 00:00:00 2001 From: Roy Vegard Ovesen Date: Sun, 31 Mar 2013 03:46:07 +0200 Subject: Better start up Don't reply to nsm server until ardour project is finished loading --- gtk2_ardour/ardour_ui.cc | 23 ++++++++++++++++++----- gtk2_ardour/nsm.cc | 12 +++++++++++- gtk2_ardour/nsm.h | 5 +++++ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 3d148a9735..d42bdcdd4f 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -666,11 +666,27 @@ ARDOUR_UI::startup () if (!nsm->init (nsm_url)) { nsm->announce (PROGRAM_NAME, ":dirty:", "ardour3"); + // wait for announce reply from nsm server + do { + nsm->check (); + usleep (10); + } while (!nsm->is_active ()); + // wait for open command from nsm server do { nsm->check (); usleep (10); } while (!nsm->client_id ()); + if (_session && nsm) { + _session->set_nsm_state( nsm->is_active() ); + } + + // wait for session is loaded reply from nsm server + do { + nsm->check (); + usleep (10); + } while (!nsm->session_loaded ()); + } else { delete nsm; @@ -678,13 +694,10 @@ ARDOUR_UI::startup () } } - if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session, ARDOUR_COMMAND_LINE::load_template)) { + else if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session, ARDOUR_COMMAND_LINE::load_template)) { exit (1); } - if (_session && nsm) { - _session->set_nsm_state( true ); - } use_config (); goto_editor_window (); @@ -951,7 +964,7 @@ ARDOUR_UI::every_second () update_disk_space (); update_timecode_format (); - if (nsm) { + if (nsm && nsm->is_active () && nsm->session_loaded ()) { nsm->check (); if (!_was_dirty && _session->dirty ()) { diff --git a/gtk2_ardour/nsm.cc b/gtk2_ardour/nsm.cc index bd27fe532c..09449c5630 100644 --- a/gtk2_ardour/nsm.cc +++ b/gtk2_ardour/nsm.cc @@ -28,6 +28,7 @@ NSM_Client::NSM_Client() { + _session_loaded = false; } int @@ -49,9 +50,18 @@ NSM_Client::command_open(const char *name, { int r = ERR_OK; - ARDOUR_COMMAND_LINE::new_session = false; ARDOUR_COMMAND_LINE::session_name = name; ARDOUR_COMMAND_LINE::jack_client_name = client_id; + ARDOUR_COMMAND_LINE::no_connect_ports = true; + if (ARDOUR_UI::instance()->get_session_parameters(true, false, "")) { + return ERR_GENERAL; + } return r; } + +void +NSM_Client::command_session_is_loaded ( void ) +{ + _session_loaded = true; +} diff --git a/gtk2_ardour/nsm.h b/gtk2_ardour/nsm.h index 5491e1985f..a2b0c11151 100644 --- a/gtk2_ardour/nsm.h +++ b/gtk2_ardour/nsm.h @@ -28,12 +28,17 @@ class NSM_Client:public NSM::Client NSM_Client(); ~NSM_Client() { } + bool session_loaded(void) { return _session_loaded; } + protected: + bool _session_loaded; + int command_open(const char *name, const char *display_name, const char *client_id, char **out_msg); int command_save(char **out_msg); + void command_session_is_loaded (void); }; -- cgit v1.2.3