summaryrefslogtreecommitdiffstats
path: root/newmoviewizard.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2011-01-23 11:51:31 +0100
committerArno <am@disconnect.de>2011-01-23 11:51:31 +0100
commite4718ab079f4a4eba4a47fb75992b977a787f369 (patch)
tree9b0529d4d5cc015880951e0f0a6337a3e59dc9b7 /newmoviewizard.cpp
parent6c1a89feb8e8178b02adfa8b4fdc0eb8ef0e78c1 (diff)
downloadSheMov-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.
Diffstat (limited to 'newmoviewizard.cpp')
-rw-r--r--newmoviewizard.cpp116
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();