From 266c03a5f1ad663189aeb4af05f0e9f5b9fb7bf6 Mon Sep 17 00:00:00 2001 From: birkeh Date: Fri, 28 Oct 2016 11:29:51 +0200 Subject: [PATCH] Init --- cimage.cpp | 2 +- ckodilibrary.cpp | 2 + ckodivideolibrary.cpp | 30 +++++++ ckodivideolibrary.h | 26 +++--- cmyvideos.cpp | 196 ++++++++++++++++++++++++++++++++++++++++++ cmyvideos.h | 99 +++++++++++++++++++++ cvideowidget.cpp | 1 + cvideowidget.ui | 61 +++++++++++-- 8 files changed, 399 insertions(+), 18 deletions(-) diff --git a/cimage.cpp b/cimage.cpp index 69dd076..f324f43 100644 --- a/cimage.cpp +++ b/cimage.cpp @@ -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; diff --git a/ckodilibrary.cpp b/ckodilibrary.cpp index 1b8e5c9..bda52b9 100644 --- a/ckodilibrary.cpp +++ b/ckodilibrary.cpp @@ -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); diff --git a/ckodivideolibrary.cpp b/ckodivideolibrary.cpp index ff460ec..49e1ced 100644 --- a/ckodivideolibrary.cpp +++ b/ckodivideolibrary.cpp @@ -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); +} diff --git a/ckodivideolibrary.h b/ckodivideolibrary.h index d84d643..dbd2b72 100644 --- a/ckodivideolibrary.h +++ b/ckodivideolibrary.h @@ -9,6 +9,7 @@ #include #include +#include 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 diff --git a/cmyvideos.cpp b/cmyvideos.cpp index bd824bf..a6548f5 100644 --- a/cmyvideos.cpp +++ b/cmyvideos.cpp @@ -1,5 +1,172 @@ #include "cmyvideos.h" +#include +#include + + +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); diff --git a/cmyvideos.h b/cmyvideos.h index f120d66..c0d1b14 100644 --- a/cmyvideos.h +++ b/cmyvideos.h @@ -7,6 +7,17 @@ #include #include +#include +#include + + +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 +{ +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 +{ +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(); diff --git a/cvideowidget.cpp b/cvideowidget.cpp index 50d3ec9..9f57ea6 100644 --- a/cvideowidget.cpp +++ b/cvideowidget.cpp @@ -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()) { diff --git a/cvideowidget.ui b/cvideowidget.ui index 1c6f7c9..d0f99f3 100644 --- a/cvideowidget.ui +++ b/cvideowidget.ui @@ -73,7 +73,7 @@ - 1 + 2 @@ -571,7 +571,7 @@ - + Director @@ -581,10 +581,14 @@ - - + + + + true + + - + Writer @@ -594,8 +598,51 @@ - - + + + + true + + + + + + + Cast + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + QAbstractItemView::NoEditTriggers + + + true + + + false + + + 2 + + + false + + + + 1 + + + + + 2 + + +