This commit is contained in:
2016-10-28 11:29:51 +02:00
parent fa3c115a89
commit 266c03a5f1
8 changed files with 399 additions and 18 deletions
+1 -1
View File
@@ -103,7 +103,7 @@ QPixmap cImageList::get(cImage::MEDIATYPE mediaType, cImage::TYPE type, qint32 i
return(QPixmap());
}
QPixmap cImage::downloadFile(const QString& szFileName)
QPixmap cImage::downloadFile(const QString& /*szFileName*/)
{
QPixmap pixmap;
+2
View File
@@ -76,7 +76,9 @@ bool cKodiLibrary::init()
m_lpKodiTexturesLibrary = new cKodiTexturesLibrary(m_szTextures);
if(m_lpKodiTexturesLibrary->init() != -1)
{
;
}
m_lpImageList = new cImageList(m_lpKodiVideoLibrary, m_lpKodiTexturesLibrary, m_szPath);
+30
View File
@@ -61,6 +61,28 @@ qint16 cKodiVideoLibrary::version()
}
qint32 cKodiVideoLibrary::load()
{
loadActors();
return(loadVideos());
}
qint32 cKodiVideoLibrary::loadActors()
{
QSqlQuery query(m_db);
query.exec("SELECT actor_id, name, art_urls FROM actor ORDER BY name;");
while(query.next())
{
m_videosActorList.add(
query.value("actor_id").toInt(),
query.value("name").toString(),
query.value("art_urls").toString());
}
return(m_videosActorList.count());
}
qint32 cKodiVideoLibrary::loadVideos()
{
QSqlQuery query(m_db);
@@ -200,3 +222,11 @@ void cKodiVideoLibrary::fillVideoList(QStandardItemModel* lpModel)
lpModel->appendRow(lpItem);
}
}
void cKodiVideoLibrary::fillActorList(QTreeWidget* lpList, cMyVideos* lpVideos)
{
lpList->clear();
lpVideos->loadActors(m_db, m_videosActorList);
lpVideos->fillActorsList(lpList);
}
+16 -10
View File
@@ -9,6 +9,7 @@
#include <QStatusBar>
#include <QStandardItemModel>
#include <QTreeWidget>
class cKodiVideoLibrary
@@ -17,20 +18,25 @@ public:
cKodiVideoLibrary(const QString& szFileName);
~cKodiVideoLibrary();
qint16 init();
qint16 version();
qint16 init();
qint16 version();
qint32 load();
bool art(const QString& szMediaType, const QString& szType, qint32 idMovie, qint32& artID, QString& szURL);
qint32 load();
bool art(const QString& szMediaType, const QString& szType, qint32 idMovie, qint32& artID, QString& szURL);
void fillVideoList(QStandardItemModel* lpModel);
void fillVideoList(QStandardItemModel* lpModel);
void fillActorList(QTreeWidget* lpList, cMyVideos* lpVideos);
private:
QSqlDatabase m_db;
QString m_szFileName;
bool m_bConnected;
qint16 m_iVersion;
QSqlDatabase m_db;
QString m_szFileName;
bool m_bConnected;
qint16 m_iVersion;
cMyVideosList m_videosList;
cMyVideosActorList m_videosActorList;
cMyVideosList m_videosList;
qint32 loadActors();
qint32 loadVideos();
};
#endif // CKODIVIDEOLIBRARY_H
+196
View File
@@ -1,5 +1,172 @@
#include "cmyvideos.h"
#include <QSqlQuery>
#include <QTreeWidgetItem>
cMyVideosActorValues::cMyVideosActorValues() :
m_actorID(-1),
m_szName("UNSET"),
m_szArtURLs("UNSET")
{
}
cMyVideosActorValues::cMyVideosActorValues(qint32 actorID, const QString& szName, const QString& szArtURLs) :
m_actorID(actorID),
m_szName(szName),
m_szArtURLs(szArtURLs)
{
}
void cMyVideosActorValues::set(qint32 actorID, const QString& szName, const QString& szArtURLs)
{
m_actorID = actorID;
m_szName = szName;
m_szArtURLs = szArtURLs;
}
inline bool cMyVideosActorValues::operator==(const cMyVideosActorValues b) const
{
if(m_actorID != b.m_actorID) return(false);
if(m_szName != b.m_szName) return(false);
if(m_szArtURLs != b.m_szArtURLs) return(false);
return(true);
}
inline bool cMyVideosActorValues::operator!=(const cMyVideosActorValues b) const
{
if(m_actorID != b.m_actorID
|| m_szName != b.m_szName
|| m_szArtURLs != b.m_szArtURLs)
return(true);
return(false);
}
cMyVideosActor::cMyVideosActor(qint32 actorID, const QString& szName, const QString& szArtUrls) :
m_values(actorID, szName, szArtUrls)
{
m_oValues = m_values;
}
qint32 cMyVideosActor::actorID()
{
return(m_values.m_actorID);
}
QString cMyVideosActor::name()
{
return(m_values.m_szName);
}
QString cMyVideosActor::szArtURLs()
{
return(m_values.m_szArtURLs);
}
bool cMyVideosActor::isNew()
{
if(m_values.m_actorID == -1)
return(true);
return(false);
}
bool cMyVideosActor::isChanged()
{
if(m_values != m_oValues)
return(true);
return(false);
}
cMyVideosActorList::cMyVideosActorList()
{
}
cMyVideosActor* cMyVideosActorList::add(qint32 actorID, const QString& szName, const QString& szArtURLs)
{
cMyVideosActor* lpNew = new cMyVideosActor(actorID, szName, szArtURLs);
append(lpNew);
return(lpNew);
}
cMyVideosActor* cMyVideosActorList::find(qint32 actorID)
{
for(int z = 0;z < count();z++)
{
if(at(z)->actorID() == actorID)
return(at(z));
}
return(0);
}
cMyVideosActorLinkValues::cMyVideosActorLinkValues() :
m_lpActor(0),
m_szRole("UNSET"),
m_castOrder(-1)
{
}
cMyVideosActorLinkValues::cMyVideosActorLinkValues(cMyVideosActor* lpActor, const QString& szRole, qint32 castOrder) :
m_lpActor(lpActor),
m_szRole(szRole),
m_castOrder(castOrder)
{
}
void cMyVideosActorLinkValues::set(cMyVideosActor* lpActor, const QString& szRole, qint32 castOrder)
{
m_lpActor = lpActor;
m_szRole = szRole;
m_castOrder = castOrder;
}
inline bool cMyVideosActorLinkValues::operator==(const cMyVideosActorLinkValues b) const
{
if(m_lpActor != b.m_lpActor) return(false);
if(m_szRole != b.m_szRole) return(false);
if(m_castOrder != b.m_castOrder) return(false);
return(true);
}
inline bool cMyVideosActorLinkValues::operator!=(const cMyVideosActorLinkValues b) const
{
if(m_lpActor != b.m_lpActor
|| m_szRole != b.m_szRole
|| m_castOrder != b.m_castOrder)
return(true);
return(false);
}
cMyVideosActorLink::cMyVideosActorLink(cMyVideosActor *lpActor, const QString& szRole, qint32 cast_order) :
m_values(lpActor, szRole, cast_order)
{
m_oValues = m_values;
}
cMyVideosActor* cMyVideosActorLink::actor()
{
return(m_values.m_lpActor);
}
QString cMyVideosActorLink::role()
{
return(m_values.m_szRole);
}
qint32 cMyVideosActorLink::castOrder()
{
return(m_values.m_castOrder);
}
cMyVideosActorLinkList::cMyVideosActorLinkList()
{
}
cMyVideosActorLink* cMyVideosActorLinkList::add(cMyVideosActor *lpActor, const QString& szRole, qint32 cast_order)
{
cMyVideosActorLink* lpNew = new cMyVideosActorLink(lpActor, szRole, cast_order);
append(lpNew);
return(lpNew);
}
cMyVideosValues::cMyVideosValues() :
m_idMovie(-1), m_idFile(-1), m_szLocalMovieTitle("UNSET"), m_szMoviePlot("UNSET"), m_szMoviePlotOutline("UNSET"),
@@ -198,6 +365,35 @@ cMyVideos* cMyVideosList::add(qint32 idMovie, qint32 idFile, const QString& szLo
return(lpNew);
}
void cMyVideos::loadActors(QSqlDatabase& m_db, cMyVideosActorList videosActorList)
{
if(m_values.m_actors.count())
return;
QSqlQuery query(m_db);
query.exec(QString("SELECT actor_id, role, cast_order FROM actor_link WHERE media_id=%1 AND media_type='movie' ORDER BY cast_order;").arg(m_values.m_idMovie));
while(query.next())
{
cMyVideosActor* lpActor = videosActorList.find(query.value("actor_id").toInt());
if(lpActor)
m_values.m_actors.add(lpActor, query.value("role").toString(), query.value("cast_order").toInt());
}
m_oValues.m_actors = m_values.m_actors;
}
void cMyVideos::fillActorsList(QTreeWidget* lpWidget)
{
for(int z = 0;z < m_values.m_actors.count();z++)
{
QTreeWidgetItem* lpItem = new QTreeWidgetItem(lpWidget);
lpItem->setText(0, m_values.m_actors.at(z)->actor()->name());
lpItem->setText(1, m_values.m_actors.at(z)->role());
lpWidget->addTopLevelItem(lpItem);
}
lpWidget->resizeColumnToContents(0);
lpWidget->resizeColumnToContents(1);
}
qint32 cMyVideos::idMovie()
{
return(m_values.m_idMovie);
+99
View File
@@ -7,6 +7,17 @@
#include <QList>
#include <QMetaType>
#include <QSqlDatabase>
#include <QTreeWidget>
enum STATE
{
STATE_unknown = 0,
STATE_original = 1,
STATE_new = 2,
STATE_deleted = 3,
};
typedef struct tagSTRING2
{
@@ -14,6 +25,90 @@ typedef struct tagSTRING2
QString _2;
} STRING2;
class cMyVideosActorValues
{
public:
cMyVideosActorValues();
cMyVideosActorValues(qint32 actorID, const QString& szName, const QString& szArtURLs);
void set(qint32 actorID, const QString& szName, const QString& szArtURLs);
inline bool operator==(const cMyVideosActorValues b) const;
inline bool operator!=(const cMyVideosActorValues b) const;
qint32 m_actorID;
QString m_szName;
QString m_szArtURLs;
};
class cMyVideosActor
{
public:
cMyVideosActor(qint32 actorID, const QString& szName, const QString& szArtUrls);
qint32 actorID();
QString name();
QString szArtURLs();
bool isNew();
bool isChanged();
private:
cMyVideosActorValues m_values;
cMyVideosActorValues m_oValues;
};
Q_DECLARE_METATYPE(cMyVideosActor*)
class cMyVideosActorList : public QList<cMyVideosActor*>
{
public:
cMyVideosActorList();
cMyVideosActor* add(qint32 actorID, const QString& szName, const QString& szArtURLs);
cMyVideosActor* find(qint32 actorID);
private:
};
class cMyVideosActorLinkValues
{
public:
cMyVideosActorLinkValues();
cMyVideosActorLinkValues(cMyVideosActor* lpActor, const QString& szRole, qint32 castOrder);
void set(cMyVideosActor* lpActor, const QString& szRole, qint32 castOrder);
inline bool operator==(const cMyVideosActorLinkValues b) const;
inline bool operator!=(const cMyVideosActorLinkValues b) const;
cMyVideosActor* m_lpActor;
QString m_szRole;
qint32 m_castOrder;
};
class cMyVideosActorLink
{
public:
cMyVideosActorLink(cMyVideosActor* lpActor, const QString& szRole, qint32 cast_order);
cMyVideosActor* actor();
QString role();
qint32 castOrder();
bool isNew();
bool isChanged();
private:
cMyVideosActorLinkValues m_values;
cMyVideosActorLinkValues m_oValues;
};
Q_DECLARE_METATYPE(cMyVideosActorLink*)
class cMyVideosActorLinkList : public QList<cMyVideosActorLink*>
{
public:
cMyVideosActorLinkList();
cMyVideosActorLink *add(cMyVideosActor* lpActor, const QString& szRole, qint32 cast_order);
};
class cMyVideosValues
{
public:
@@ -75,6 +170,7 @@ public:
QDateTime m_dateAdded; // dateAdded
qreal m_dResumeTimeInSeconds; // resumeTimeInSeconds
qreal m_dTotalTimeInSeconds; // totalTimeInSeconds
cMyVideosActorLinkList m_actors;
};
class cMyVideos
@@ -89,6 +185,9 @@ public:
const QString& szFileName, const QString& szPathURL, qint32 iPlayCount, const QDateTime& lastPlayed, const QDateTime& dateAdded,
qreal dResumeTimeInSeconds, qreal dTotalTimeInSeconds);
void loadActors(QSqlDatabase& m_db, cMyVideosActorList videosActorList);
void fillActorsList(QTreeWidget* lpWidget);
qint32 idMovie();
qint32 idFile();
QString localMovieTitle();
+1
View File
@@ -99,6 +99,7 @@ void cVideoWidget::selectionChanged(const QItemSelection& /*newSelection*/, cons
// Crew Tab
ui->m_lpDirector->addItems(lpVideos->director());
ui->m_lpWriter->addItems(lpVideos->writers());
m_lpVideoLibrary->fillActorList(ui->m_lpCast, lpVideos);
if(m_lpVideoModel->itemFromIndex(index)->hasChildren())
{
+54 -7
View File
@@ -73,7 +73,7 @@
<item>
<widget class="QTabWidget" name="m_lpInformationTab">
<property name="currentIndex">
<number>1</number>
<number>2</number>
</property>
<widget class="QWidget" name="m_lpInformationTabBasic">
<attribute name="title">
@@ -571,7 +571,7 @@
<layout class="QGridLayout" name="gridLayout_10">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_9">
<item row="0" column="0">
<item row="1" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Director</string>
@@ -581,10 +581,14 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QListWidget" name="m_lpDirector"/>
<item row="1" column="1">
<widget class="QListWidget" name="m_lpDirector">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<item row="2" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Writer</string>
@@ -594,8 +598,51 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QListWidget" name="m_lpWriter"/>
<item row="2" column="1">
<widget class="QListWidget" name="m_lpWriter">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Cast</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QTreeWidget" name="m_lpCast">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="columnCount">
<number>2</number>
</property>
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
<column>
<property name="text">
<string notr="true">2</string>
</property>
</column>
</widget>
</item>
</layout>
</item>