diff options
author | Arno <arno@disconnect.de> | 2017-02-26 15:47:24 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2017-02-26 15:47:24 +0100 |
commit | 03534db307eead153283252a0d9ea4c30f7810ee (patch) | |
tree | d7448addc3aa90c3b2249ba51c09508ea655a0f4 /indexerwidget.cpp | |
parent | 707853a339a804c9fe90e8ce5b7743c131b75dc1 (diff) | |
download | BeetPlayer-03534db307eead153283252a0d9ea4c30f7810ee.tar.gz BeetPlayer-03534db307eead153283252a0d9ea4c30f7810ee.tar.bz2 BeetPlayer-03534db307eead153283252a0d9ea4c30f7810ee.zip |
Turned IndexerWidget into a dialog
and got rid of the TabWidget!
Diffstat (limited to 'indexerwidget.cpp')
-rw-r--r-- | indexerwidget.cpp | 86 |
1 files changed, 50 insertions, 36 deletions
diff --git a/indexerwidget.cpp b/indexerwidget.cpp index c5c8bda..f30de80 100644 --- a/indexerwidget.cpp +++ b/indexerwidget.cpp @@ -7,62 +7,75 @@ #include <QCursor> #include <QSqlQuery> #include <QFileInfo> -#include <QAction> -#include <QMenu> +#include <QLabel> +#include <QGroupBox> +#include <QProgressBar> #include "taglib/tag.h" #include "indexerwidget.h" #include "globals.h" -IndexerWidget::IndexerWidget(QWidget *parent) : QWidget(parent) { - //widgets - mLog = new QTextEdit; - mLog->setFont(QFont("courier new")); - mLog->setTextColor(Qt::darkGreen); +IndexerWidget::IndexerWidget(QWidget *parent) : QWidget(parent), mMax(0) { + //errors + QGroupBox *gb1 = new QGroupBox(tr("Errors")); mError = new QTextEdit; mError->setFont(QFont("courier new")); mError->setTextColor(Qt::red); - QPushButton *startB = new QPushButton(tr("Index")); - connect(startB, SIGNAL(clicked()), this, SLOT(startIndexing())); - QPushButton *cancelB = new QPushButton(tr("Cancel")); - connect(cancelB, SIGNAL(clicked()), this, SLOT(stopIndexing())); + QVBoxLayout *gb1L = new QVBoxLayout; + gb1L->addWidget(mError); + gb1->setLayout(gb1L); + + //progress + QLabel *l1 = new QLabel(tr("Indexing:")); + l1->setFont(QFont("courier")); + mProgress = new QProgressBar; + QHBoxLayout *progressL = new QHBoxLayout; + mProgressCount = new QLabel(tr("000000/00000")); + mProgressCount->setFont(QFont("courier")); + progressL->addWidget(l1); + progressL->addWidget(mProgress); + progressL->addWidget(mProgressCount); //reader mReader = new BeetReader; - connect(mReader, SIGNAL(message(QString)), this, SLOT(addToLog(QString))); connect(mReader, SIGNAL(errorMsg(QString)), this, SLOT(addToError(QString))); + connect(mReader, SIGNAL(totalCount(int)), this, SLOT(setupProgress(int))); + connect(mReader, SIGNAL(progress(int)), this, SLOT(progress(int))); - //layout + //main layout QVBoxLayout *mainLayout = new QVBoxLayout; - QHBoxLayout *buttonLayout = new QHBoxLayout; - buttonLayout->addStretch(); - buttonLayout->addWidget(startB); - buttonLayout->addWidget(cancelB); - buttonLayout->addStretch(); - mainLayout->addWidget(mLog); - mainLayout->addWidget(mError); - mainLayout->addLayout(buttonLayout); + mainLayout->addWidget(gb1); + mainLayout->addLayout(progressL); setLayout(mainLayout); } void IndexerWidget::startIndexing(){ - mLog->clear(); mError->clear(); mReader->start(); } void IndexerWidget::stopIndexing(){ mReader->cancel(); -} - -void IndexerWidget::addToLog(QString msg){ - mLog->append(msg); + addToError(tr("Canceled!")); } void IndexerWidget::addToError(QString msg){ mError->append(msg); } +void IndexerWidget::setupProgress(int max){ + mProgress->reset(); + mProgress->setMinimum(0); + mProgress->setMaximum(max); + mMax = max; +} + +void IndexerWidget::progress(int cur){ + mProgress->setValue(cur); + QString p = QString("%1/%2").arg(cur, 6, 10, QChar('0')).arg(mMax, 6, 10, QChar('0')); + mProgressCount->setText(p); +} + BeetReader::BeetReader() : mCanceled(false){ mDb = QSqlDatabase::database("beetplayerdb"); mInsertArtistsQ = new QSqlQuery(mDb); @@ -82,28 +95,29 @@ BeetReader::BeetReader() : mCanceled(false){ } void BeetReader::run(){ - emit message(QString(tr("Clearing everything..."))); clearAll(); QProcess lister; lister.start("beet", QStringList() << "ls" << "-p"); qApp->setOverrideCursor(QCursor(Qt::WaitCursor)); - emit message(QString(tr("Waiting for beet ls -p..."))); + emit errorMsg(tr("Waiting for beet ls -p")); lister.waitForStarted(); lister.waitForFinished(); qApp->restoreOverrideCursor(); + emit errorMsg(tr("Done Waiting - Starting some serious work!")); QByteArray lOut = lister.readAllStandardOutput(); QList<QByteArray> files = lOut.split('\n'); - int totalCount = files.size(); - QString foundMsg = QString(tr("Found %1 file(s)\n").arg(QString::number(totalCount))); - emit message(foundMsg); + int total = files.size(); + emit totalCount(total); int ctr = 1; foreach(QByteArray s, files){ //fetch data from file TagLib::FileRef file(QString(s).toUtf8()); if(file.isNull()){ QString fn = QString(s).toUtf8(); - QString error = QString(tr("IsNull: %1")).arg(fn); - emit errorMsg(error); + if(!fn.isEmpty()){ + QString error = QString(tr("IsNull: %1")).arg(fn); + emit errorMsg(error); + } continue; } QString artist = toQString(file.tag()->artist()); @@ -120,8 +134,7 @@ void BeetReader::run(){ doSong(title, track, albumId, genreId, artistId, s); if(ctr % 100 == 0){ - QString msg = QString(tr("Processed %1 files of %2")).arg(QString::number(ctr)).arg(QString::number(totalCount)); - emit message(msg); + emit progress(ctr); } mCancelMx.lock(); @@ -133,7 +146,8 @@ void BeetReader::run(){ mCancelMx.unlock(); ++ctr; } - emit message(QString(tr("Indexing DONE!"))); + emit progress(total); + emit errorMsg(tr("Serious work done!")); } void BeetReader::cancel(){ |