summaryrefslogtreecommitdiffstats
path: root/indexerwidget.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2017-02-26 15:47:24 +0100
committerArno <arno@disconnect.de>2017-02-26 15:47:24 +0100
commit03534db307eead153283252a0d9ea4c30f7810ee (patch)
treed7448addc3aa90c3b2249ba51c09508ea655a0f4 /indexerwidget.cpp
parent707853a339a804c9fe90e8ce5b7743c131b75dc1 (diff)
downloadBeetPlayer-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.cpp86
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(){