Better start up

Don't reply to nsm server until ardour project is finished loading
This commit is contained in:
Roy Vegard Ovesen 2013-03-31 03:46:07 +02:00
parent 81a343ff7f
commit 2806828962
3 changed files with 34 additions and 6 deletions

View File

@ -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 ()) {

View File

@ -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;
}

View File

@ -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);
};