summaryrefslogtreecommitdiffstats
path: root/archiveeditwidget.cpp
diff options
context:
space:
mode:
authoram <am@f440f766-f032-0410-8965-dc7d17de2ca0>2009-07-18 17:54:27 +0000
committeram <am@f440f766-f032-0410-8965-dc7d17de2ca0>2009-07-18 17:54:27 +0000
commit80bf76dc318276f67eeec32b8f68e82cf4bb7e62 (patch)
tree262a57a754dcbe01f0a21dd9c69513807be3369b /archiveeditwidget.cpp
parenta477a1998c03bc0e7251463aff5486e3c0872d23 (diff)
downloadSheMov-80bf76dc318276f67eeec32b8f68e82cf4bb7e62.tar.gz
SheMov-80bf76dc318276f67eeec32b8f68e82cf4bb7e62.tar.bz2
SheMov-80bf76dc318276f67eeec32b8f68e82cf4bb7e62.zip
Again huge changes (should go on vacation more often :))
-turned archive tab into a QDialog -fixed duplicate handling in ListModel -fixed html output in archive dialog -actually made archiving work -changed covertype to text in database -fixed bug with covertype in coveritem git-svn-id: file:///var/svn/repos2/shemov/trunk@390 f440f766-f032-0410-8965-dc7d17de2ca0
Diffstat (limited to 'archiveeditwidget.cpp')
-rw-r--r--archiveeditwidget.cpp165
1 files changed, 162 insertions, 3 deletions
diff --git a/archiveeditwidget.cpp b/archiveeditwidget.cpp
index a404bc7..8f4d116 100644
--- a/archiveeditwidget.cpp
+++ b/archiveeditwidget.cpp
@@ -9,6 +9,17 @@
#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 "archiveeditwidget.h"
#include "archivefilewidget.h"
@@ -16,12 +27,13 @@
#include "covereditor.h"
#include "listmodel.h"
#include "moviemodel.h"
+#include "helper.h"
+#include "coveritem.h"
-ArchiveEditWidget::ArchiveEditWidget(QWidget *parent) : QWidget(parent){
+ArchiveEditDialog::ArchiveEditDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){
//init models
mGenreModel = new ListModel("genre", this);
mActorsModel = new ListModel("actor", this);
- mMovieModel = new MovieModel(this);
QSplitter *hSplitter = new QSplitter(Qt::Horizontal);
QWidget *editorWidget = new QWidget;
@@ -47,6 +59,7 @@ ArchiveEditWidget::ArchiveEditWidget(QWidget *parent) : QWidget(parent){
editorLayout->addStretch();
editorWidget->setLayout(editorLayout);
+ editorWidget->setMinimumWidth(300);
//archive editor
mFileWidget = new ArchiveFileWidget;
@@ -59,10 +72,156 @@ ArchiveEditWidget::ArchiveEditWidget(QWidget *parent) : QWidget(parent){
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);
- QHBoxLayout *mainLayout = new QHBoxLayout;
+ 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);
+}
+