summaryrefslogtreecommitdiffstats
path: root/archiveviewwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archiveviewwidget.cpp')
-rw-r--r--archiveviewwidget.cpp69
1 files changed, 67 insertions, 2 deletions
diff --git a/archiveviewwidget.cpp b/archiveviewwidget.cpp
index 51a9c91..1353dbb 100644
--- a/archiveviewwidget.cpp
+++ b/archiveviewwidget.cpp
@@ -12,7 +12,10 @@
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
+#include <QMessageBox>
#include <QApplication>
+#include <QSettings>
+#include <QProcess>
#include "archiveviewwidget.h"
#include "archivefileview.h"
@@ -22,6 +25,9 @@
#include "editarchiveitemdialog.h"
#include "sizedelegate.h"
#include "archiveddelegate.h"
+#include "coverarchiveeditor.h"
+#include "textenterdialog.h"
+#include "helper.h"
ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListModel *actors, QWidget *parent) : QWidget(parent), mMovieModel(model), mGenreModel(genre), mActorsModel(actors){
//filter bar
@@ -30,13 +36,13 @@ ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListMo
mGenre = new QComboBox;
l1->setBuddy(mGenre);
mGenre->setModel(mGenreModel);
- connect(mGenre, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(setGenreFilter(const QString &)));
+ connect(mGenre, SIGNAL(activated(const QString &)), this, SLOT(setGenreFilter(const QString &)));
filterLayout->addWidget(l1);
filterLayout->addWidget(mGenre);
QLabel *l2 = new QLabel(tr("Filter by &actor"));
mActors = new QComboBox;
mActors->setModel(mActorsModel);
- connect(mActors, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(setActorFilter(const QString &)));
+ connect(mActors, SIGNAL(activated(const QString &)), this, SLOT(setActorFilter(const QString &)));
l2->setBuddy(mActors);
filterLayout->addWidget(l2);
filterLayout->addWidget(mActors);
@@ -61,6 +67,7 @@ ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListMo
mFileView->setSortingEnabled(true);
mFileView->setItemsExpandable(false);
mFileView->setRootIsDecorated(false);
+ mFileView->setColumnHidden(MovieItem::Md5Sum, true);
connect(mClearFilter, SIGNAL(clicked()), mProxy, SLOT(clearFilter()));
//main layout
@@ -69,6 +76,7 @@ ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListMo
mainLayout->addWidget(mFileView);
connect(mFileView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex)), this, SLOT(rowChanged(const QModelIndex &, const QModelIndex &)));
+ connect(mFileView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(showMovie(const QModelIndex &)));
setLayout(mainLayout);
}
@@ -85,6 +93,63 @@ void ArchiveViewWidget::editFile(){
}
}
+void ArchiveViewWidget::editCovers(){
+ QModelIndexList selected = mFileView->selectionModel()->selectedRows();
+ if(!selected.isEmpty()){
+ QModelIndex idx = selected.at(0);
+ QModelIndex real = mProxy->mapToSource(idx);
+ mCoverEditDialog->setMovie(real);
+ mCoverEditDialog->show();
+ mCoverEditDialog->raise();
+ mCoverEditDialog->activateWindow();
+ }
+}
+
+void ArchiveViewWidget::addMovie(){
+ TextEnterDialog dlg(tr("Enter movie title"), this);
+ dlg.exec();
+ if(dlg.result() == QDialog::Accepted){
+ QString title = dlg.text().toLower().trimmed();
+ QModelIndex idx = mMovieModel->index(title);
+ if(idx != QModelIndex()){
+ QString msg = QString(tr("Already have an entry with title %1")).arg(title);
+ QMessageBox::critical(this, tr("Error"), msg);
+ return;
+ }
+ QList<QVariant> movieData;
+ movieData << title;
+ for(int i = 1; i < MovieItem::NumRows; ++i){
+ movieData << QVariant();
+ }
+ QString md5(32, '0');
+ movieData[MovieItem::Md5Sum] = md5;
+ movieData[MovieItem::Genre] = mGenreModel->defaultId();
+ movieData[MovieItem::Dvd] = -2;
+ movieData[MovieItem::Filename] = tr("(DVD)");
+ movieData[MovieItem::Size] = Q_INT64_C(4707319808);
+ movieData[MovieItem::Quality] = 0;
+ mMovieModel->addMovie(movieData, QList<QVariant>(), QList<CoverItem>());
+ }
+}
+
+void ArchiveViewWidget::showMovie(const QModelIndex &movie){
+ QModelIndex real = mProxy->mapToSource(movie);
+ QModelIndex dvd = mMovieModel->index(real.row(), MovieItem::Dvd, QModelIndex());
+ int dvdno = dvd.data().toInt();
+ if(dvdno != -1){
+ emit statusbarMessage(tr("Movie is not present on filesystem"));
+ return;
+ }
+ QModelIndex fnIdx = mMovieModel->index(real.row(), MovieItem::Filename, QModelIndex());
+ QModelIndex md5Idx = mMovieModel->index(real.row(), MovieItem::Md5Sum, QModelIndex());
+ QString path = Helper::createArchivePath(fnIdx.data().toString(), md5Idx.data().toString());
+ QSettings s;
+ QString playerPath = s.value("paths/movieviewer").toString();
+ QStringList args = s.value("paths/movieviewerargs").toStringList();
+ args << path;
+ QProcess::startDetached(playerPath, args);
+}
+
void ArchiveViewWidget::setFilter(){
QString filter = mName->text().toLower();
if(filter.isEmpty()){