summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ShemovCleaner.pro6
-rw-r--r--filedisplay.cpp155
-rw-r--r--filedisplay.h40
-rw-r--r--filewidget.cpp22
-rw-r--r--filewidget.h5
5 files changed, 220 insertions, 8 deletions
diff --git a/ShemovCleaner.pro b/ShemovCleaner.pro
index b176492..7990762 100644
--- a/ShemovCleaner.pro
+++ b/ShemovCleaner.pro
@@ -22,7 +22,8 @@ SOURCES += main.cpp\
shemovcleaner.cpp \
configurationwidget.cpp \
filewidget.cpp \
- helper.cpp
+ helper.cpp \
+ filedisplay.cpp
HEADERS += \
filesorter.h \
@@ -32,7 +33,8 @@ HEADERS += \
shemovcleaner.h \
configurationwidget.h \
filewidget.h \
- helper.h
+ helper.h \
+ filedisplay.h
DISTFILES +=
diff --git a/filedisplay.cpp b/filedisplay.cpp
new file mode 100644
index 0000000..bce77d9
--- /dev/null
+++ b/filedisplay.cpp
@@ -0,0 +1,155 @@
+#include <QTabWidget>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QGridLayout>
+#include <QLineEdit>
+#include <QLabel>
+#include <QTextEdit>
+#include <QPushButton>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QPushButton>
+#include <QGroupBox>
+#include <QDir>
+
+#include "filedisplay.h"
+
+FileDisplay::FileDisplay(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) {
+ mTab = new QTabWidget;
+ mDBData = new DBData;
+ mTab->addTab(mDBData, tr("Database"));
+
+ //button layout
+ QHBoxLayout *buttonL = new QHBoxLayout;
+ QPushButton *closeBtn = new QPushButton(tr("Close"));
+ connect(closeBtn, SIGNAL(clicked()), this, SLOT(hide()));
+ buttonL->addStretch();
+ buttonL->addWidget(closeBtn);
+ buttonL->addStretch();
+
+ //dialog layout
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(mTab);
+ mainLayout->addLayout(buttonL);
+ setLayout(mainLayout);
+ setWindowTitle(tr("File Info"));
+}
+
+void FileDisplay::setFileData(const QString &fullPath, const QString &md5Sum) {
+ mFullPath = fullPath;
+ mMd5 = md5Sum;
+ mDBData->setFileData(fullPath, md5Sum);
+}
+
+DBData::DBData(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) {
+ QLabel *seriesNameL = new QLabel(tr("Series"));
+ mSeriesName = new QLineEdit;
+ mSeriesName->setReadOnly(true);
+ QLabel *fullPathL = new QLabel(tr("File"));
+ mFullPath = new QLineEdit;
+ mFullPath->setReadOnly(true);
+ QLabel *md5L = new QLabel(tr("MD5"));
+ mMd5 = new QLineEdit;
+ mMd5->setReadOnly(true);
+
+ QGridLayout *topL = new QGridLayout;
+ topL->addWidget(seriesNameL, 0, 0);
+ topL->addWidget(mSeriesName, 0, 1);
+ topL->addWidget(fullPathL, 1, 0);
+ topL->addWidget(mFullPath, 1, 1);
+ topL->addWidget(md5L, 2, 0);
+ topL->addWidget(mMd5, 2, 1);
+ QGroupBox *topGB = new QGroupBox(tr("General"));
+ topGB->setLayout(topL);
+
+ mActors = new QTextEdit;
+ mActors->setReadOnly(true);
+ QGroupBox *actorsGB = new QGroupBox(tr("Actors"));
+ QHBoxLayout *actorsGBL = new QHBoxLayout;
+ actorsGBL->addWidget(mActors);
+ actorsGB->setLayout(actorsGBL);
+
+ mGenres = new QTextEdit;
+ mGenres->setReadOnly(true);
+ QGroupBox *genresGB = new QGroupBox(tr("Genres"));
+ QHBoxLayout *genresGBL = new QHBoxLayout;
+ genresGBL->addWidget(mGenres);
+ genresGB->setLayout(genresGBL);
+
+ QHBoxLayout *textL = new QHBoxLayout;
+ textL->addWidget(genresGB);
+ textL->addWidget(actorsGB);
+
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(topGB);
+ mainLayout->addLayout(textL);
+ setLayout(mainLayout);
+}
+
+void DBData::setFileData(const QString &fullPath, const QString &md5Sum){
+ mFullPath->setText(QDir::toNativeSeparators(fullPath));
+ mFullPath->home(false);
+ mMd5->setText(md5Sum);
+ gatherData();
+}
+
+void DBData::gatherData(){
+ const QString &md5 = mMd5->text();
+ const QString &fp = mFullPath->text();
+ QSqlDatabase db = QSqlDatabase::database("shemovdb");
+ if(!db.isOpen()){
+ db.open();
+ }
+
+ //series name
+ QVariantList seriesRes;
+ QSqlQuery seriesQ1(db);
+ seriesQ1.prepare("SELECT series.tseries_name, seriesparts.tsubtitle, seriesparts.iseriespart, seriesparts.iseriesparts_id FROM files, seriesparts, series WHERE files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id AND files.cmd5sum = :md5");
+ seriesQ1.bindValue(":md5", md5);
+ seriesQ1.exec();
+ while(seriesQ1.next()){
+ seriesRes << seriesQ1.value(0) << seriesQ1.value(1) << seriesQ1.value(2) << seriesQ1.value(3);
+ }
+ if(seriesRes.isEmpty()){
+ QSqlQuery seriesQ2(db);
+ seriesQ2.prepare("SELECT series.tseries_name, seriesparts.tsubtitle, seriesparts.iseriespart, seriesparts.iseriesparts_id FROM files_origin, files, seriesparts, series WHERE files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id AND files_origin.cmd5sum = :md5 AND files_origin.ifiles_id = files.ifiles_id");
+ seriesQ2.bindValue(":md5", md5);
+ seriesQ2.exec();
+ while(seriesQ2.next()){
+ seriesRes << seriesQ2.value(0) << seriesQ2.value(1) << seriesQ2.value(2) << seriesQ2.value(3);
+ }
+ }
+ QString seriesName(seriesRes.at(0).toString());
+ if(seriesRes.at(1).isValid()){
+ seriesName.append(QString(" - %1").arg(seriesRes.at(1).toString()));
+ }
+ if(seriesRes.at(2).toInt()){
+ seriesName.append(QString(" - %1").arg(seriesRes.at(2).toString()));
+ }
+ mSeriesName->setText(seriesName);
+
+ //actors
+ int seriesPartId = seriesRes.at(3).toInt();
+ QSqlQuery actorsQ(db);
+ actorsQ.prepare("SELECT actors.tactorname FROM actors, seriesparts, seriesparts_actormap WHERE actors.iactors_id = seriesparts_actormap.iactors_id AND seriesparts_actormap.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts.iseriesparts_id = :id ORDER BY actors.tactorname");
+ QStringList actors;
+ actorsQ.bindValue(":id", seriesPartId);
+ actorsQ.exec();
+ while(actorsQ.next()){
+ actors << actorsQ.value(0).toString();
+ }
+ QString actorsText = actors.join("\n");
+ mActors->setText(actorsText);
+
+ //genres
+ QSqlQuery genresQ(db);
+ genresQ.prepare("SELECT genres.tgenrename FROM genres, seriesparts, seriesparts_genremap WHERE genres.igenres_id = seriesparts_genremap.igenres_id AND seriesparts_genremap.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts.iseriesparts_id = :id ORDER BY genres.tgenrename");
+ QStringList genres;
+ genresQ.bindValue(":id", seriesPartId);
+ genresQ.exec();
+ while(genresQ.next()){
+ genres << genresQ.value(0).toString();
+ }
+ QString genresText = genres.join("\n");
+ mGenres->setText(genresText);
+}
diff --git a/filedisplay.h b/filedisplay.h
new file mode 100644
index 0000000..93b6a4a
--- /dev/null
+++ b/filedisplay.h
@@ -0,0 +1,40 @@
+#ifndef FILEDISPLAY_H
+#define FILEDISPLAY_H
+
+#include <QWidget>
+#include <QDialog>
+
+class QLineEdit;
+class QTextEdit;
+class QTabWidget;
+class DBData;
+
+class FileDisplay : public QDialog {
+ Q_OBJECT
+ public:
+ explicit FileDisplay(QWidget *parent = 0, Qt::WindowFlags f = 0);
+ void setFileData(const QString &fullPath, const QString &md5Sum);
+
+ private:
+ QTabWidget *mTab;
+ DBData *mDBData;
+ QString mFullPath;
+ QString mMd5;
+};
+
+class DBData : public QWidget {
+ Q_OBJECT
+ public:
+ explicit DBData(QWidget *parent = 0, Qt::WindowFlags f = 0);
+ void setFileData(const QString &fullPath, const QString &md5Sum);
+
+ private:
+ void gatherData();
+ QLineEdit *mSeriesName;
+ QLineEdit *mFullPath;
+ QLineEdit *mMd5;
+ QTextEdit *mActors;
+ QTextEdit *mGenres;
+};
+
+#endif // FILEDISPLAY_H
diff --git a/filewidget.cpp b/filewidget.cpp
index 0e3c9f1..aab6fe1 100644
--- a/filewidget.cpp
+++ b/filewidget.cpp
@@ -22,6 +22,7 @@
#include "filewidget.h"
#include "filesorter.h"
+#include "filedisplay.h"
#include "helper.h"
FileWidget::FileWidget(QWidget *parent) : QWidget(parent) {
@@ -83,6 +84,8 @@ void FileWidget::setupGui(){
mQFiles = QSqlQuery(mDb);
mQFiles.prepare("SELECT COUNT(*) FROM files WHERE cmd5sum = :md5");
+ mFileDisplay = new FileDisplay(this);
+
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(topL);
mainLayout->addWidget(mFileView);
@@ -120,8 +123,9 @@ void FileWidget::gatherData(){
fData << item;
}
fData[NameColumn]->setText(fi.fileName());
+ QString md5(tr("n/a"));
if(mime.name().startsWith("video")){
- QString md5 = Helper::md5Sum(fi.absoluteFilePath());
+ md5 = Helper::md5Sum(fi.absoluteFilePath());
fData[Md5Column]->setText(md5);
int haveFile = md5Count(md5);
if(haveFile){
@@ -141,18 +145,19 @@ void FileWidget::gatherData(){
fData[IconColumn]->setIcon(QIcon(":/folder.png"));
attr = Directory;
}
- fData[Md5Column]->setText(tr("n/a"));
}else{
fData[IconColumn]->setIcon(QIcon(":/gaping_ass.png"));
- fData[Md5Column]->setText(tr("n/a"));
attr = NoVideo;
}
+ fData[Md5Column]->setText(md5);
fData[MimeColumn]->setText(mime.name());
if(mime.name() == "inode/directory"){
fData[MimeColumn]->setText("directory");
}
for(int i = 0; i < ColumnCount; ++i){
- fData[i]->setData(attr);
+ fData[i]->setData(attr, AttrsRole);
+ fData[i]->setData(fi.absoluteFilePath(), FullPathRole);
+ fData[i]->setData(md5, MD5SumRole);
}
root->appendRow(fData);
}
@@ -224,13 +229,20 @@ void FileWidget::searchFile(){
void FileWidget::itemDoubleClicked(const QModelIndex &idx){
if(idx.column() == NameColumn){
- int attr = idx.data(Qt::UserRole + 1).toInt();
+ int attr = idx.data(AttrsRole).toInt();
if(attr == ParentDir || attr == Directory){
QDir d(mDir->text());
d.cd(idx.data().toString());
QString newDir = d.absolutePath();
mDir->setText(QDir::toNativeSeparators(newDir));
gatherData();
+ return;
+ }
+ if(attr == Present){
+ QString fp = idx.data(FullPathRole).toString();
+ QString md5 = idx.data(MD5SumRole).toString();
+ mFileDisplay->setFileData(fp, md5);
+ mFileDisplay->show();
}
}
}
diff --git a/filewidget.h b/filewidget.h
index 05bae9d..385eeff 100644
--- a/filewidget.h
+++ b/filewidget.h
@@ -10,13 +10,15 @@ class QPushButton;
class QStandardItemModel;
class QTreeView;
class VideoSorter;
+class FileDisplay;
class FileWidget : public QWidget {
Q_OBJECT
public:
enum FileAttrs { NotPresent = 0, Present = 1, NoVideo = 2, ParentDir = 3, Directory = 4 };
+ enum CustomRoles { AttrsRole = Qt::UserRole + 1, FullPathRole = Qt::UserRole + 2, MD5SumRole = Qt::UserRole + 3 };
enum { ColumnCount = 4 };
- enum Colums { IconColumn = 0, NameColumn = 1, MimeColumn = 2, Md5Column = 3 };
+ enum Columns { IconColumn = 0, NameColumn = 1, MimeColumn = 2, Md5Column = 3 };
explicit FileWidget(QWidget *parent = 0);
~FileWidget();
@@ -43,6 +45,7 @@ class FileWidget : public QWidget {
QSqlDatabase mDb;
QSqlQuery mQOrigin;
QSqlQuery mQFiles;
+ FileDisplay *mFileDisplay;
};
#endif // FILEWIDGET_H