void PlaybackController::loadIndex() { if(m_reader->isCompressed()) { emit indexLoadError(tr("Cannot index compressed recordings."), false); return; } QFileInfo indexfile(indexFileName()); if(!indexfile.exists()) { emit indexLoadError(tr("Index not yet generated"), true); return; } m_indexloader = new IndexLoader(m_reader->filename(), indexFileName()); if(!m_indexloader->open()) { delete m_indexloader; m_indexloader = nullptr; emit indexLoadError(tr("Error loading index!"), true); return; } emit markersChanged(); emit indexLoaded(); }
/** * @brief (Re)build the index file */ void PlaybackController::buildIndex() { if(!m_indexbuilder.isNull()) { qWarning("Index builder already running!"); return; } m_indexbuilder = new IndexBuilder(m_reader->filename(), indexFileName()); const qreal filesize = m_reader->filesize(); connect(m_indexbuilder, &IndexBuilder::progress, [this, filesize](int progress) { m_indexBuildProgress = progress / filesize; emit indexBuildProgressed(m_indexBuildProgress); }); connect(m_indexbuilder, &IndexBuilder::done, [this](bool ok, const QString &error) { if(!ok) { m_indexBuildProgress = 0; emit indexBuildProgressed(0); emit indexLoadError(error, true); } else { loadIndex(); } }); QThreadPool::globalInstance()->start(m_indexbuilder); }
/** * @brief (Re)build the index file */ void PlaybackController::buildIndex() { if(!m_indexbuilder.isNull()) { qWarning("Index builder already running!"); return; } QThread *thread = new QThread; m_indexbuilder = new IndexBuilder(m_reader->filename(), indexFileName()); m_indexbuilder->moveToThread(thread); const qreal filesize = m_reader->filesize(); connect(m_indexbuilder.data(), &IndexBuilder::progress, [this, filesize](int progress) { m_indexBuildProgress = progress / filesize; emit indexBuildProgressed(m_indexBuildProgress); }); connect(m_indexbuilder.data(), &IndexBuilder::done, [this](bool ok, const QString &error) { if(!ok) { m_indexBuildProgress = 0; emit indexBuildProgressed(0); emit indexLoadError(error, true); } else { loadIndex(); } }); connect(thread, &QThread::started, m_indexbuilder.data(), &IndexBuilder::run); connect(m_indexbuilder.data(), &IndexBuilder::done, thread, &QThread::quit); connect(m_indexbuilder.data(), &IndexBuilder::done, m_indexbuilder.data(), &QThread::deleteLater); connect(thread, &QThread::finished, thread, &QThread::deleteLater); thread->start(); }