summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-07-09 12:18:21 +0200
committerArno <am@disconnect.de>2013-07-09 12:18:21 +0200
commitde9d8a08fe5e85cdb599022261e07e27b7646f6c (patch)
tree8f47cc0602b37f32b26972c077ae15aedac79304
parentfae552580c1214ff5b3e61c6f981c720b3f49263 (diff)
downloadSheMov-de9d8a08fe5e85cdb599022261e07e27b7646f6c.tar.gz
SheMov-de9d8a08fe5e85cdb599022261e07e27b7646f6c.tar.bz2
SheMov-de9d8a08fe5e85cdb599022261e07e27b7646f6c.zip
Show actors, genres and metadata when selecting a series
We're getting there, slowly, but steadily :)
-rw-r--r--archivecontroller.cpp16
-rw-r--r--archivecontroller.h7
-rw-r--r--archivemodel.cpp58
-rw-r--r--archivemodel.h11
-rw-r--r--archiveview.cpp57
-rw-r--r--archiveview.h10
6 files changed, 152 insertions, 7 deletions
diff --git a/archivecontroller.cpp b/archivecontroller.cpp
index 82d0bd8..3cdcd4a 100644
--- a/archivecontroller.cpp
+++ b/archivecontroller.cpp
@@ -10,6 +10,7 @@
#include <QFileInfo>
#include <QMessageBox>
#include <QInputDialog>
+#include <QTextEdit>
#include "archivecontroller.h"
#include "archivemodel.h"
@@ -45,6 +46,15 @@ void ArchiveController::setModels(ArchiveModel *amodel, ArchiveFilesModel *afile
mArchiveFilesModel = afilesmodel;
}
+void ArchiveController::setMappingModels(QStringListModel *actorModel, QStringListModel *genreModel){
+ mActorModel = actorModel;
+ mGenreModel = genreModel;
+}
+
+void ArchiveController::setMetadata(QTextEdit *metadata){
+ mMetadataView = metadata;
+}
+
void ArchiveController::init(){
connect(mArchiveSelection, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(treeSelectionChanged(QItemSelection,QItemSelection)));
connect(mArchiveFiles, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(fileDoubleClicked(QModelIndex)));
@@ -165,6 +175,12 @@ void ArchiveController::treeSelectionChanged(const QItemSelection &selected, con
mArchiveFilesModel->populate(ids);
mArchiveFiles->expandAll();
mArchiveView->setCurrentArchivePath(mArchiveModel->indexToPath(sel.first()));
+ QStringList actors = mArchiveModel->actors(ids);
+ mActorModel->setStringList(actors);
+ QStringList genres = mArchiveModel->genres(ids);
+ mGenreModel->setStringList(genres);
+ QString metaData = mArchiveModel->metadata(*ids.begin());
+ mMetadataView->setHtml(metaData);
}
void ArchiveController::fileDoubleClicked(const QModelIndex &idx){
diff --git a/archivecontroller.h b/archivecontroller.h
index 66068dc..79a624c 100644
--- a/archivecontroller.h
+++ b/archivecontroller.h
@@ -21,6 +21,8 @@ class ArchiveModel;
class ArchiveFilesModel;
class QItemSelectionModel;
class QSortFilterProxyModel;
+class QStringListModel;
+class QTextEdit;
class ArchiveController : public QObject {
Q_OBJECT
@@ -30,6 +32,8 @@ class ArchiveController : public QObject {
void setArchiveTree(ArchiveTree *atree, ArchiveProxy *aproxy);
void setArchiveFiles(ArchiveFiles *afiles, ArchiveFilesProxy *afilesproxy);
void setModels(ArchiveModel *amodel, ArchiveFilesModel *afilesmodel);
+ void setMappingModels(QStringListModel *actorModel, QStringListModel *genreModel);
+ void setMetadata(QTextEdit *metadata);
ArchiveFilesModel *archiveFilesModel() { return mArchiveFilesModel; }
ArchiveFiles *archiveFiles() { return mArchiveFiles; }
ArchiveModel *archiveTreeModel() { return mArchiveModel; }
@@ -59,6 +63,9 @@ class ArchiveController : public QObject {
ArchiveModel *mArchiveModel;
ArchiveFilesModel *mArchiveFilesModel;
QItemSelectionModel *mFileSelection;
+ QStringListModel *mActorModel;
+ QStringListModel *mGenreModel;
+ QTextEdit *mMetadataView;
QWidget *mParentWidget;
};
diff --git a/archivemodel.cpp b/archivemodel.cpp
index ecd4e3d..cbc1e6e 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -14,6 +14,7 @@
#include <QFileInfo>
#include <QBrush>
#include <QFont>
+#include <QDate>
#include "smtreeitem.h"
#include "archivemodel.h"
@@ -255,6 +256,56 @@ QSet<int> ArchiveModel::seriesPartIds(const QModelIndex &idx) const{
return retval;
}
+QStringList ArchiveModel::actors(const QSet<int> &partIds) const{
+ QStringList ids;
+ foreach(int i, partIds){
+ ids << QString::number(i);
+ }
+ QString actorQString = QString("SELECT DISTINCT(tactorname) FROM actors, seriesparts_actormap WHERE seriesparts_actormap.iseriesparts_id IN (%1) AND seriesparts_actormap.iactors_id = actors.iactors_id ORDER BY tactorname ASC").arg(ids.join(","));
+ QStringList retval;
+ QSqlQuery actorQ(actorQString, mDb);
+ while(actorQ.next()){
+ retval << actorQ.value(0).toString();
+ }
+ return retval;
+}
+
+QStringList ArchiveModel::genres(const QSet<int> &genreIds) const{
+ QStringList ids;
+ foreach(int i, genreIds){
+ ids << QString::number(i);
+ }
+ QString actorQString = QString("SELECT DISTINCT(tgenrename) FROM genres, seriesparts_genremap WHERE seriesparts_genremap.iseriesparts_id IN (%1) AND seriesparts_genremap.igenres_id = genres.igenres_id ORDER BY tgenrename ASC").arg(ids.join(","));
+ QStringList retval;
+ QSqlQuery actorQ(actorQString, mDb);
+ while(actorQ.next()){
+ retval << actorQ.value(0).toString();
+ }
+ return retval;
+}
+
+QString ArchiveModel::metadata(int partId) const{
+ QString retval;
+ retval.append("<html><table>");
+ QSqlQuery metadataQuery(mDb);
+ metadataQuery.prepare("SELECT sireleaseyear, tsourcemedium, tsubject, treleasegroup, tencoderopts, tcomment, sipasses, dadded FROM metadata WHERE iseriespart_id = :id");
+ metadataQuery.bindValue(":id", partId);
+ metadataQuery.exec();
+ while(metadataQuery.next()){
+ retval.append(QString("<tr><td style=\"padding-right:10\"><i>Release year</i></td><td>%1</td></tr>").arg(QString::number(metadataQuery.value(0).toInt())));
+ retval.append(QString("<tr><td><i>Source</i></td><td>%1</td></tr>").arg(metadataQuery.value(1).toString()));
+ retval.append(QString("<tr><td><i>Subject</i></td><td>%1</td></tr>").arg(metadataQuery.value(2).toString()));
+ retval.append(QString("<tr><td><i>Rel. Group</i></td><td>%1</td></tr>").arg(metadataQuery.value(3).toString()));
+ retval.append(QString("<tr><td><i>Enc. Opts</i></td><td>%1</td></tr>").arg(metadataQuery.value(4).toString()));
+ retval.append(QString("<tr><td><i>Passes</i></td><td>%1</td></tr>").arg(metadataQuery.value(1).toString()));
+ QDate added = metadataQuery.value(7).toDate();
+ retval.append(QString("<tr><td><i>Added</i></td><td>%1</td></tr>").arg(added.toString("yyyy-MM-dd")));
+ retval.append(QString("<tr><td><i>Comment</i></td><td>%1</td></tr>").arg(metadataQuery.value(5).toString()));
+ }
+ retval.append("</table></html>");
+ return retval;
+}
+
void ArchiveModel::setOrder(int order) {
mOrder = order;
SmTreeItem *rootItem = readCache(mOrder);
@@ -751,3 +802,10 @@ void ArchiveCollector::checkCancelled(){
quit();
}
}
+
+QVariant SimpleModel::data(const QModelIndex &index, int role) const{
+ if(role == Qt::DecorationRole){
+ return QIcon(":/male_chastity_belt.png");
+ }
+ return QStringListModel::data(index, role);
+}
diff --git a/archivemodel.h b/archivemodel.h
index 7e77642..991d4da 100644
--- a/archivemodel.h
+++ b/archivemodel.h
@@ -13,6 +13,7 @@
#include <QDataStream>
#include <QMutex>
#include <QSet>
+#include <QStringListModel>
#include "smtreemodel.h"
@@ -37,6 +38,9 @@ class ArchiveModel : public SmTreeModel {
QStringList indexToPath(const QModelIndex &idx) const;
QModelIndexList pathToIndex(const QStringList &path) const;
QSet<int> seriesPartIds(const QModelIndex &idx) const;
+ QStringList actors(const QSet<int> &partIds) const;
+ QStringList genres(const QSet<int> &genreIds) const;
+ QString metadata(int partId) const;
signals:
void needRefresh();
@@ -121,4 +125,11 @@ class ArchiveCollector : public QThread {
bool mCancelled;
};
+class SimpleModel : public QStringListModel {
+ Q_OBJECT
+ public:
+ explicit SimpleModel(QObject *parent = 0) : QStringListModel(parent) {}
+ virtual QVariant data(const QModelIndex &index, int role) const;
+};
+
#endif // ARCHIVEMODEL_H
diff --git a/archiveview.cpp b/archiveview.cpp
index 8e1257c..94e6a20 100644
--- a/archiveview.cpp
+++ b/archiveview.cpp
@@ -18,9 +18,12 @@
#include <QVBoxLayout>
#include <QHeaderView>
#include <QSpinBox>
+#include <QGroupBox>
+#include <QTextEdit>
#include "archiveview.h"
#include "archivecontroller.h"
+#include "mappingtablewidget.h"
#include "smglobals.h"
#include "helper.h"
@@ -92,13 +95,50 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) {
mFilesProxy->setSourceModel(mFilesModel);
mFiles->setModel(mFilesProxy);
- QSplitter *treeSplitter = new QSplitter(Qt::Horizontal);
- treeSplitter->addWidget(treeWidget);
- treeSplitter->addWidget(mFiles);
- treeSplitter->setStretchFactor(0, 1);
- treeSplitter->setStretchFactor(1, 4);
+ QHBoxLayout *bottomRightLayout = new QHBoxLayout;
+ mActorView = new SmTreeView;
+ mActorView->setHeaderHidden(true);
+ mActorModel = new SimpleModel(this);
+ mActorView->setModel(mActorModel);
+ QGroupBox *actorBox = new QGroupBox(tr("Actors"));
+ QHBoxLayout *actorLayout = new QHBoxLayout;
+ actorLayout->addWidget(mActorView);
+ actorBox->setLayout(actorLayout);
+
+ mGenreView = new SmTreeView;
+ mGenreView->setHeaderHidden(true);
+ mGenreModel = new SimpleModel(this);
+ mGenreView->setModel(mGenreModel);
+ QGroupBox *genreBox = new QGroupBox(tr("Genres"));
+ QHBoxLayout *genreLayout = new QHBoxLayout;
+ genreLayout->addWidget(mGenreView);
+ genreBox->setLayout(genreLayout);
+
+ mMetadataView = new QTextEdit;
+ mMetadataView->setReadOnly(true);
+ QGroupBox *metadataBox = new QGroupBox("Metadata");
+ QHBoxLayout *metadataLayout = new QHBoxLayout;
+ metadataLayout->addWidget(mMetadataView);
+ metadataBox->setLayout(metadataLayout);
+
+ bottomRightLayout->addWidget(actorBox);
+ bottomRightLayout->addWidget(genreBox);
+ bottomRightLayout->addWidget(metadataBox);
+ QVBoxLayout *rightLayout = new QVBoxLayout;
+ rightLayout->addWidget(mFiles);
+ rightLayout->addLayout(bottomRightLayout);
+ QWidget *rightWidget = new QWidget;
+ rightLayout->setStretchFactor(mFiles, 3);
+ rightWidget->setLayout(rightLayout);
+
+ mTreeSplitter = new QSplitter(Qt::Horizontal);
+ mTreeSplitter->addWidget(treeWidget);
+ mTreeSplitter->addWidget(rightWidget);
+ mTreeSplitter->setStretchFactor(0, 1);
+ mTreeSplitter->setStretchFactor(1, 4);
QHBoxLayout *mainLayout = new QHBoxLayout;
- mainLayout->addWidget(treeSplitter);
+ mainLayout->addWidget(mTreeSplitter);
+
setLayout(mainLayout);
initController();
}
@@ -117,6 +157,8 @@ void ArchiveView::readSettings(){
list = s.value("archivemodel/expandedseries").toList();
mExpandedItems[ArchiveModel::SeriesName] = list;
mCurrentArchivePath = s.value("archivemodel/selectedseries").toStringList();
+ QByteArray splitterState = s.value("archivemodel/vsplitter").toByteArray();
+ mTreeSplitter->restoreState(splitterState);
doSelection();
mFiles->readHeaderConfig();
mFiles->setSortingEnabled(true);
@@ -130,6 +172,7 @@ void ArchiveView::writeSettings() {
s.setValue("archivemodel/expandedactors", mExpandedItems.value(ArchiveModel::Actor));
s.setValue("archivemodel/expandedseries", mExpandedItems.value(ArchiveModel::SeriesName));
s.setValue("archivemodel/selectedseries", mCurrentArchivePath);
+ s.setValue("archivemodel/vsplitter", mTreeSplitter->saveState());
mFiles->writeHeaderConfig();
}
@@ -200,6 +243,8 @@ void ArchiveView::initController(){
mController->setArchiveTree(mTree, mProxy);
mController->setArchiveFiles(mFiles, mFilesProxy);
mController->setModels(mArchiveModel, mFilesModel);
+ mController->setMappingModels(mActorModel, mGenreModel);
+ mController->setMetadata(mMetadataView);
mController->init();
SmGlobals::instance()->setArchiveController(mController);
}
diff --git a/archiveview.h b/archiveview.h
index ac7cda4..b164141 100644
--- a/archiveview.h
+++ b/archiveview.h
@@ -21,12 +21,14 @@ class QComboBox;
class QLabel;
class QLineEdit;
class QSortFilterProxyModel;
-
class ArchiveTree;
class ArchiveFiles;
class ArchiveProxy;
class ArchiveFilesProxy;
class ArchiveController;
+class QSplitter;
+class SimpleModel;
+class QTextEdit;
class ArchiveView : public QWidget {
Q_OBJECT
@@ -63,6 +65,12 @@ class ArchiveView : public QWidget {
QHash<int, QVariantList> mExpandedItems;
ArchiveController *mController;
QStringList mCurrentArchivePath;
+ SmTreeView *mActorView;
+ SmTreeView *mGenreView;
+ SimpleModel *mActorModel;
+ SimpleModel *mGenreModel;
+ QSplitter *mTreeSplitter;
+ QTextEdit *mMetadataView;
};
class ArchiveTree : public SmTreeView {