diff options
Diffstat (limited to 'newmoviewizard.cpp')
-rw-r--r-- | newmoviewizard.cpp | 116 |
1 files changed, 115 insertions, 1 deletions
diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp index 99c2f8d..1576c55 100644 --- a/newmoviewizard.cpp +++ b/newmoviewizard.cpp @@ -22,6 +22,11 @@ #include <QMessageBox> #include <QFile> #include <QSettings> +#include <QFormLayout> +#include <QDate> +#include <QSqlDatabase> +#include <QSqlQuery> +#include <QPlainTextEdit> #include "newmoviewizard.h" #include "smtreeitem.h" @@ -38,9 +43,11 @@ NewMovieWizard::NewMovieWizard(QWidget *parent) : QWizard(parent){ mInfoPage = new MovieInfoPage; mActorPage = new MovieMappingPage("actors"); mGenrePage = new MovieMappingPage("genres"); + mMetadataPage = new MovieMetadataPage; addPage(mInfoPage); addPage(mActorPage); addPage(mGenrePage); + addPage(mMetadataPage); setOption(QWizard::IndependentPages, true); } @@ -86,7 +93,6 @@ void NewMovieWizard::accept(){ if(onDvd){ dvdNo = field("dvdNo").toInt(); } - //int partNo = field("partNo").toInt(); QHash<QString, int> fileData = wizardModel->files(); QHash<QString, int>::const_iterator it = fileData.constBegin(); while(it != fileData.constEnd()){ @@ -117,6 +123,9 @@ void NewMovieWizard::accept(){ MappingTableModel *genreModel = static_cast<MappingTableModel*>(SmGlobals::instance()->model("genres")); genreModel->setMappings(genres, seriesPartId); + //handle metadata + doMetadata(seriesPartIdx); + //make picviewer setting persistent QSettings s; s.setValue("ui/archiveusepicviewer", field("usePicViewer")); @@ -126,6 +135,26 @@ void NewMovieWizard::accept(){ QDialog::accept(); } +void NewMovieWizard::doMetadata(const QModelIndex &idx){ + bool isEnabled = field("enabled").toBool(); + if(!isEnabled){ + return; + } + QSqlDatabase db = QSqlDatabase::database("treedb"); + int seriesPartId = idx.data(SeriesTreeModel::SeriesPartIdRole).toInt(); + QSqlQuery metadataInsert(db); + metadataInsert.prepare("INSERT INTO metadata (iseriespart_id, sireleaseyear, tsourcemedium, tsubject, treleasegroup, tencoderopts, tcomment, sipasses) VALUES(:id, :year, :source, :subject, :group, :enc, :comment, :passes)"); + metadataInsert.bindValue(":id", seriesPartId); + metadataInsert.bindValue(":year", field("year")); + metadataInsert.bindValue(":source", field("source")); + metadataInsert.bindValue(":subject", field("subject")); + metadataInsert.bindValue(":group", field("group")); + metadataInsert.bindValue(":enc", field("encoder")); + metadataInsert.bindValue(":comment", field("comment")); + metadataInsert.bindValue(":passes", field("passes")); + metadataInsert.exec(); +} + MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){ setupGui(); mPicViewer = SmGlobals::instance()->pictureViewer(); @@ -436,6 +465,91 @@ void MovieMappingPage::initializePage(){ model()->setStringList(QStringList()); } +MovieMetadataPage::MovieMetadataPage(QWidget *parent) : QWizardPage(parent){ + setTitle(tr("Edit movie metadata")); + setSubTitle(tr("Set the movie metadata here, as far as known")); + setupGui(); +} + +void MovieMetadataPage::setupGui(){ + QFormLayout *rowLayout = new QFormLayout; + mReleaseYear = new QSpinBox; + mReleaseYear->setMaximum(3000); + mReleaseYear->setMinimum(1900); + rowLayout->addRow(tr("Release year"), mReleaseYear); + mReleaseGroup = new QComboBox; + mPasses = new QSpinBox; + rowLayout->addRow(tr("Encoding passes"), mPasses); + mReleaseGroup->setEditable(true); + rowLayout->addRow(tr("Release group"), mReleaseGroup); + mSourceMedium = new QComboBox; + mSourceMedium->setEditable(true); + rowLayout->addRow(tr("Source medium"), mSourceMedium); + mSubject = new QLineEdit; + rowLayout->addRow(tr("Usenet subject"), mSubject); + mEncoderOpts = new QLineEdit; + rowLayout->addRow(tr("Encoder options"), mEncoderOpts); + QVBoxLayout *commentLayout = new QVBoxLayout; + QLabel *commentLabel = new QLabel(tr("Comment")); + commentLayout->addWidget(commentLabel); + mComment = new QPlainTextEdit; + commentLayout->addWidget(mComment); + 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))); + + mWidgets << mReleaseYear << mReleaseGroup << mSourceMedium << mSubject << mEncoderOpts << mComment << mPasses; + toggleMetadata(Qt::Unchecked); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addLayout(rowLayout); + mainLayout->addLayout(commentLayout); + mainLayout->addLayout(enabledLayout); + setLayout(mainLayout); + + //expose data + registerField("year", mReleaseYear); + registerField("passes", mPasses); + registerField("group", mReleaseGroup); + registerField("source", mSourceMedium); + registerField("subject", mSubject); + registerField("encoder", mEncoderOpts); + registerField("comment", mComment); + registerField("enabled", mMetadataEnabled); +} + +void MovieMetadataPage::initializePage(){ + QSqlDatabase db = QSqlDatabase::database("treedb"); + QSqlQuery relGroupQuery("SELECT DISTINCT(treleasegroup) FROM metadata ORDER BY treleasegroup DESC", db); + QStringList relGroups; + while(relGroupQuery.next()){ + relGroups << relGroupQuery.value(0).toString(); + } + mReleaseGroup->clear(); + mReleaseGroup->addItems(relGroups); + QSqlQuery sourceMediumQuery("SELECT DISTINCT(tsourcemedium) FROM metadata ORDER BY tsourcemedium DESC", db); + QStringList sourceMediums; + while(sourceMediumQuery.next()){ + sourceMediums << sourceMediumQuery.value(0).toString(); + } + mSourceMedium->clear(); + mSourceMedium->addItems(sourceMediums); + mReleaseYear->setValue(QDate::currentDate().year()); + mPasses->setValue(2); + mSubject->clear(); + mEncoderOpts->clear(); + mComment->clear(); +} + +void MovieMetadataPage::toggleMetadata(int state){ + bool isEnabled = (state == Qt::Checked); + foreach(QWidget *w, mWidgets){ + w->setEnabled(isEnabled); + } +} + WizardTreeModel::WizardTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){ FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel")); mFileTypeMap = filesModel->fileTypes(); |