diff options
author | Arno <am@disconnect.de> | 2011-01-23 11:51:31 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2011-01-23 11:51:31 +0100 |
commit | e4718ab079f4a4eba4a47fb75992b977a787f369 (patch) | |
tree | 9b0529d4d5cc015880951e0f0a6337a3e59dc9b7 | |
parent | 6c1a89feb8e8178b02adfa8b4fdc0eb8ef0e78c1 (diff) | |
download | SheMov-e4718ab079f4a4eba4a47fb75992b977a787f369.tar.gz SheMov-e4718ab079f4a4eba4a47fb75992b977a787f369.tar.bz2 SheMov-e4718ab079f4a4eba4a47fb75992b977a787f369.zip |
Implement metadata
Added a WizardPage to add metadata like releaseyear, releasegroup,
newsgroup subject and such. Metadata can't be displayed at the moment
and needs to be revameped seriously. I guess it's time for another model
keeping the metadata.
Created a new table in the database for this.
-rw-r--r-- | newmoviewizard.cpp | 116 | ||||
-rw-r--r-- | newmoviewizard.h | 28 | ||||
-rw-r--r-- | seriestreemodel.cpp | 4 |
3 files changed, 145 insertions, 3 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(); diff --git a/newmoviewizard.h b/newmoviewizard.h index abcf977..639a710 100644 --- a/newmoviewizard.h +++ b/newmoviewizard.h @@ -11,6 +11,7 @@ #include <QWizard> #include <QWizardPage> #include <QHash> +#include <QList> #include "smtreemodel.h" #include "mappingtablewidget.h" @@ -22,10 +23,12 @@ class QPushButton; class QComboBox; class QCheckBox; class QStringListModel; +class QPlainTextEdit; class WizardTreeModel; class SmTreeItem; class MovieInfoPage; class MovieMappingPage; +class MovieMetadataPage; class PictureViewer; class NewMovieWizard : public QWizard { @@ -41,9 +44,11 @@ class NewMovieWizard : public QWizard { void seriesAdded(const QString series, int seriesPart); private: + void doMetadata(const QModelIndex &idx); MovieInfoPage *mInfoPage; MovieMappingPage *mActorPage; MovieMappingPage *mGenrePage; + MovieMetadataPage *mMetadataPage; }; @@ -97,6 +102,29 @@ class MovieMappingPage : public QWizardPage { MappingTableWidget *mWidget; }; +class MovieMetadataPage : public QWizardPage { + Q_OBJECT + public: + explicit MovieMetadataPage(QWidget *parent = 0); + virtual ~MovieMetadataPage() {} + virtual void initializePage(); + + private slots: + void toggleMetadata(int state); + + private: + void setupGui(); + QSpinBox *mReleaseYear; + QComboBox *mSourceMedium; + QComboBox *mReleaseGroup; + QLineEdit *mSubject; + QLineEdit *mEncoderOpts; + QSpinBox *mPasses; + QPlainTextEdit *mComment; + QCheckBox *mMetadataEnabled; + QList<QWidget*> mWidgets; +}; + class WizardTreeModel : public SmTreeModel { Q_OBJECT public: diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index a86cad6..3a3379b 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -316,7 +316,7 @@ bool SeriesTreeModel::addSeries(const QVariant &seriesName, const QModelIndex &p if(lastId.next()){ int id = lastId.value(0).toInt(); QList<QVariant> seriesData; - seriesData << name << id << QVariant() << QVariant() << Series; + seriesData << name << id << QVariant() << QVariant() << Series << false; if(addRow(seriesData, parent)){ mDb.commit(); return true; @@ -340,7 +340,7 @@ bool SeriesTreeModel::addSeriesPart(int seriesPart, const QModelIndex &parent){ if(lastId.next()){ int id = lastId.value(0).toInt(); QList<QVariant> partData; - partData << parent.data(NameRole) << seriesId << id << seriesPart << Part; + partData << parent.data(NameRole) << seriesId << id << seriesPart << Part << false; if(addRow(partData, parent)){ mDb.commit(); mSeriesPartSeriesMap.insert(id, seriesId); |