Playlist* Playlist::load( const QString& filename ) { LocalFileMng fileMng; int ret = fileMng.loadPlayList( filename.toLocal8Bit().constData() ); if ( ret == 0 ) { Playlist* P = get_instance(); P->set_filename( filename ); return P; } return NULL; }
void JackOutput::jack_session_callback_impl(jack_session_event_t *event) { INFOLOG("jack session calback"); enum session_events{ SAVE_SESSION, SAVE_AND_QUIT, SAVE_TEMPLATE }; Hydrogen* H = Hydrogen::get_instance(); Song* S = H->getSong(); Preferences* P = Preferences::get_instance(); EventQueue* EQ = EventQueue::get_instance(); jack_session_event_t *ev = (jack_session_event_t *) event; QString jackSessionDirectory = (QString) ev->session_dir; QString retval = P->getJackSessionApplicationPath() + " --jacksessionid " + ev->client_uuid; /* Playlist mode */ if ( H->m_PlayList.size() > 0 ) { Playlist* PL = Playlist::get_instance(); if ( PL->get_filename().isEmpty() ) PL->set_filename( "untitled.h2playlist" ); QString FileName = baseName ( PL->get_filename() ); FileName.replace ( QString(" "), QString("_") ); retval += " -p \"${SESSION_DIR}" + FileName + "\""; /* Copy all songs to Session Directory and update playlist */ SongReader reader; for ( uint i = 0; i < H->m_PlayList.size(); ++i ) { QString BaseName = baseName ( H->m_PlayList[i].m_hFile ); QString newName = jackSessionDirectory + BaseName; QString SongPath = reader.getPath ( H->m_PlayList[i].m_hFile ); if ( SongPath != NULL && QFile::copy ( SongPath, newName ) ) { /* Keep only filename on list for relative read */ H->m_PlayList[i].m_hFile = BaseName; //H->m_PlayList[i].m_hScript; } else { /* Note - we leave old path in playlist */ ERRORLOG ( "Can't copy " + H->m_PlayList[i].m_hFile + " to " + newName ); ev->flags = JackSessionSaveError; } } /* Save updated playlist */ if ( ! PL->save ( jackSessionDirectory + FileName ) ) ev->flags = JackSessionSaveError; /* Song Mode */ } else { /* Valid Song is needed */ if ( S->get_filename().isEmpty() ) S->set_filename("untitled.h2song"); QString FileName = baseName ( S->get_filename() ); FileName.replace ( QString(" "), QString("_") ); S->set_filename(jackSessionDirectory + FileName); /* SongReader will look into SESSION DIR anyway */ retval += " -s \"" + FileName + "\""; switch (ev->type) { case JackSessionSave: EQ->push_event(EVENT_JACK_SESSION, SAVE_SESSION); break; case JackSessionSaveAndQuit: EQ->push_event(EVENT_JACK_SESSION, SAVE_SESSION); EQ->push_event(EVENT_JACK_SESSION, SAVE_AND_QUIT); break; default: ERRORLOG( "JackSession: Unknown event type" ); ev->flags = JackSessionSaveError; } } ev->command_line = strdup( retval.toUtf8().constData() ); jack_session_reply (client, ev ); jack_session_event_free (ev); }