diff options
author | Arno <arno@disconnect.de> | 2016-08-16 18:49:59 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-08-16 18:49:59 +0200 |
commit | a5191b5d12791981d16da3b4154b7fb29f1c01db (patch) | |
tree | 56d5534fcc9b1c88e74a1e0c35ca8fc0408435f9 /shemovcleaner.cpp | |
parent | 52a3097986a6e69f57261d74c8807acbe9374c37 (diff) | |
download | ShemovCleaner-a5191b5d12791981d16da3b4154b7fb29f1c01db.tar.gz ShemovCleaner-a5191b5d12791981d16da3b4154b7fb29f1c01db.tar.bz2 ShemovCleaner-a5191b5d12791981d16da3b4154b7fb29f1c01db.zip |
Implement delete files
Thought I did an initial commit, but seems git thinks otherwise...
Diffstat (limited to 'shemovcleaner.cpp')
-rw-r--r-- | shemovcleaner.cpp | 198 |
1 files changed, 193 insertions, 5 deletions
diff --git a/shemovcleaner.cpp b/shemovcleaner.cpp index 340bda4..21f2337 100644 --- a/shemovcleaner.cpp +++ b/shemovcleaner.cpp @@ -1,11 +1,199 @@ +#include <QSqlDatabase> +#include <QSqlQuery> +#include <QMessageBox> +#include <QGridLayout> +#include <QPushButton> +#include <QFileDialog> +#include <QDir> +#include <QLineEdit> +#include <QTreeView> +#include <QStandardItemModel> +#include <QStandardItem> +#include <QFileInfo> +#include <QBrush> +#include <QLabel> +#include <QDateTime> +#include <QSettings> +#include <QHeaderView> +#include <QApplication> + +#include <QDebug> + #include "shemovcleaner.h" +#include "filesorter.h" -ShemovCleaner::ShemovCleaner(QWidget *parent) - : QMainWindow(parent) -{ +ShemovCleaner::ShemovCleaner(QWidget *parent) : QMainWindow(parent){ + 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(); } -ShemovCleaner::~ShemovCleaner() -{ +ShemovCleaner::~ShemovCleaner(){ + writeHeaderData(); + writeSettings(); +} + +void ShemovCleaner::setupGui(){ + qApp->setWindowIcon(QIcon(":/clean_tampon.png")); + mDir = new QLineEdit; + mDir->setText("C:\\Users\\am\\Downloads"); + mExt = new QLineEdit; + mExt->setText("*.torrent"); + mSelDir = new QPushButton(tr("Browse...")); + connect(mSelDir, SIGNAL(clicked()), this, SLOT(selectDir())); + mSelExt = new QPushButton(tr("Go!")); + connect(mSelExt, SIGNAL(clicked()), this, SLOT(gatherData())); + + QGridLayout *buttonL = new QGridLayout; + buttonL->addWidget(mDir, 0, 0); + buttonL->addWidget(mSelDir, 0, 1); + buttonL->addWidget(mExt, 1, 0); + buttonL->addWidget(mSelExt, 1, 1); + + mFileView = new QTreeView; + mFileView->setSortingEnabled(true); + mFileView->selectionModel(); + mFileView->setSelectionBehavior(QAbstractItemView::SelectRows); + mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); + + mModel = new QStandardItemModel; + mProxy = new FileSorter; + mProxy->setSourceModel(mModel); + mFileView->setModel(mProxy); + QLabel *fileL = new QLabel(tr("Found:")); + readSettings(); + + mDelete = new QPushButton(tr("Delete...")); + connect(mDelete, SIGNAL(clicked()), this, SLOT(deleteFiles())); + mMove = new QPushButton(tr("Move...")); + connect(mMove, SIGNAL(clicked()), this, SLOT(moveFiles())); + QHBoxLayout *buttonL2 = new QHBoxLayout; + buttonL2->addStretch(); + buttonL2->addWidget(mMove); + buttonL2->addWidget(mDelete); + buttonL2->addStretch(); + + QWidget *mainWidget = new QWidget; + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addLayout(buttonL); + mainLayout->addWidget(fileL); + mainLayout->addWidget(mFileView); + mainLayout->addLayout(buttonL2); + mainWidget->setLayout(mainLayout); + setMinimumWidth(800); + setMinimumHeight(600); + setCentralWidget(mainWidget); +} + +void ShemovCleaner::gatherData(){ + QSqlDatabase db = QSqlDatabase::database("shemovdb"); + QSqlQuery q(db); + q.prepare("SELECT COUNT(*) FROM metadata WHERE tsubject = :fn"); + QDir d(mDir->text()); + QFileInfoList fl = d.entryInfoList(QStringList() << mExt->text(), QDir::Files, QDir::Name); + mModel->clear(); + QStandardItem *root = mModel->invisibleRootItem(); + mModel->setHorizontalHeaderLabels(QStringList() << QChar(0x26A7) << tr("Name") << tr("Created")); + QBrush redBrush(Qt::red); + QBrush greenBrush(Qt::darkGreen); + foreach(QFileInfo fi, fl){ + int result = 0; + q.bindValue(":fn", fi.fileName()); + q.exec(); + while(q.next()){ + result = q.value(0).toInt(); + } + QStandardItem *i1; + QStandardItem *i2 = new QStandardItem(fi.fileName()); + QStandardItem *i3 = new QStandardItem(fi.created().toString(Qt::RFC2822Date)); + if(result){ + i1 = new QStandardItem(QIcon(":/huge_bra.png"), QString()); + i1->setData(1); + i2->setForeground(greenBrush); + }else{ + i1 = new QStandardItem(QIcon(":/gaping_ass.png"), QString()); + i1->setData(0); + i2->setForeground(redBrush); + } + i2->setData(fi.absoluteFilePath()); + root->appendRow(QList<QStandardItem*>() << i1 << i2 << i3); + } + readHeaderData(); +} + +void ShemovCleaner::deleteFiles(){ + QModelIndexList sel = mFileView->selectionModel()->selectedRows(1); + if(sel.isEmpty()){ + return; + } + QString q = QString(tr("Really delete %1 file(s)?")).arg(QString::number(sel.count())); + int res = QMessageBox::question(this, tr("Delete files..."), q); + int ctr = 0; + if(res == QMessageBox::Yes){ + foreach(QModelIndex i, sel){ + QString fp = i.data(Qt::UserRole + 1).toString(); + bool ok = QFile::remove(fp); + if(ok){ + ++ctr; + }else{ + QFileInfo fi(fp); + QString msg = QString(tr("Shit: %1 vanished from under us!")).arg(fi.fileName()); + QMessageBox::critical(this, tr("Error"), msg); + } + } + gatherData(); + } +} + +void ShemovCleaner::moveFiles(){ + QModelIndexList sel = mFileView->selectionModel()->selectedRows(1); + if(sel.isEmpty()){ + return; + } + QString dir = QFileDialog::getExistingDirectory(this, tr("Select directory"), QDir::homePath()); + foreach(QModelIndex i, sel){ + QFileInfo fp(i.data(Qt::UserRole + 1).toString()); + QString newfn = QString("%1/%2").arg(dir).arg(fp.fileName()); + qDebug() << "Would move" << fp.absoluteFilePath()<< "to" << newfn; + } +} + +void ShemovCleaner::selectDir(){ + QString dir = QFileDialog::getExistingDirectory(this, tr("Select directory"), QDir::homePath()); + mDir->setText(QDir::toNativeSeparators(dir)); +} + +void ShemovCleaner::readSettings(){ + QSettings s; + QString dir = s.value("searchdir", QDir::toNativeSeparators(QDir::homePath())).toString(); + mDir->setText(dir); + QString ext = s.value("extension", "*.torrent").toString(); + mExt->setText(ext); +} + +void ShemovCleaner::writeSettings(){ + QSettings s; + s.setValue("searchdir", mDir->text()); + s.setValue("extension", mExt->text()); +} + +void ShemovCleaner::readHeaderData(){ + QSettings s; + QByteArray headers = s.value("fileheaders").toByteArray(); + if(!headers.isEmpty()){ + mFileView->header()->restoreState(headers); + } +} +void ShemovCleaner::writeHeaderData(){ + QSettings s; + s.setValue("fileheaders", mFileView->header()->saveState()); } |