/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include "archiveitemeditdialog.h" #include "archiveiteminfoedit.h" #include "archiveitemcoveredit.h" #include "moviemodelsingleton.h" #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), mMovieId(-1){ //Init dialog QVBoxLayout *mainLayout = new QVBoxLayout; //Tab widget mTab = new QTabWidget; mInfoEdit = new ArchiveItemInfoEdit; mTab->addTab(mInfoEdit, tr("General")); mCoverEdit = new ArchiveItemCoverEdit; mTab->addTab(mCoverEdit, tr("Covers")); mainLayout->addWidget(mTab); //Button layout QHBoxLayout *buttonLayout = new QHBoxLayout; mCancel = new QPushButton(tr("Cancel")); connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); mUpdate = new QPushButton(tr("Update")); connect(mUpdate, SIGNAL(clicked()), this, SLOT(accept())); buttonLayout->addStretch(); buttonLayout->addWidget(mCancel); buttonLayout->addWidget(mUpdate); mainLayout->addLayout(buttonLayout); setLayout(mainLayout); } void ArchiveItemEditDialog::setMovie(const QModelIndex &idx){ if(!idx.isValid()){ return; } //Numbers and title setup mInfoEdit->setTitle(idx.data(MovieModel::TitleBaseRole).toString()); mInfoEdit->setDvd(idx.data(MovieModel::DvdRole).toInt()); mInfoEdit->setSeries(idx.data(MovieModel::SeriesNoRole).toInt()); mInfoEdit->setPart(idx.data(MovieModel::PartNoRole).toInt()); mInfoEdit->setGenre(idx.data(MovieModel::GenreRole).toString()); mInfoEdit->setQuality(idx.data(MovieModel::QualityRole).toInt()); //File and actor info mInfoEdit->setup(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; }