diff options
Diffstat (limited to 'archiveeditdialog.cpp')
-rw-r--r-- | archiveeditdialog.cpp | 245 |
1 files changed, 0 insertions, 245 deletions
diff --git a/archiveeditdialog.cpp b/archiveeditdialog.cpp deleted file mode 100644 index 41f303f..0000000 --- a/archiveeditdialog.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/* - 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 <QHash> - -#include "archiveeditdialog.h" -#include "archivefilewidget.h" -#include "listeditor.h" -#include "covereditor.h" -#include "listmodel.h" -#include "moviemodel.h" -#include "helper.h" -#include "coveritem.h" -#include "listmodelsingleton.h" -#include "moviemodelsingleton.h" - -ArchiveEditDialog::ArchiveEditDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { - //setup - mGenreModel = ListModelSingleton::instance()->model("genre"); - mActorsModel = ListModelSingleton::instance()->model("actor"); - mMovieModel = MovieModelSingleton::instance(); - - QSplitter *hSplitter = new QSplitter(Qt::Horizontal); - QWidget *editorWidget = new QWidget; - QVBoxLayout *editorLayout = new QVBoxLayout; - - //genre editor - mGenreEditor = new ListEditor(mGenreModel); - editorLayout->addWidget(mGenreEditor); - - //actor editor - mActorsEditor = new ListEditor(mActorsModel); - 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; - connect(mActorsEditor, SIGNAL(itemAdded(const QString &)), mFileWidget, SLOT(setActor(const QString &))); - - //join splitters - hSplitter->addWidget(mFileWidget); - hSplitter->addWidget(editorWidget); - hSplitter->setStretchFactor(0, 2); - hSplitter->setStretchFactor(1, 1); - - //button layout - QHBoxLayout *buttonLayout = new QHBoxLayout; - buttonLayout->addStretch(); - mGuess = new QPushButton(tr("Guess values")); - connect(mGuess, SIGNAL(clicked()), this, SLOT(guess())); - buttonLayout->addWidget(mGuess); - 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 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(); - int seriesno = mFileWidget->seriesNo(); - int partno = mFileWidget->partNo(); - QStringList files; - files << front << back << general; - files.removeAll(QString()); - files << file; - QHash<QString, QString> md5Sums; - foreach(QString f, files){ - md5Sums[f] = Helper::md5Sum(f); - } - if(checkInput(genre, actors, files, title, file, quality)){ - 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() << md5Sums.value(file) << movie.size() << genre << quality << -1 << seriesno << partno; - QList<CoverItem> covers; - if(!front.isEmpty()){ - covers << coverItem(front, "front", md5Sums.value(front)); - } - if(!back.isEmpty()){ - covers << coverItem(back, "back", md5Sums.value(back)); - } - if(!general.isEmpty()){ - covers << coverItem(general, "general", md5Sums.value(general)); - } - QList<QVariant> vAList; - foreach(int a, actors){ - vAList << a; - } - mMovieModel->addMovie(data, vAList, covers); - foreach(QString f, files){ - QFileInfo file(f); - QString hash = md5Sums.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); - } - } -} - -void ArchiveEditDialog::guess(){ - QString fileName = mCoverEditor->movie(); - if(fileName.isEmpty()){ - return; - } - QFileInfo fi(fileName); - QString rfn = fi.completeBaseName(); - rfn.chop(1); - QModelIndexList idx = mMovieModel->columnContains(rfn, MovieItem::Filename); - if(idx.size() > 0){ - QModelIndex cur = idx.at(0); - QList<QVariant> actors = cur.data(MovieModel::ActorsRole).toList(); - foreach(QVariant v, actors){ - mFileWidget->setActor(v.toString()); - } - mFileWidget->setMovieTitle(cur.data(MovieModel::TitleBaseRole).toString()); - mFileWidget->setQuality(cur.data(MovieModel::QualityRole).toInt()); - mFileWidget->setSeriesNo(cur.data(MovieModel::SeriesNoRole).toInt()); - int partno = cur.data(MovieModel::PartNoRole).toInt() + 1; - mFileWidget->setPartNo(partno); - } -} - -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.absoluteFilePath()); - 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); -} - |