|
|
@@ -434,12 +434,13 @@ path_is_valid ( const char *path ) |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
session_already_exists ( const char * session_name) |
|
|
|
session_already_exists ( const char * relative_session_path) |
|
|
|
{ |
|
|
|
//A session is defined as a path with the file session.nsm |
|
|
|
//We receive the relative path with sub-directories like album/song as relative_session_path, without leading and trailing / |
|
|
|
struct stat st_session_exists_check; |
|
|
|
char * path; |
|
|
|
asprintf( &path, "%s/%s/session.nsm", session_root, session_name ); |
|
|
|
asprintf( &path, "%s/%s/session.nsm", session_root, relative_session_path ); |
|
|
|
if ( stat (path, &st_session_exists_check) == 0) { |
|
|
|
free( path ); |
|
|
|
return 0; // Already exists |
|
|
@@ -609,7 +610,7 @@ number_of_reponsive_clients ( void ) |
|
|
|
* that never started. It is used in wait_for_announce only, which added a 5000ms delay to startup |
|
|
|
* |
|
|
|
* We are sadly unable to distinguish between a client that has a slow announce and a client |
|
|
|
* without NSM-support. However, this is mitgated by nsm-proxy which is a reliable indicator |
|
|
|
* without NSM-support. However, this is mitigated by nsm-proxy which is a reliable indicator |
|
|
|
* that this program will never announce (or rather nsm-proxy announces normally). |
|
|
|
*/ |
|
|
|
|
|
|
@@ -1362,8 +1363,9 @@ load_session_file ( const char * path ) |
|
|
|
//parameter "path" is the absolute path to the session including session root, without session.nsm |
|
|
|
|
|
|
|
//First check if the session file actually exists, before closing the current one |
|
|
|
if ( session_already_exists( basename( strdup(path )) ) != 0) { |
|
|
|
WARNING ("Instructed to load %s which does not exist. Doing nothing.", path); |
|
|
|
const char * relative_session_path = strdup( path ) + strlen( session_root ) + 1; //+1 for trailing / |
|
|
|
if ( session_already_exists( relative_session_path ) != 0) { |
|
|
|
WARNING ( "Instructed to load %s which does not exist. Doing nothing.", path ); |
|
|
|
return ERR_NO_SUCH_FILE; |
|
|
|
} |
|
|
|
|
|
|
@@ -1375,7 +1377,7 @@ load_session_file ( const char * path ) |
|
|
|
delete_lock_file( session_lock ); |
|
|
|
} |
|
|
|
|
|
|
|
set_name( path ); //Do this first so we have the name for lockfiles and log messages |
|
|
|
set_name( path ); //Do this first so we have the simple name name for lockfiles and log messages |
|
|
|
|
|
|
|
char *session_file = NULL; |
|
|
|
asprintf( &session_file, "%s/session.nsm", path ); |
|
|
@@ -1616,7 +1618,6 @@ OSC_HANDLER( duplicate ) |
|
|
|
} |
|
|
|
|
|
|
|
if ( session_already_exists(&argv[0]->s) == 0) { |
|
|
|
|
|
|
|
osc_server->send( sender_addr, "/error", path, |
|
|
|
ERR_CREATE_FAILED, |
|
|
|
"Session name already exists." ); |
|
|
@@ -1716,7 +1717,6 @@ OSC_HANDLER( new ) |
|
|
|
} |
|
|
|
|
|
|
|
if ( session_already_exists(&argv[0]->s) == 0) { |
|
|
|
|
|
|
|
osc_server->send( sender_addr, "/error", path, |
|
|
|
ERR_CREATE_FAILED, |
|
|
|
"Session name already exists." ); |
|
|
|