summaryrefslogtreecommitdiffstats
path: root/newmoviewizard.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2014-12-07 12:40:35 +0100
committerArno <am@disconnect.de>2014-12-07 12:40:35 +0100
commit51bc87ebc73b5777ad36e35ec20445b07a0d7639 (patch)
tree71b7b02041a5a728cf7dc2b62892328d3bd2d907 /newmoviewizard.cpp
parentbd3716dcab86c7d3e018004a1f26b470a7f6cfb7 (diff)
downloadSheMov-51bc87ebc73b5777ad36e35ec20445b07a0d7639.tar.gz
SheMov-51bc87ebc73b5777ad36e35ec20445b07a0d7639.tar.bz2
SheMov-51bc87ebc73b5777ad36e35ec20445b07a0d7639.zip
Redesign of NewMovieWizard
Make it possible to add parent files to files, so we can identify already downloaded files even if we reencoded them. Record the md5sum in a new table files_origin.
Diffstat (limited to 'newmoviewizard.cpp')
-rw-r--r--newmoviewizard.cpp107
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);