diff options
Diffstat (limited to 'newmoviewizard.cpp')
-rw-r--r-- | newmoviewizard.cpp | 69 |
1 files changed, 65 insertions, 4 deletions
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){ |