summaryrefslogtreecommitdiffstats
path: root/archiveeditdialog.cpp
diff options
context:
space:
mode:
authoram <am@f440f766-f032-0410-8965-dc7d17de2ca0>2009-07-19 16:12:02 +0000
committeram <am@f440f766-f032-0410-8965-dc7d17de2ca0>2009-07-19 16:12:02 +0000
commitd2b854121266e32164290ee4e683c0c8388d7d41 (patch)
tree7e844a2920bc00d5d855da661a98f9b20ff13f2e /archiveeditdialog.cpp
parent80bf76dc318276f67eeec32b8f68e82cf4bb7e62 (diff)
downloadSheMov-d2b854121266e32164290ee4e683c0c8388d7d41.tar.gz
SheMov-d2b854121266e32164290ee4e683c0c8388d7d41.tar.bz2
SheMov-d2b854121266e32164290ee4e683c0c8388d7d41.zip
-added ActorRole in MovieModel
-Fixed bug in MovieItem returning data and filling the model -Started on archive viewing git-svn-id: file:///var/svn/repos2/shemov/trunk@391 f440f766-f032-0410-8965-dc7d17de2ca0
Diffstat (limited to 'archiveeditdialog.cpp')
-rw-r--r--archiveeditdialog.cpp223
1 files changed, 223 insertions, 0 deletions
diff --git a/archiveeditdialog.cpp b/archiveeditdialog.cpp
new file mode 100644
index 0000000..350597f
--- /dev/null
+++ b/archiveeditdialog.cpp
@@ -0,0 +1,223 @@
+/*
+ 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 <QSplitter>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QLabel>
+#include <QApplication>
+#include <QPushButton>
+#include <QMessageBox>
+#include <QFileInfo>
+#include <QSettings>
+#include <QDir>
+#include <QList>
+#include <QVariant>
+#include <QFile>
+
+#include <QDebug>
+
+#include "archiveeditdialog.h"
+#include "archivefilewidget.h"
+#include "listeditor.h"
+#include "covereditor.h"
+#include "listmodel.h"
+#include "moviemodel.h"
+#include "helper.h"
+#include "coveritem.h"
+
+ArchiveEditDialog::ArchiveEditDialog(ListModel *genre, ListModel *actors, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), mGenreModel(genre), mActorsModel(actors){
+ QSplitter *hSplitter = new QSplitter(Qt::Horizontal);
+ QWidget *editorWidget = new QWidget;
+ QVBoxLayout *editorLayout = new QVBoxLayout;
+
+ //genre editor
+ QLabel *l1 = new QLabel(tr("Edit genres"));
+ mGenreEditor = new ListEditor(mGenreModel);
+ editorLayout->addWidget(l1);
+ editorLayout->addWidget(mGenreEditor);
+
+ //actor editor
+ QLabel *l2 = new QLabel(tr("Edit actors"));
+ mActorsEditor = new ListEditor(mActorsModel);
+ editorLayout->addWidget(l2);
+ editorLayout->addWidget(mActorsEditor);
+
+ //cover editor
+ QLabel *l3 = new QLabel(tr("Configure cover pictures"));
+ mCoverEditor = new CoverEditor;
+ editorLayout->addWidget(l3);
+ editorLayout->addWidget(mCoverEditor);
+
+ editorLayout->addStretch();
+ editorWidget->setLayout(editorLayout);
+ editorWidget->setMinimumWidth(300);
+
+ //archive editor
+ mFileWidget = new ArchiveFileWidget;
+ mFileWidget->setMovieModel(mMovieModel);
+ mFileWidget->setGenreModel(mGenreModel);
+ mFileWidget->setActorsModel(mActorsModel);
+
+ //join splitters
+ hSplitter->addWidget(mFileWidget);
+ hSplitter->addWidget(editorWidget);
+ hSplitter->setStretchFactor(0, 2);
+ hSplitter->setStretchFactor(1, 1);
+
+ //button layout
+ QHBoxLayout *buttonLayout = new QHBoxLayout;
+ buttonLayout->addStretch();
+ mArchive = new QPushButton(tr("Archive"));
+ connect(mArchive, SIGNAL(clicked()), this, SLOT(archive()));
+ buttonLayout->addWidget(mArchive);
+ mClose = new QPushButton(tr("Close"));
+ connect(mClose, SIGNAL(clicked()), this, SLOT(reject()));
+ buttonLayout->addWidget(mClose);
+
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(hSplitter);
+ mainLayout->addLayout(buttonLayout);
+
+ setLayout(mainLayout);
+ QString winTitle = QString("%1 - Archive files").arg(qApp->applicationName());
+ setWindowTitle(winTitle);
+}
+
+void ArchiveEditDialog::setFiles(const QStringList &files){
+ mFileWidget->setFiles(files);
+ mCoverEditor->setCovers(files);
+}
+
+void ArchiveEditDialog::archive(){
+ const QHash<QString, QString> md5 = mFileWidget->md5Sums();
+ const QList<int> actors = mFileWidget->actorIds();
+ int genre = mFileWidget->genreId();
+ QString front = mCoverEditor->frontCover();
+ QString back = mCoverEditor->backCover();
+ QString general = mCoverEditor->covers();
+ QString file = mCoverEditor->movie();
+ QString title = mFileWidget->movieTitle().toLower();
+ int quality = mFileWidget->quality();
+ QStringList files;
+ files << front << back << general;
+ files.removeAll(QString());
+ files << file;
+ if(checkInput(genre, actors, files, title, file, quality) && checkMd5(md5, files)){
+ QSettings s;
+ QString archivePath = s.value("paths/archivedir").toString();
+ if(archivePath.isEmpty()){
+ QMessageBox::critical(this, tr("Error"), tr("No archive path found. Please set it via Edit->Configure!"));
+ return;
+ }
+ QFileInfo archiveInfo(archivePath);
+ if(!archiveInfo.exists()){
+ QDir root = QDir::root();
+ root.mkpath(archivePath);
+ }
+ archiveInfo = QFileInfo(archivePath);
+ if(!archiveInfo.isDir()){
+ QString msg = QString(tr("Archive path %1 is not a directory. Aborting!")).arg(archivePath);
+ QMessageBox::critical(this, tr("Error"), msg);
+ return;
+ }
+ QList<QVariant> data;
+ QFileInfo movie(file);
+ data << title << movie.fileName() << md5.value(file) << movie.size() << genre << quality << -1;
+ QList<CoverItem> covers;
+ if(!front.isEmpty()){
+ covers << coverItem(front, "front", md5.value(front));
+ }
+ if(!back.isEmpty()){
+ covers << coverItem(back, "back", md5.value(back));
+ }
+ if(!general.isEmpty()){
+ covers << coverItem(general, "general", md5.value(general));
+ }
+ QList<QVariant> vAList;
+ foreach(int a, actors){
+ vAList << a;
+ }
+ mMovieModel->addMovie(data, vAList, covers);
+ QStringList refreshDirs;
+ foreach(QString f, files){
+ QFileInfo file(f);
+ QString hash = md5.value(f);
+ QString destDirS = QString("%1/%2/%3").arg(archivePath).arg(hash[0]).arg(hash[1]);
+ QString destFileS = QString("%1/%2/%3/%4").arg(archivePath).arg(hash[0]).arg(hash[1]).arg(file.fileName());
+ QFileInfo dir(destDirS);
+ if(!dir.exists()){
+ QDir root = QDir::root();
+ root.mkpath(destDirS);
+ }
+ QFileInfo destFile(destFileS);
+ if(destFile.exists()){
+ destFileS = QString("%1/%2/%3/%4_%5.%6").arg(archivePath).arg(hash[0]).arg(hash[1]).arg(destFile.completeBaseName()).arg(hash).arg(destFile.suffix());
+ }
+ QFile::rename(f, destFileS);
+ QString refreshDir = file.absoluteFilePath();
+ if(!refreshDirs.contains(refreshDir)){
+ refreshDirs << refreshDir;
+ }
+ }
+ foreach(QString r, refreshDirs){
+ QModelIndex idx = mDirModel->index(r);
+ mDirModel->refresh(idx);
+ }
+ }
+}
+
+bool ArchiveEditDialog::checkInput(int genre, const QList<int> &actors, const QStringList &files, const QString &title, const QString &movie, int quality) {
+ if(genre < 0){
+ QMessageBox::critical(this, tr("Error"), tr("Genre is invalid"));
+ return false;
+ }
+ if(actors.isEmpty()){
+ int answer = QMessageBox::question(this, tr("Question"), tr("No actors selected. Continue anyway?"), QMessageBox::Yes | QMessageBox::No);
+ return (answer == QMessageBox::Yes);
+ }
+ foreach(QString f, files){
+ QFileInfo info(f);
+ if(!info.isFile()){
+ QString msg = QString(tr("%1 does not seem to be a file. Aborting")).arg(info.fileName());
+ QMessageBox::critical(this, tr("Error"), msg);
+ return false;
+ }
+ }
+ QString mt = Helper::mimeType(movie);
+ if(!mt.toLower().startsWith("video")){
+ QString msg = QString(tr("Movie %1 is not of MIME type video (%2). Continue anyway?")).arg(movie).arg(mt);
+ int answer = QMessageBox::question(this, tr("Question"), msg, QMessageBox::Yes | QMessageBox::No);
+ return (answer == QMessageBox::Yes);
+ }
+ if(title.isEmpty()){
+ QMessageBox::critical(this, tr("Error"), tr("No movie title given!"));
+ return false;
+ }
+ if(quality == 0){
+ int answer = QMessageBox::question(this, tr("Question"), tr("Quality is set to 0. Continue anyway?"), QMessageBox::Yes | QMessageBox::No);
+ return (answer == QMessageBox::Yes);
+ }
+ return true;
+}
+
+bool ArchiveEditDialog::checkMd5(const QHash<QString, QString> &md5sums, const QStringList &files){
+ foreach(QString f, files){
+ if(!md5sums.contains(f)){
+ QString msg = QString(tr("I don't have an MD5 hash for %1. Aborting!")).arg(f);
+ QMessageBox::critical(this, tr("Error"), msg);
+ return false;
+ }
+ }
+ return true;
+}
+
+const CoverItem ArchiveEditDialog::coverItem(const QString &filePath, const QString type, const QString &md5) const{
+ QFileInfo info(filePath);
+ return CoverItem(info.fileName(), type, md5);
+}
+