diff --git a/src/nsmd.cpp b/src/nsmd.cpp index ef2591c..86e901d 100644 --- a/src/nsmd.cpp +++ b/src/nsmd.cpp @@ -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." );