diff options
Diffstat (limited to 'newmoviewizard.cpp')
-rw-r--r-- | newmoviewizard.cpp | 107 |
1 files changed, 79 insertions, 28 deletions
diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp index 0fe0bae..2500e78 100644 --- a/newmoviewizard.cpp +++ b/newmoviewizard.cpp @@ -23,6 +23,7 @@ #include <QFileInfo> #include <QPixmap> #include <QHeaderView> +#include <QSortFilterProxyModel> #include "newmoviewizard.h" #include "smtreeitem.h" @@ -113,9 +114,12 @@ void NewMovieWizard::accept(){ WizardTreeModel *wizardModel = movieInfoPage->model(); QSqlQuery insertFilesQ(db); insertFilesQ.prepare("INSERT INTO files (iseriespart_id, tfilename, cmd5sum, bisize, sifiletype, sifileno, siquality, cpicsize, iduration) VALUES(:ipid, :tfn, :md5, :size, :ft, :fno, :qual, :psize, :dur)"); + QSqlQuery insertOriginQ(db); + insertOriginQ.prepare("INSERT INTO files_origin (ifiles_id, tname, cmd5sum, bisize, ibitrate) VALUES(:oid, :oname, :omd5, :osize, :obitrate)"); QHash<QString, QString> md5Sums; for(int i = 0; i < wizardModel->rowCount(QModelIndex()); ++i){ - QList<QVariant> fData = wizardModel->fileData(i); + QModelIndex curIdx = wizardModel->index(i, 0, QModelIndex()); + QList<QVariant> fData = wizardModel->fileData(curIdx); QString fullPath = fData.value(WizardTreeModel::FullPath).toString(); QFileInfo fi(fullPath); qint64 size = fi.size(); @@ -125,10 +129,28 @@ void NewMovieWizard::accept(){ QString picSize; int type = fData.value(WizardTreeModel::FileType).toInt(); QVariant quality; + QString oName, oMD5; + qint64 oSize, oldBitrate; + bool hasOrigin = false; if(type == FT_MOVIE){ QVariantMap m = Helper::ffmpegData(fullPath); secs = m.value("duration").toDouble(); quality = field("quality").toInt(); + //check for origin + QModelIndex oIdx = curIdx.child(0, 0); + if(oIdx.isValid()){ + QList<QVariant> oData = wizardModel->fileData(oIdx); + QString oFullPath = oData.value(WizardTreeModel::FullPath).toString(); + QFileInfo oFi(oFullPath); + oName = fi.fileName(); + oSize = oFi.size(); + oMD5 = Helper::md5Sum(oFullPath); + QVariantMap oldFfmpeg = Helper::ffmpegData(oFullPath); + oldBitrate = oldFfmpeg.value("bit_rate").toLongLong(); + oldBitrate /= 1000; + hasOrigin = true; + } + }else{ QPixmap pix(fullPath); picSize = QString("%1x%2").arg(QString::number(pix.width())).arg(QString::number(pix.height())); @@ -142,10 +164,28 @@ void NewMovieWizard::accept(){ insertFilesQ.bindValue(":qual", quality); insertFilesQ.bindValue(":psize", picSize); insertFilesQ.bindValue(":dur", secs); - if(!insertFilesQ.exec()){ + if(insertFilesQ.exec()){ + if(hasOrigin){ + int curFileId = -1; + QSqlQuery curval("SELECT currval('files_ifiles_id__seq')", db); + while(curval.next()){ + curFileId= curval.value(0).toInt(); + } + insertOriginQ.bindValue(":oid", curFileId); + insertOriginQ.bindValue(":oname", oName); + insertOriginQ.bindValue(":omd5", oMD5); + insertOriginQ.bindValue(":osize", oSize); + insertOriginQ.bindValue(":obitrate", oldBitrate); + if(!insertOriginQ.exec()){ + db.rollback(); + return; + } + } + }else{ db.rollback(); return; } + } //files have landed //handle actors @@ -240,7 +280,8 @@ void NewMovieWizard::accept(){ //we're still here, good //now actually move the files for(int i = 0; i < wizardModel->rowCount(QModelIndex()); ++i){ - QList<QVariant> fData = wizardModel->fileData(i); + QModelIndex curIdx = wizardModel->index(i, 0, QModelIndex()); + QList<QVariant> fData = wizardModel->fileData(curIdx); QString fullPath = fData.value(WizardTreeModel::FullPath).toString(); QString md5 = md5Sums.value(fullPath); Helper::moveToArchive(fullPath, md5); @@ -264,9 +305,9 @@ void MovieInfoPage::setupGui(){ //files view mFileView = new SmTreeView; - QSortFilterProxyModel *p = new QSortFilterProxyModel(this); - p->setSourceModel(mFileModel); - mFileView->setModel(p); + mProxy = new QSortFilterProxyModel(this); + mProxy->setSourceModel(mFileModel); + mFileView->setModel(mProxy); mFileView->setItemDelegateForColumn(WizardTreeModel::FileType, new FileTypeDelegate(mFileView)); mFileView->setItemDelegateForColumn(WizardTreeModel::FileSize, new SizeDelegate(mFileView)); mFileView->setItemDelegateForColumn(WizardTreeModel::FilePart, new FileNoDelegate(mFileView)); @@ -276,6 +317,9 @@ void MovieInfoPage::setupGui(){ //add + remove files QHBoxLayout *fileButtonLayout = new QHBoxLayout; fileButtonLayout->addStretch(); + mAddOld = new QPushButton(tr("Add Old...")); + fileButtonLayout->addWidget(mAddOld); + connect(mAddOld, SIGNAL(clicked()), this, SLOT(addOld())); mAddFile = new QPushButton(tr("Add files...")); fileButtonLayout->addWidget(mAddFile); connect(mAddFile, SIGNAL(clicked()), this, SLOT(addFiles())); @@ -377,6 +421,30 @@ void MovieInfoPage::initCompleters(){ mSeriesCompleterModel->setStringList(series); } +void MovieInfoPage::addOld(){ + QSettings s; + QString startDir = s.value("paths/addfilespath", QDir::homePath()).toString(); + QString oldFile = QFileDialog::getOpenFileName(this, tr("Select files"), startDir); + if(oldFile.isEmpty()){ + return; + } + QFileInfo fi(oldFile); + qint64 oldSize = fi.size(); + QString fullPath = fi.absoluteFilePath(); + QString fn = fi.fileName(); + int filetype = FT_ORIGIN; + + //prepare item data + QList<QVariant> itemData; + itemData << fn << oldSize << filetype << QVariant() << fullPath; + QModelIndexList curIdxList = mFileView->selectionModel()->selectedRows(); + if(!curIdxList.isEmpty()){ + QModelIndex realIdx = mProxy->mapToSource(curIdxList[0]); + mFileModel->appendRow(itemData, realIdx); + mFileView->expandAll(); + } +} + void MovieInfoPage::addFiles(){ QSettings s; QString startDir = s.value("paths/addfilespath", QDir::homePath()).toString(); @@ -385,7 +453,7 @@ void MovieInfoPage::addFiles(){ return; } foreach(QString f, files){ - addFile(f); + addFile(f); } QFileInfo fi(files.at(0)); s.setValue("paths/addfilespath", fi.absolutePath()); @@ -432,40 +500,23 @@ MovieMetadataPage::MovieMetadataPage(QWidget *parent) : QWizardPage(parent){ void MovieMetadataPage::setupGui(){ mWidget = new MetadataEditorWidget; - - QHBoxLayout *enabledLayout = new QHBoxLayout; - enabledLayout->setAlignment(Qt::AlignRight); - mMetadataEnabled = new QCheckBox(tr("Enable metadata")); - enabledLayout->addWidget(mMetadataEnabled); - connect(mMetadataEnabled, SIGNAL(stateChanged(int)), this, SLOT(toggleMetadata(int))); - toggleMetadata(Qt::Unchecked); - registerField("enabled", mMetadataEnabled); - - QVBoxLayout *mainLayout = new QVBoxLayout; + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mWidget); - mainLayout->addLayout(enabledLayout); setLayout(mainLayout); } void MovieMetadataPage::initializePage(){ - ArchiveController *c = SmGlobals::instance()->archiveController(); - mWidget->setReleaseGroups(c->archiveTreeModel()->allReleaseGroups()); - mWidget->setSources(c->archiveTreeModel()->allSources()); QList<QVariant> curMetadata; for(int i = 0; i < ArchiveModel::MetadataNumFields; ++i){ curMetadata << QVariant(); } curMetadata[ArchiveModel::ReleaseYear] = QDate::currentDate().year(); - curMetadata[ArchiveModel::Source] = "unknown"; + curMetadata[ArchiveModel::Source] = "torrent"; curMetadata[ArchiveModel::ReleaseGroup] = "unknown"; curMetadata[ArchiveModel::Added] = QDate::currentDate(); mWidget->setMetadata(curMetadata); } -void MovieMetadataPage::toggleMetadata(int state){ - mWidget->setEnabledAll(state == Qt::Checked); -} - WizardTreeModel::WizardTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){ mFiletypeMap = SmGlobals::instance()->filetypeMap(); } @@ -477,8 +528,8 @@ Qt::ItemFlags WizardTreeModel::flags(const QModelIndex &index) const{ return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } -QList<QVariant> WizardTreeModel::fileData(int row) const{ - SmTreeItem *item = root()->child(row); +QList<QVariant> WizardTreeModel::fileData(const QModelIndex &idx) const{ + SmTreeItem *item = itemAt(idx); QList<QVariant> retval; for(int i = 0; i < item->columnCount(); ++i){ retval << item->data(i); |