From 2ba1d11555813ee7a345ef8fdc234763532e94b5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mikko=20Kein=C3=A4nen?= Date: Sun, 28 Nov 2010 02:10:47 +0200 Subject: [PATCH] Added signaling from FileUtil to MediaImagePathMainDiialog when the scan buffer is being written to database. --- src/dialogs/mediaimagepathmaindialog.cpp | 42 ++++++++++++++++++++++++------ src/dialogs/mediaimagepathmaindialog.h | 8 ++++++ src/utils/fileutil.cpp | 16 +++++++----- src/utils/fileutil.h | 9 +++++-- 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/src/dialogs/mediaimagepathmaindialog.cpp b/src/dialogs/mediaimagepathmaindialog.cpp index 42494e6..31c73f5 100644 --- a/src/dialogs/mediaimagepathmaindialog.cpp +++ b/src/dialogs/mediaimagepathmaindialog.cpp @@ -42,16 +42,46 @@ MediaImagePathMainDialog::MediaImagePathMainDialog(QWidget *parent) hiddenColumns << DbFilePath::FilePath_SetupId; hideColumns(); + fileUtil = new FileUtil(this); + + initProgressDialog(); // do not move to parent class: connectSignals(); } +void MediaImagePathMainDialog::initProgressDialog() +{ + progressDialog = new QProgressDialog(this); + progressDialog->setWindowTitle(tr("Scanning files")); + progressDialog->setCancelButtonText(tr("Abort")); + progressDialog->setWindowModality(Qt::WindowModal); +} + void MediaImagePathMainDialog::connectSignals() { DbObjectDialog::connectSignals(); connect(scanButton, SIGNAL(clicked()), this, SLOT(beginScanFilePath())); + connect(fileUtil, SIGNAL(dbUpdateFinished()), this, SLOT(hideDbUpdating())); + connect(fileUtil, SIGNAL(dbUpdateInProgress()), this, SLOT(showDbUpdating())); } +void MediaImagePathMainDialog::showDbUpdating() +{ + qDebug() << "DB updating"; + progressDialog->setWindowTitle(tr("Updating DB... please wait!")); + progressDialog->setEnabled(false); + // TODO +} + +void MediaImagePathMainDialog::hideDbUpdating() +{ + qDebug() << "DB update finished"; + progressDialog->setEnabled(true); + progressDialog->setWindowTitle(tr("Scanning files")); + // TODO +} + + void MediaImagePathMainDialog::initEditDialog() { nameDialog = new MediaImagePathDialog(this, dynamic_cast(dbObject)); @@ -70,7 +100,6 @@ void MediaImagePathMainDialog::beginScanFilePath() QMessageBox::Yes, QMessageBox::No, QMessageBox::NoButton ) == QMessageBox::No) { return; } - FileUtil fileUtil(this); FilePathObject *fpo = 0; try { @@ -83,15 +112,12 @@ void MediaImagePathMainDialog::beginScanFilePath() dbMediaImageContainer->removeFromFilePath(fpo->getId()); - QProgressDialog progressDialog(this); - progressDialog.setWindowTitle("Scanning files..."); - progressDialog.setCancelButtonText("Abort"); - progressDialog.setWindowModality(Qt::WindowModal); - progressDialog.show(); + progressDialog->show(); + progressDialog->setEnabled(true); setUIEnabled(false); - int count = fileUtil.scanFilePath(fpo, l, dbMediaImageContainer, progressDialog); - progressDialog.hide(); + int count = fileUtil->scanFilePath(fpo, l, dbMediaImageContainer, progressDialog); + progressDialog->hide(); QMessageBox msgBox; msgBox.setText(tr("Scanned %1 files to database.").arg(count)); diff --git a/src/dialogs/mediaimagepathmaindialog.h b/src/dialogs/mediaimagepathmaindialog.h index 1f11d61..25cad5d 100644 --- a/src/dialogs/mediaimagepathmaindialog.h +++ b/src/dialogs/mediaimagepathmaindialog.h @@ -23,6 +23,9 @@ #include "dbobjectdialog.h" #include "../db/dbmediaimagecontainer.h" +class FileUtil; +class QProgressDialog; + class MediaImagePathMainDialog : public DbObjectDialog { Q_OBJECT @@ -40,13 +43,18 @@ protected: private slots: void beginScanFilePath(); + void showDbUpdating(); + void hideDbUpdating(); private: QPushButton *scanButton; DbMediaImageContainer *dbMediaImageContainer; + FileUtil *fileUtil; + QProgressDialog *progressDialog; // QString and QStringList are implicitly shared void scanFilePath(const QString path, const QStringList filters); + void initProgressDialog(); }; #endif // MEDIAIMAGEPATHMAINDIALOG_H diff --git a/src/utils/fileutil.cpp b/src/utils/fileutil.cpp index f18244d..80874bc 100644 --- a/src/utils/fileutil.cpp +++ b/src/utils/fileutil.cpp @@ -46,7 +46,7 @@ FileUtil::~FileUtil() /* Throws EmuFrontException */ int FileUtil::scanFilePath(FilePathObject *fp, QStringList filters, DbMediaImageContainer *dbMic, - QProgressDialog &progressDialog) + QProgressDialog *progressDialog) { if (!fp->getSetup()){ throw EmuFrontException(tr("Setup not available with %1.").arg(fp->getName())); @@ -78,12 +78,12 @@ int FileUtil::scanFilePath(FilePathObject *fp, //qDebug() << "We have " << list.count() << " files to go through."; QList containers; try { - progressDialog.setMinimum(0); - progressDialog.setMaximum(list.size()); + progressDialog->setMinimum(0); + progressDialog->setMaximum(list.size()); for (int i = 0; i < list.size(); ++i) { - progressDialog.setValue(i); - if (progressDialog.wasCanceled()) + progressDialog->setValue(i); + if (progressDialog->wasCanceled()) break; QFileInfo fileInfo = list.at(i); //qDebug() << QString("%1 %2").arg(fileInfo.size(), 10).arg(fileInfo.absoluteFilePath()); @@ -109,7 +109,9 @@ int FileUtil::scanFilePath(FilePathObject *fp, if (containers.count() >= MIC_BUFFER_SIZE) { //qDebug() << "We have " << containers.count() << " containers .. storing to db."; + emit dbUpdateInProgress(); dbMic->storeContainers(containers, fp); + emit dbUpdateFinished(); qDeleteAll(containers); containers.clear(); //qDebug() << "containers now: " << containers.count(); @@ -120,10 +122,12 @@ int FileUtil::scanFilePath(FilePathObject *fp, qDebug() << "No files from container " << fileInfo.absoluteFilePath(); } } - progressDialog.setValue(list.size()); + progressDialog->setValue(list.size()); if (containers.count() > 0) { //qDebug() << "Storing the rest " << containers.count() << " containers."; + emit dbUpdateInProgress(); dbMic->storeContainers(containers, fp); + emit dbUpdateFinished(); qDeleteAll(containers); containers.clear(); diff --git a/src/utils/fileutil.h b/src/utils/fileutil.h index 72124e9..c4693fe 100644 --- a/src/utils/fileutil.h +++ b/src/utils/fileutil.h @@ -33,12 +33,17 @@ class DbMediaImageContainer; class UnzipHelper; class QProgressDialog; -class FileUtil : QObject +class FileUtil : public QObject { + Q_OBJECT public: FileUtil(QObject *parent); ~FileUtil(); - int scanFilePath(FilePathObject *fpo, const QStringList filters, DbMediaImageContainer *mic, QProgressDialog &); + int scanFilePath(FilePathObject *fpo, const QStringList filters, DbMediaImageContainer *mic, QProgressDialog *); +signals: + void dbUpdateInProgress(); + void dbUpdateFinished(); + private: char *buf; quint32 readCrc32(QString filePath); -- 1.7.9.5