summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--newmoviewizard.cpp116
-rw-r--r--newmoviewizard.h28
-rw-r--r--seriestreemodel.cpp4
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);