From 482e7371d34477bd43d44c7b905354774de5d641 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 29 May 2010 16:32:20 +0200 Subject: Implemented ArchiveItemEditDialog::accept() Now the update button from ArchiveItemEditDialog actually updates something. The cover handling is much cleaner than in CoverArchiveEditor on first glance. This means I can get rid of CoverArchiveEditor and EditArchiveItemDialog at last. --- archiveitemeditdialog.cpp | 117 +++++++++++++++++++++++++++++++++++++++++++++- archiveitemeditdialog.h | 10 +++- archiveiteminfoedit.cpp | 2 +- 3 files changed, 126 insertions(+), 3 deletions(-) diff --git a/archiveitemeditdialog.cpp b/archiveitemeditdialog.cpp index 0cd11eb..90aa1df 100644 --- a/archiveitemeditdialog.cpp +++ b/archiveitemeditdialog.cpp @@ -10,6 +10,8 @@ #include #include +#include + #include "archiveitemeditdialog.h" #include "archiveiteminfoedit.h" #include "archiveitemcoveredit.h" @@ -17,8 +19,12 @@ #include "moviemodel.h" #include "movieitem.h" #include "fileinfomodel.h" +#include "listmodelsingleton.h" +#include "listmodel.h" +#include "coveritem.h" +#include "helper.h" -ArchiveItemEditDialog::ArchiveItemEditDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ +ArchiveItemEditDialog::ArchiveItemEditDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), mMovieId(-1){ //Init dialog QVBoxLayout *mainLayout = new QVBoxLayout; @@ -62,4 +68,113 @@ void ArchiveItemEditDialog::setMovie(const QModelIndex &idx){ //Set covers mCoverEdit->setCovers(idx.data(MovieModel::CoverRole).toList()); + + //Store ID + mMovieId = idx.data(MovieModel::IdRole).toInt(); + + //Window Title + QString title = QString(tr("Edit %1")).arg(idx.data().toString()); + setWindowTitle(title); +} + +void ArchiveItemEditDialog::accept(){ + //Get Models + ListModel *actorModel = ListModelSingleton::instance()->model("actor"); + ListModel *genreModel = ListModelSingleton::instance()->model("genre"); + MovieModel *movieModel = MovieModelSingleton::instance(); + + //Update actors + QStringList actors = mInfoEdit->actors(); + QList actorIds; + foreach(QString a, actors){ + QModelIndex idx = actorModel->index(a); + if(idx.isValid()){ + actorIds << idx.data(ListModel::IdRole); + } + } + movieModel->setActors(mMovieId, actorIds); + + //Update genre + QString genre = mInfoEdit->genre(); + QVariant genreId = genreModel->index(genre).data(ListModel::IdRole); + QModelIndex movieModelIndex = movieModel->index(mMovieId, MovieItem::Genre); + movieModel->setDataAt(movieModelIndex, genreId); + + //Update quality + movieModelIndex = movieModel->index(mMovieId, MovieItem::Quality); + movieModel->setDataAt(movieModelIndex, mInfoEdit->quality()); + + //Update dvdno + movieModelIndex = movieModel->index(mMovieId, MovieItem::Dvd); + movieModel->setDataAt(movieModelIndex, mInfoEdit->dvd()); + + //Update seriesno + movieModelIndex = movieModel->index(mMovieId, MovieItem::SeriesNo); + movieModel->setDataAt(movieModelIndex, mInfoEdit->series()); + + //Update partno + movieModelIndex = movieModel->index(mMovieId, MovieItem::PartNo); + movieModel->setDataAt(movieModelIndex, mInfoEdit->part()); + + //Update title + movieModelIndex = movieModel->index(mMovieId, MovieItem::Title); + if(!mInfoEdit->title().isEmpty()){ + movieModel->setDataAt(movieModelIndex, mInfoEdit->title()); + } + + //Update covers + updateCovers(); + + QDialog::accept(); +} + +void ArchiveItemEditDialog::updateCovers(){ + //Get model and covers + MovieModel *movieModel = MovieModelSingleton::instance(); + QModelIndex movieIdx = movieModel->index(mMovieId); + QList currentCovers = movieIdx.data(MovieModel::CoverRole).toList(); + QList newCovers = mCoverEdit->covers(); + + //Front + CoverItem curFront = cover(currentCovers, "front"); + CoverItem newFront = cover(newCovers, "front"); + updateCover(curFront, newFront); + + //Back + CoverItem curBack = cover(currentCovers, "back"); + CoverItem newBack = cover(newCovers, "back"); + updateCover(curBack, newBack); + + //General + CoverItem curGeneral = cover(currentCovers, "general"); + CoverItem newGeneral = cover(newCovers, "general"); + updateCover(curGeneral, newGeneral); + + //Update database + QList coverList; + foreach(QVariant c, newCovers){ + coverList << c.value(); + } + movieModel->setCovers(mMovieId, coverList); +} + +void ArchiveItemEditDialog::updateCover(const CoverItem &oldCover, const CoverItem &newCover){ + if(oldCover == newCover){ + return; + } + if(oldCover != CoverItem()){ + Helper::removeFromArchive(oldCover.fileName(), oldCover.md5()); + } + if(newCover != CoverItem()){ + Helper::moveToArchive(newCover.fullPath(), newCover.md5()); + } +} + +CoverItem ArchiveItemEditDialog::cover(const QList &coverList, const QString &type) const{ + QList::const_iterator it = std::find_if(coverList.constBegin(), coverList.constEnd(), std::bind2nd(CoverItem::findType(), type)); + CoverItem retval = CoverItem(); + if(it != coverList.constEnd()){ + retval = it->value(); + } + return retval; } diff --git a/archiveitemeditdialog.h b/archiveitemeditdialog.h index edb4af3..de87bed 100644 --- a/archiveitemeditdialog.h +++ b/archiveitemeditdialog.h @@ -12,9 +12,10 @@ class QPushButton; class QTabWidget; +class QModelIndex; class ArchiveItemInfoEdit; class ArchiveItemCoverEdit; -class QModelIndex; +class CoverItem; class ArchiveItemEditDialog : public QDialog { Q_OBJECT @@ -22,12 +23,19 @@ class ArchiveItemEditDialog : public QDialog { explicit ArchiveItemEditDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); void setMovie(const QModelIndex &idx); + public slots: + void accept(); + private: + void updateCovers(); + void updateCover(const CoverItem &oldCover, const CoverItem &newCover); + CoverItem cover(const QList &coverList, const QString &type) const; QPushButton *mUpdate; QPushButton *mCancel; QTabWidget *mTab; ArchiveItemInfoEdit *mInfoEdit; ArchiveItemCoverEdit *mCoverEdit; + int mMovieId; }; #endif diff --git a/archiveiteminfoedit.cpp b/archiveiteminfoedit.cpp index 4ec7d18..4efa01c 100644 --- a/archiveiteminfoedit.cpp +++ b/archiveiteminfoedit.cpp @@ -153,7 +153,7 @@ const QString ArchiveItemInfoEdit::genre() const { } const QString ArchiveItemInfoEdit::title() const { - return mTitle->text(); + return mTitle->text().trimmed().toLower(); } const QStringList ArchiveItemInfoEdit::actors() const { -- cgit v1.2.3-70-g09d2