summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno Moeller <am@mindwerk.de>2010-07-09 17:47:08 +0200
committerArno Moeller <am@mindwerk.de>2010-07-09 17:47:08 +0200
commit4f313fb96ada615b209a6e37832da140abf63b07 (patch)
tree5ed574d9726bd79dad4c7c6ae52e1995bafc1775
parent36d60fc19f6cbc1a76931479664589544411763b (diff)
downloadSheMov-4f313fb96ada615b209a6e37832da140abf63b07.tar.gz
SheMov-4f313fb96ada615b209a6e37832da140abf63b07.tar.bz2
SheMov-4f313fb96ada615b209a6e37832da140abf63b07.zip
First version of NewMovieWizard::accept
This version is not tested and may contain some very exiting, new bugs. But it compiles.
-rw-r--r--filestreemodel.cpp5
-rw-r--r--newmoviewizard.cpp69
-rw-r--r--newmoviewizard.h4
3 files changed, 73 insertions, 5 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp
index 35883d3..76dca8b 100644
--- a/filestreemodel.cpp
+++ b/filestreemodel.cpp
@@ -224,6 +224,9 @@ bool FilesTreeModel::addFile(const QString &fullPath, int type, int quality, int
//insert item
if(mInsertFileQuery->exec()){
-
+ mDb.commit();
+ return true;
}
+ mDb.rollback();
+ return false;
}
diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp
index 6ec74fd..8a4cdd8 100644
--- a/newmoviewizard.cpp
+++ b/newmoviewizard.cpp
@@ -19,10 +19,13 @@
#include <QLocale>
#include <QCompleter>
#include <QCheckBox>
+#include <QMessageBox>
+#include <QFile>
#include "newmoviewizard.h"
#include "smtreeitem.h"
#include "seriestreemodel.h"
+#include "filestreemodel.h"
#include "smmodelsingleton.h"
#include "mappingtablewidget.h"
#include "mappingtablemodel.h"
@@ -35,17 +38,62 @@ NewMovieWizard::NewMovieWizard(QWidget *parent) : QWizard(parent){
}
void NewMovieWizard::accept(){
+ //conjure up models
+ SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
+ FilesTreeModel *filesModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel"));
+
+ //handle series
QString series = field("title").toString();
- int seriesNo = field("seriesNo").toInt();
- int partNo = field("partNo").toInt();
+ series = series.toLower().trimmed();
+ QModelIndex seriesIdx = seriesModel->find(series);
+ if(!seriesIdx.isValid()){
+ if(seriesModel->addSeries(series, QModelIndex())){
+ seriesIdx = seriesModel->find(series);
+ }else{
+ QMessageBox::critical(this, tr("Error"), tr("Failed to create new series!"));
+ return;
+ }
+ }
+
+ //handle seriespart
+ int seriesno = field("seriesNo").toInt();
+ QModelIndex seriesPartIdx = seriesModel->find(seriesno, SeriesTreeModel::SeriesPart, seriesIdx);
+ if(seriesPartIdx.isValid()){
+ QString error = QString(tr("Already have part %1 of %2")).arg(seriesno).arg(series);
+ QMessageBox::critical(this, tr("Error"), error);
+ return;
+ }
+ if(!seriesModel->addSeriesPart(seriesno, seriesIdx)){
+ QMessageBox::critical(this, tr("Error"), tr("Failed to create series part!"));
+ return;
+ }
+ seriesPartIdx = seriesModel->find(seriesno, SeriesTreeModel::SeriesPart, seriesIdx);
+ int seriesPartId = seriesPartIdx.data(SeriesTreeModel::SeriesPartIdRole).toInt();
+
+ //handle files
+ MovieInfoPage *movieInfoPage = static_cast<MovieInfoPage*>(page(0));
+ WizardTreeModel *wizardModel = movieInfoPage->model();
int quality = field("quality").toInt();
int dvdNo = -1;
bool onDvd = field("onDvd").toBool();
if(onDvd){
dvdNo = field("dvdNo").toInt();
}
- MovieInfoPage *movieInfoPage = static_cast<MovieInfoPage*>(page(0));
- WizardTreeModel *fileModel = movieInfoPage->model();
+ int partNo = field("partNo").toInt();
+ QHash<QString, int> fileData = wizardModel->files();
+ QHash<QString, int>::const_iterator it = fileData.constBegin();
+ while(it != fileData.constEnd()){
+ QString path = it.key();
+ int type = it.value();
+ if(filesModel->addFile(path, type, quality, partNo, seriesPartId, dvdNo)){
+ QString md5sum = Helper::md5Sum(path);
+ //Helper::moveToArchive(path, md5sum);
+ }
+ }
+
+ //done
+ emit seriesAdded(series, seriesno);
+ QDialog::accept();
}
MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){
@@ -256,6 +304,19 @@ Qt::ItemFlags WizardTreeModel::flags(const QModelIndex &index) const{
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
+QHash<QString, int> WizardTreeModel::files() const{
+ QHash<QString, int> retval;
+ SmTreeItem *rootItem = root();
+ for(int i = 0; i < rootItem->childCount(); ++i){
+ SmTreeItem *firstChild = rootItem->child(i);
+ for(int j = 0; j < firstChild->childCount(); ++j){
+ SmTreeItem *secondChild = firstChild->child(j);
+ retval.insert(secondChild->data(WizardTreeModel::FullPath).toString(), secondChild->data(WizardTreeModel::FileType).toInt());
+ }
+ }
+ return retval;
+}
+
QVariant WizardTreeModel::data(const QModelIndex &index, int role) const{
SmTreeItem *item = static_cast<SmTreeItem*>(index.internalPointer());
if(role == Qt::DisplayRole){
diff --git a/newmoviewizard.h b/newmoviewizard.h
index a0f80b4..7c671cd 100644
--- a/newmoviewizard.h
+++ b/newmoviewizard.h
@@ -31,6 +31,9 @@ class NewMovieWizard : public QWizard {
explicit NewMovieWizard(QWidget *parent = 0);
void accept();
+ signals:
+ void seriesAdded(const QString series, int seriesPart);
+
};
class MovieInfoPage : public QWizardPage {
@@ -85,6 +88,7 @@ class WizardTreeModel : public SmTreeModel {
//data + flags
virtual QVariant data(const QModelIndex &index, int role) const;
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+ QHash<QString, int> files() const;
//file types
QStringList types() const;