#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "filewidget.h" #include "helper.h" FileWidget::FileWidget(QWidget *parent) : QWidget(parent) { setupGui(); } void FileWidget::setupGui(){ mDir = new QLineEdit; QCompleter *fsCompleter = new QCompleter(this); QDirModel *dirModel = new QDirModel(this); fsCompleter->setModel(dirModel); fsCompleter->setCompletionMode(QCompleter::PopupCompletion); mDir->setCompleter(fsCompleter); mSelDir = new QPushButton(tr("Browse...")); connect(mSelDir, SIGNAL(clicked()), this, SLOT(selectDir())); QLabel *dirL = new QLabel(tr("&Directory")); dirL->setBuddy(mDir); mSearchFile = new QLineEdit; connect(mSearchFile, SIGNAL(returnPressed()), this, SLOT(searchFile())); mSearch = new QPushButton(tr("Search")); connect(mSearch, SIGNAL(clicked()), this, SLOT(searchFile())); QLabel *searchL = new QLabel(tr("&Search")); searchL->setBuddy(mSearchFile); QGridLayout *topL = new QGridLayout; topL->addWidget(dirL, 0, 0); topL->addWidget(mDir, 0, 1); topL->addWidget(mSelDir, 0, 2); topL->addWidget(searchL, 1, 0); topL->addWidget(mSearchFile, 1, 1); topL->addWidget(mSearch, 1, 2); mFileView = new QTreeView; mFileView->setSortingEnabled(true); mFileView->setSelectionBehavior(QAbstractItemView::SelectRows); mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); mModel = new QStandardItemModel; mFileView->setModel(mModel); QSqlDatabase mDb = QSqlDatabase::database("shemovdb"); if(!mDb.isOpen()){ mDb.open(); } mQOrigin = QSqlQuery(mDb); mQOrigin.prepare("SELECT COUNT(*) FROM files_origin WHERE cmd5sum = :md5"); mQFiles = QSqlQuery(mDb); mQFiles.prepare("SELECT COUNT(*) FROM files WHERE cmd5sum = :md5"); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(topL); mainLayout->addWidget(mFileView); setLayout(mainLayout); gatherData(); } void FileWidget::selectDir(){ QString dir = QFileDialog::getExistingDirectory(this, tr("Select directory"), QDir::homePath()); mDir->setText(QDir::toNativeSeparators(dir)); gatherData(); } void FileWidget::gatherData(){ QDir d(mDir->text()); QFileInfoList fl = d.entryInfoList(QStringList() << "*", QDir::Files, QDir::Name); mModel->clear(); QStandardItem *root = mModel->invisibleRootItem(); mModel->setHorizontalHeaderLabels(QStringList() << QChar(0x26A7) << tr("Name") << tr("MIME") << tr("MD5")); QBrush redBrush(Qt::red); QBrush greenBrush(Qt::darkGreen); QMimeDatabase db; foreach(QFileInfo fi, fl){ QMimeType mime = db.mimeTypeForFile(fi); QStandardItem *i1; QStandardItem *i2 = new QStandardItem(fi.fileName()); i2->setEditable(false); QStandardItem *i4; if(mime.name().startsWith("video")){ i1 = new QStandardItem(QIcon(":/huge_bra.png"), QString()); QString md5 = Helper::md5Sum(fi.absoluteFilePath()); i4 = new QStandardItem(md5); i4->setFont(QFont("courier new")); int haveFile = md5Count(md5); if(haveFile){ i2->setForeground(greenBrush); }else{ i2->setForeground(redBrush); } }else{ i1 = new QStandardItem(QIcon(":/gaping_ass.png"), QString()); i4 = new QStandardItem(tr("n/a")); i4->setFont(QFont("courier new")); } i1->setEditable(false); QStandardItem *i3 = new QStandardItem(mime.name()); i3->setEditable(false); root->appendRow(QList() << i1 << i2 << i3 << i4); } mFileView->resizeColumnToContents(0); mFileView->resizeColumnToContents(1); mFileView->resizeColumnToContents(2); } int FileWidget::md5Count(const QString &md5) { mQOrigin.bindValue(":md5", md5); mQOrigin.exec(); int retval = 0; while(mQOrigin.next()){ retval = mQOrigin.value(0).toInt(); } if(!retval){ mQFiles.bindValue(":md5", md5); while(mQFiles.next()){ retval = mQFiles.value(0).toInt(); } } return retval; } void FileWidget::searchFile(){ }