QStringList OverviewPlaylistWidget::LetUserSelectMediaFile(QWidget *pParent, QString pDescription, bool pMultipleFiles) { QStringList tResult; LOGEX(OverviewPlaylistWidget, LOG_VERBOSE, "Current data directory is \"%s\"", CONF.GetDataDirectory().toStdString().c_str()); if (pMultipleFiles) tResult = QFileDialog::getOpenFileNames(pParent, pDescription, CONF.GetDataDirectory(), sLoadMediaFilters, &sAllLoadMediaFilter, CONF_NATIVE_DIALOGS); else { tResult = QStringList(QFileDialog::getOpenFileName(pParent, pDescription, CONF.GetDataDirectory(), sLoadMediaFilters, &sAllLoadMediaFilter, CONF_NATIVE_DIALOGS)); // use the file parser to avoid playlists and resolve them to one single entry if (!tResult.isEmpty()) { Playlist tPlaylist = Parse(tResult.first(), ""); if (tPlaylist.size() > 0) tResult = QStringList(tPlaylist.first().Location); else tResult.clear(); } } if (!tResult.isEmpty()) CONF.SetDataDirectory(tResult.first().left(tResult.first().lastIndexOf('/'))); return tResult; }
QStringList OverviewPlaylistWidget::LetUserSelectAudioFile(QWidget *pParent, QString pDescription, bool pMultipleFiles) { QStringList tResult; if (pMultipleFiles) tResult = QFileDialog::getOpenFileNames(pParent, pDescription, CONF.GetDataDirectory(), sLoadAudioFilters, &sAllLoadAudioFilter, CONF_NATIVE_DIALOGS); else { tResult = QStringList(QFileDialog::getOpenFileName(pParent, pDescription, CONF.GetDataDirectory(), sLoadAudioFilters, &sAllLoadAudioFilter, CONF_NATIVE_DIALOGS)); // use the file parser to avoid playlists and resolve them to one single entry if (!tResult.isEmpty()) { Playlist tPlaylist = Parse(tResult.first(), "", false); if (tPlaylist.size() > 0) tResult = QStringList(tPlaylist.first().Location); else { tResult.clear(); } } } if ((!tResult.isEmpty()) && (tResult.first() != "")) { CONF.SetDataDirectory(tResult.first().left(tResult.first().lastIndexOf('/'))); } return tResult; }
void JackAudioDriver::jack_session_callback_impl(jack_session_event_t *event) { INFOLOG("jack session callback"); 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 */ Playlist* playlist = Playlist::get_instance(); if ( playlist->size() > 0 ) { if ( playlist->getFilename().isEmpty() ) playlist->setFilename( Filesystem::untitled_playlist_file_name() ); QString FileName = baseName ( playlist->getFilename() ); 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 < playlist->size(); ++i ) { QString BaseName = baseName( playlist->get( i )->filePath ); QString newName = jackSessionDirectory + BaseName; QString SongPath = reader.getPath( playlist->get( i )->filePath ); if ( SongPath != NULL && QFile::copy ( SongPath, newName ) ) { /* Keep only filename on list for relative read */ playlist->get( i )->filePath = BaseName; // playlist->get( i )->m_hScript; } else { /* Note - we leave old path in playlist */ ERRORLOG( "Can't copy " + playlist->get( i )->filePath + " to " + newName ); ev->flags = JackSessionSaveError; } } /* Save updated playlist */ bool relativePaths = Preferences::get_instance()->isPlaylistUsingRelativeFilenames(); if ( Files::savePlaylistPath( jackSessionDirectory + FileName, playlist, relativePaths ) == NULL ) { ev->flags = JackSessionSaveError; } /* Song Mode */ } else { /* Valid Song is needed */ if ( S->get_filename().isEmpty() ) S->set_filename( Filesystem::untitled_song_file_name() ); 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 (m_pClient, ev ); jack_session_event_free (ev); }