summaryrefslogtreecommitdiffstats
path: root/shemovcleaner.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-08-16 18:49:59 +0200
committerArno <arno@disconnect.de>2016-08-16 18:49:59 +0200
commita5191b5d12791981d16da3b4154b7fb29f1c01db (patch)
tree56d5534fcc9b1c88e74a1e0c35ca8fc0408435f9 /shemovcleaner.cpp
parent52a3097986a6e69f57261d74c8807acbe9374c37 (diff)
downloadShemovCleaner-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.cpp198
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());
}