summaryrefslogtreecommitdiffstats
path: root/archiveitemeditdialog.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-05-29 16:32:20 +0200
committerArno <am@disconnect.de>2010-05-29 16:32:20 +0200
commit482e7371d34477bd43d44c7b905354774de5d641 (patch)
treedf716064dd68d7c2933fe6aa52ebcea264ce7ddf /archiveitemeditdialog.cpp
parentca84789d9f288e39936a288c17eff247cb0f4a3f (diff)
downloadSheMov-482e7371d34477bd43d44c7b905354774de5d641.tar.gz
SheMov-482e7371d34477bd43d44c7b905354774de5d641.tar.bz2
SheMov-482e7371d34477bd43d44c7b905354774de5d641.zip
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.
Diffstat (limited to 'archiveitemeditdialog.cpp')
-rw-r--r--archiveitemeditdialog.cpp117
1 files changed, 116 insertions, 1 deletions
diff --git a/archiveitemeditdialog.cpp b/archiveitemeditdialog.cpp
index 0cd11eb..90aa1df 100644
--- a/archiveitemeditdialog.cpp
+++ b/archiveitemeditdialog.cpp
@@ -10,6 +10,8 @@
#include <QPushButton>
#include <QTabWidget>
+#include <algorithm>
+
#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<QVariant> 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<QVariant> currentCovers = movieIdx.data(MovieModel::CoverRole).toList();
+ QList<QVariant> 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<CoverItem> coverList;
+ foreach(QVariant c, newCovers){
+ coverList << c.value<CoverItem>();
+ }
+ 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<QVariant> &coverList, const QString &type) const{
+ QList<QVariant>::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<CoverItem>();
+ }
+ return retval;
}