| @@ -434,12 +434,13 @@ path_is_valid ( const char *path ) | |||||
| } | } | ||||
| int | 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 | //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; | struct stat st_session_exists_check; | ||||
| char * path; | 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) { | if ( stat (path, &st_session_exists_check) == 0) { | ||||
| free( path ); | free( path ); | ||||
| return 0; // Already exists | 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 | * 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 | * 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). | * 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 | //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 | //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; | return ERR_NO_SUCH_FILE; | ||||
| } | } | ||||
| @@ -1375,7 +1377,7 @@ load_session_file ( const char * path ) | |||||
| delete_lock_file( session_lock ); | 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; | char *session_file = NULL; | ||||
| asprintf( &session_file, "%s/session.nsm", path ); | asprintf( &session_file, "%s/session.nsm", path ); | ||||
| @@ -1616,7 +1618,6 @@ OSC_HANDLER( duplicate ) | |||||
| } | } | ||||
| if ( session_already_exists(&argv[0]->s) == 0) { | if ( session_already_exists(&argv[0]->s) == 0) { | ||||
| osc_server->send( sender_addr, "/error", path, | osc_server->send( sender_addr, "/error", path, | ||||
| ERR_CREATE_FAILED, | ERR_CREATE_FAILED, | ||||
| "Session name already exists." ); | "Session name already exists." ); | ||||
| @@ -1716,7 +1717,6 @@ OSC_HANDLER( new ) | |||||
| } | } | ||||
| if ( session_already_exists(&argv[0]->s) == 0) { | if ( session_already_exists(&argv[0]->s) == 0) { | ||||
| osc_server->send( sender_addr, "/error", path, | osc_server->send( sender_addr, "/error", path, | ||||
| ERR_CREATE_FAILED, | ERR_CREATE_FAILED, | ||||
| "Session name already exists." ); | "Session name already exists." ); | ||||