From 32afa2c28aabe862bfca44dba24083ffd7db6721 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 20 Aug 2016 18:29:52 +0200 Subject: Added configration dialog Database connection options are now configurable. Hopefully it doesn't end up in an infinite loop if the credentials are not corrent... --- ShemovCleaner.pro | 6 +++-- chastity_belt.png | Bin 0 -> 850 bytes configurationwidget.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ configurationwidget.h | 27 +++++++++++++++++++ shemovcleaner.cpp | 43 +++++++++++++++++++++++++++++++ shemovcleaner.h | 2 ++ shemovcleaner.qrc | 1 + torrentwidget.cpp | 12 +++------ 8 files changed, 147 insertions(+), 11 deletions(-) create mode 100644 chastity_belt.png create mode 100644 configurationwidget.cpp create mode 100644 configurationwidget.h diff --git a/ShemovCleaner.pro b/ShemovCleaner.pro index 4efb591..7b62158 100644 --- a/ShemovCleaner.pro +++ b/ShemovCleaner.pro @@ -19,14 +19,16 @@ SOURCES += main.cpp\ torrentparser.cpp \ torrentdisplay.cpp \ torrentwidget.cpp \ - shemovcleaner.cpp + shemovcleaner.cpp \ + configurationwidget.cpp HEADERS += \ filesorter.h \ torrentparser.h \ torrentdisplay.h \ torrentwidget.h \ - shemovcleaner.h + shemovcleaner.h \ + configurationwidget.h DISTFILES += diff --git a/chastity_belt.png b/chastity_belt.png new file mode 100644 index 0000000..ebe3390 Binary files /dev/null and b/chastity_belt.png differ diff --git a/configurationwidget.cpp b/configurationwidget.cpp new file mode 100644 index 0000000..09a823b --- /dev/null +++ b/configurationwidget.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "configurationwidget.h" + +ConfigurationWidget::ConfigurationWidget(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { + //database setup + QGridLayout *dbLayout = new QGridLayout; + mDbHost = new QLineEdit; + dbLayout->addWidget(new QLabel(tr("Hostname")), 0, 0); + dbLayout->addWidget(mDbHost, 0, 1); + mDbUser = new QLineEdit; + dbLayout->addWidget(new QLabel(tr("Username")), 1, 0); + dbLayout->addWidget(mDbUser, 1, 1); + mDbPass = new QLineEdit; + mDbPass->setEchoMode(QLineEdit::Password); + dbLayout->addWidget(new QLabel(tr("Password")), 2, 0); + dbLayout->addWidget(mDbPass, 2, 1); + mDbName = new QLineEdit; + dbLayout->addWidget(new QLabel(tr("DB Name")), 3, 0); + dbLayout->addWidget(mDbName, 3, 1); + QWidget *dbWidget = new QWidget; + dbWidget->setLayout(dbLayout); + + //buttons + mAccept = new QPushButton(tr("Save")); + connect(mAccept, SIGNAL(clicked()), this, SLOT(accept())); + mCancel = new QPushButton(tr("Cancel")); + connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); + QHBoxLayout *bLayout = new QHBoxLayout; + bLayout->addStretch(); + bLayout->addWidget(mAccept); + bLayout->addWidget(mCancel); + bLayout->addStretch(); + + //dialog layout + QVBoxLayout *mainLayout = new QVBoxLayout; + QTabWidget *tab = new QTabWidget; + tab->addTab(dbWidget, tr("Database")); + mainLayout->addWidget(tab); + mainLayout->addLayout(bLayout); + readSettings(); + setLayout(mainLayout); +} + +void ConfigurationWidget::accept(){ + QSettings s; + s.setValue("dbhost", mDbHost->text()); + s.setValue("dbuser", mDbUser->text()); + s.setValue("dbpass", mDbPass->text()); + s.setValue("dbname", mDbName->text()); + QDialog::accept(); +} + +void ConfigurationWidget::readSettings(){ + QSettings s; + mDbHost->setText(s.value("dbhost").toString()); + mDbUser->setText(s.value("dbuser").toString()); + mDbPass->setText(s.value("dbpass").toString()); + mDbName->setText(s.value("dbname").toString()); +} diff --git a/configurationwidget.h b/configurationwidget.h new file mode 100644 index 0000000..d5d6790 --- /dev/null +++ b/configurationwidget.h @@ -0,0 +1,27 @@ +#ifndef CONFIGURATIONWIDGET_H +#define CONFIGURATIONWIDGET_H + +#include + +class QLineEdit; +class QPushButton; + +class ConfigurationWidget : public QDialog { + Q_OBJECT + public: + explicit ConfigurationWidget(QWidget *parent = 0, Qt::WindowFlags f = 0); + + public slots: + virtual void accept(); + + private: + void readSettings(); + QLineEdit *mDbHost; + QLineEdit *mDbUser; + QLineEdit *mDbPass; + QLineEdit *mDbName; + QPushButton *mAccept; + QPushButton *mCancel; +}; + +#endif // CONFIGURATIONWIDGET_H diff --git a/shemovcleaner.cpp b/shemovcleaner.cpp index fb9b9e6..ec9d6e4 100644 --- a/shemovcleaner.cpp +++ b/shemovcleaner.cpp @@ -6,15 +6,21 @@ #include #include #include +#include +#include +#include #include "shemovcleaner.h" #include "torrentwidget.h" +#include "configurationwidget.h" ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(parent, f) { //general setup qApp->setWindowIcon(QIcon(":/clean_tampon.png")); setMinimumWidth(800); setMinimumHeight(600); + openDatabase(); + mTorrentTab = new TorrentWidget; mTab = new QTabWidget; mTab->addTab(mTorrentTab, tr("Torrents")); @@ -34,6 +40,14 @@ void ShemovCleaner::setSelectionCount(const QString &msg){ mSelected->setText(msg); } +void ShemovCleaner::configure(){ + ConfigurationWidget w(this); + int res = w.exec(); + if(res == QDialog::Accepted){ + openDatabase(); + } +} + void ShemovCleaner::createStatusBar(){ QLabel *l1 = new QLabel(tr("Sel.")); mSelected = new QLabel("000/000"); @@ -46,6 +60,9 @@ void ShemovCleaner::createActions(){ //Application QAction *quitA = new QAction(tr("Quit"), this); connect(quitA, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); + QAction *configA = new QAction(QIcon(":/chastity_belt.png"), tr("Configure..."), this); + connect(configA, SIGNAL(triggered()), this, SLOT(configure())); + //TorrentWidget mTorRefreshA = new QAction(QIcon(":/refresh.png"), tr("Refresh"), this); connect(mTorRefreshA, SIGNAL(triggered()), mTorrentTab, SLOT(gatherData())); @@ -64,6 +81,8 @@ void ShemovCleaner::createActions(){ mTorrentTab->toolBar()->addAction(mTorDeleteA); mTorrentTab->toolBar()->addSeparator(); mTorrentTab->toolBar()->addAction(mTorInfoA); + mTorrentTab->toolBar()->addSeparator(); + mTorrentTab->toolBar()->addAction(configA); QMenu *torFileM = new QMenu(tr("File")); torFileM->addAction(mTorDirA); torFileM->addAction(mTorRefreshA); @@ -74,6 +93,8 @@ void ShemovCleaner::createActions(){ torEditM->addAction(mTorDeleteA); torEditM->addAction(mTorMoveA); torEditM->addSeparator(); + torEditM->addAction(configA); + torEditM->addSeparator(); torEditM->addAction(mTorInfoA); mTorrentTab->menuBar()->addMenu(torEditM); mTorrentTab->addAction(mTorInfoA); @@ -86,6 +107,28 @@ void ShemovCleaner::createActions(){ mTorrentTab->addAction(mTorDirA); } +void ShemovCleaner::openDatabase(){ + QSettings s; + QString dbhost = s.value("dbhost").toString(); + QString dbuser = s.value("dbuser").toString(); + QString dbpass = s.value("dbpass").toString(); + QString dbname = s.value("dbname").toString(); + QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "shemovdb"); + db.setHostName(dbhost); + db.setUserName(dbuser); + db.setPassword(dbpass); + db.setDatabaseName(dbname); + if(!db.open()){ + int res = ConfigurationWidget(this).exec(); + if(res == QDialog::Accepted){ + openDatabase(); + }else{ + QMessageBox::critical(this, tr("Error"), tr("Could not open database. Giving up!")); + qApp->closeAllWindows(); + } + } +} + QAction *ShemovCleaner::createSeparator(){ QAction *retval = new QAction(this); retval->setSeparator(true); diff --git a/shemovcleaner.h b/shemovcleaner.h index 93b1581..d709858 100644 --- a/shemovcleaner.h +++ b/shemovcleaner.h @@ -16,10 +16,12 @@ class ShemovCleaner : public QMainWindow { public slots: void statusBarMessage(const QString &msg); void setSelectionCount(const QString &msg); + void configure(); private: void createStatusBar(); void createActions(); + void openDatabase(); QAction *createSeparator(); QLabel *mSelected; QTabWidget *mTab; diff --git a/shemovcleaner.qrc b/shemovcleaner.qrc index 0916a47..26b21fe 100644 --- a/shemovcleaner.qrc +++ b/shemovcleaner.qrc @@ -8,5 +8,6 @@ diaper.png folder.png refresh.png + chastity_belt.png diff --git a/torrentwidget.cpp b/torrentwidget.cpp index f184324..656870e 100644 --- a/torrentwidget.cpp +++ b/torrentwidget.cpp @@ -28,15 +28,6 @@ #include "torrentdisplay.h" TorrentWidget::TorrentWidget(QWidget *parent) : QWidget(parent), mExt("*.torrent") { - QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "shemovdb"); - db.setHostName("hadante.d-tor.org"); - db.setUserName("shemov"); - db.setPassword("shemov"); - db.setDatabaseName("shemov2"); - if(!db.open()){ - QMessageBox::critical(0, tr("Error"), tr("Could not open database!")); - } - setupGui(); gatherData(); } @@ -97,6 +88,9 @@ void TorrentWidget::setupGui(){ void TorrentWidget::gatherData(){ QSqlDatabase db = QSqlDatabase::database("shemovdb"); + if(!db.isOpen()){ + db.open(); + } QSqlQuery q(db); q.prepare("SELECT COUNT(*) FROM metadata WHERE tsubject = :fn"); QDir d(mDir->text()); -- cgit v1.2.3-70-g09d2