From a568a7d9850b503c06cd1e09368d36ac3900d56d Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Thu, 8 Nov 2018 10:20:52 +0100 Subject: [PATCH] Movie & Serie Discover --- cdiscover.cpp | 16 +++-- cdiscover.ui | 67 +++++++++-------- cmoviediscover.cpp | 4 ++ cmoviediscover.ui | 2 +- cmoviesearch.cpp | 18 +++-- cmoviesearch.ui | 73 ++++++++++--------- csearch.cpp | 29 ++++++-- csearch.ui | 76 ++++++++++++++------ cseriedetails.cpp | 62 ++++++++++++++++ cseriedetails.h | 52 ++++++++++++++ cseriedetails.ui | 175 +++++++++++++++++++++++++++++++++++++++++++++ cthemoviedbv3.cpp | 61 +++++++++++++++- cthemoviedbv3.h | 7 ++ qtMovies.pro | 9 ++- 14 files changed, 535 insertions(+), 116 deletions(-) create mode 100644 cseriedetails.cpp create mode 100644 cseriedetails.h create mode 100644 cseriedetails.ui diff --git a/cdiscover.cpp b/cdiscover.cpp index 1d167fa..d93b565 100644 --- a/cdiscover.cpp +++ b/cdiscover.cpp @@ -126,15 +126,19 @@ void cDiscover::on_m_lpYearEnable_clicked(bool checked) void cDiscover::on_m_lpSeries_clicked(const QModelIndex &index) { + setCursor(Qt::WaitCursor); + QStandardItem* lpItem = m_lpSeriesModel->itemFromIndex(index); cSerie* lpSerie = lpItem->data().value(); -// if(lpSerie->cast().isEmpty()) -// { -// cTheMovieDBV3 theMovieDB; -// theMovieDB.loadCastSerie(lpSerie); -// } -// ui->m_lpMovieDetails->setMovie(lpMovie); + if(lpSerie->cast().isEmpty()) + { + cTheMovieDBV3 theMovieDB; + theMovieDB.loadCastSerie(lpSerie); + } + ui->m_lpSerieDetails->setSerie(lpSerie); + + setCursor(Qt::ArrowCursor); } QList cDiscover::id() diff --git a/cdiscover.ui b/cdiscover.ui index a837084..cdae26a 100644 --- a/cdiscover.ui +++ b/cdiscover.ui @@ -131,40 +131,39 @@ - - - - - QAbstractItemView::NoEditTriggers - - - true + + + Qt::Horizontal + + + + QAbstractItemView::NoEditTriggers + + + true + + + + + true + + + + + 0 + 0 + 90 + 304 + + + + + + - - - - - true - - - - - 0 - 0 - 579 - 302 - - - - - - - - - - - + + @@ -187,9 +186,9 @@
qxtspanslider.h
- cMovieDetails + cSerieDetails QWidget -
cmoviedetails.h
+
cseriedetails.h
1
diff --git a/cmoviediscover.cpp b/cmoviediscover.cpp index 6fe4cf8..e460236 100644 --- a/cmoviediscover.cpp +++ b/cmoviediscover.cpp @@ -127,6 +127,8 @@ void cMovieDiscover::on_m_lpYearEnable_clicked(bool checked) void cMovieDiscover::on_m_lpMovies_clicked(const QModelIndex &index) { + setCursor(Qt::WaitCursor); + QStandardItem* lpItem = m_lpMoviesModel->itemFromIndex(index); cMovie* lpMovie = lpItem->data().value(); @@ -136,6 +138,8 @@ void cMovieDiscover::on_m_lpMovies_clicked(const QModelIndex &index) theMovieDB.loadCastMovie(lpMovie); } ui->m_lpMovieDetails->setMovie(lpMovie); + + setCursor(Qt::ArrowCursor); } QList cMovieDiscover::id() diff --git a/cmoviediscover.ui b/cmoviediscover.ui index 55d551d..e7a0b36 100644 --- a/cmoviediscover.ui +++ b/cmoviediscover.ui @@ -11,7 +11,7 @@ - Dialog + Discover Movie diff --git a/cmoviesearch.cpp b/cmoviesearch.cpp index ad6406c..3c461de 100644 --- a/cmoviesearch.cpp +++ b/cmoviesearch.cpp @@ -9,7 +9,6 @@ #include - cMovieSearch::cMovieSearch(QWidget *parent) : QDialog(parent), ui(new Ui::cMovieSearch), @@ -42,6 +41,8 @@ void cMovieSearch::on_m_lpSearch_textChanged(const QString &/*arg1*/) void cMovieSearch::on_m_lpSearchButton_clicked() { + setCursor(Qt::WaitCursor); + cMessageAnimateDialog* lpDialog = new cMessageAnimateDialog(this); lpDialog->setTitle("Search"); lpDialog->setMessage("Searching"); @@ -66,6 +67,8 @@ void cMovieSearch::on_m_lpSearchButton_clicked() QList movieList = theMovieDBV3.searchMovie(szSearchText, iYear, "de-DE"); m_lpResultsModel->clear(); + QStringList headerLabels = QStringList() << tr("Title") << tr("Year"); + m_lpResultsModel->setHorizontalHeaderLabels(headerLabels); for(int z = 0;z < movieList.count();z++) { @@ -77,16 +80,19 @@ void cMovieSearch::on_m_lpSearchButton_clicked() items.append(new QStandardItem(QString::number(lpMovie->releaseDate().year()))); items[0]->setData(QVariant::fromValue(lpMovie)); items[1]->setData(QVariant::fromValue(lpMovie)); - items[0]->setCheckState(Qt::Unchecked); + items[0]->setCheckable(true); m_lpResultsModel->appendRow(items); } - ui->m_lpResults->resizeColumnToContents(0); - ui->m_lpResults->resizeColumnToContents(1); + + for(int x = 0;x < headerLabels.count();x++) + ui->m_lpResults->resizeColumnToContents(x); m_lpResultsModel->sort(0, Qt::AscendingOrder); delete lpDialog; + + setCursor(Qt::ArrowCursor); } QList cMovieSearch::id() @@ -129,6 +135,8 @@ qint16 cMovieSearch::year() void cMovieSearch::on_m_lpResults_clicked(const QModelIndex& index) { + setCursor(Qt::WaitCursor); + cMovie* lpMovie = m_lpResultsModel->itemFromIndex(index)->data().value(); if(lpMovie->cast().isEmpty()) @@ -139,6 +147,8 @@ void cMovieSearch::on_m_lpResults_clicked(const QModelIndex& index) ui->m_lpMovieDetails->setMovie(lpMovie); setButtonBox(); + + setCursor(Qt::ArrowCursor); } void cMovieSearch::on_m_lpPlaceholderName_textChanged(const QString &/*arg1*/) diff --git a/cmoviesearch.ui b/cmoviesearch.ui index 8beb273..f1c8102 100644 --- a/cmoviesearch.ui +++ b/cmoviesearch.ui @@ -11,7 +11,7 @@ - Dialog + Search Movies @@ -35,7 +35,7 @@ - + @@ -51,43 +51,42 @@ - - - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::SingleSelection + + + Qt::Horizontal + + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::SingleSelection + + + + + true + + + + + 0 + 0 + 87 + 363 + + + + + + - - - - - true - - - - - 0 - 0 - 590 - 372 - - - - - - - - - - - + + diff --git a/csearch.cpp b/csearch.cpp index 3e073c5..68c39d1 100644 --- a/csearch.cpp +++ b/csearch.cpp @@ -42,6 +42,8 @@ void cSearch::on_m_lpSearch_textChanged(const QString& /*arg1*/) void cSearch::on_m_lpSearchButton_clicked() { + setCursor(Qt::WaitCursor); + cMessageAnimateDialog* lpDialog = new cMessageAnimateDialog(this); lpDialog->setTitle("Search"); lpDialog->setMessage("Searching"); @@ -56,11 +58,6 @@ void cSearch::on_m_lpSearchButton_clicked() for(int z = 0;z < serieList3.count();z++) { cSerie* lpSerie = serieList3.at(z); -// QTreeWidgetItem* lpNew = new QTreeWidgetItem(ui->m_lpResults); -// lpNew->setText(0, lpSerie->seriesName()); -// lpNew->setText(2, QString("%1").arg(lpSerie->firstAired().year())); -// lpNew->setData(0, Qt::UserRole, QVariant::fromValue(lpSerie->seriesID())); -// ui->m_lpResults->addTopLevelItem(lpNew); QList items; @@ -77,6 +74,8 @@ void cSearch::on_m_lpSearchButton_clicked() m_lpResultsModel->sort(0); delete lpDialog; + + setCursor(Qt::ArrowCursor); } qint32 cSearch::id() @@ -88,7 +87,10 @@ qint32 cSearch::id() return(iID); return(-1); } - return(m_lpResultsModel->itemFromIndex(ui->m_lpResults->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value()->seriesID()); + + QStandardItem* lpItem = m_lpResultsModel->itemFromIndex(ui->m_lpResults->selectionModel()->selectedRows().at(0)); + cSerie* lpSerie = lpItem->data().value(); + return(lpSerie->seriesID()); } QString cSearch::placeholderName() @@ -106,9 +108,22 @@ qint16 cSearch::year() return(ui->m_lpYear->value()); } -void cSearch::on_m_lpResults_clicked(const QModelIndex &/*index*/) +void cSearch::on_m_lpResults_clicked(const QModelIndex& index) { + setCursor(Qt::WaitCursor); + QStandardItem* lpItem = m_lpResultsModel->itemFromIndex(index); + cSerie* lpSerie = lpItem->data().value(); + + if(lpSerie->cast().isEmpty()) + { + cTheMovieDBV3 theMovieDB; + theMovieDB.loadCastSerie(lpSerie); + } + ui->m_lpSerieDetails->setSerie(lpSerie); + setButtonBox(); + + setCursor(Qt::ArrowCursor); } void cSearch::on_m_lpPlaceholderName_textChanged(const QString& /*arg1*/) diff --git a/csearch.ui b/csearch.ui index 803e8e0..6f56b11 100644 --- a/csearch.ui +++ b/csearch.ui @@ -6,8 +6,8 @@ 0 0 - 334 - 460 + 900 + 500 @@ -35,35 +35,59 @@ - + - + - - - - - - - - Search - - - - + - - - QAbstractItemView::NoEditTriggers - - - true + + + Search + + + + Qt::Horizontal + + + + QAbstractItemView::NoEditTriggers + + + true + + + false + + + + + true + + + + + 0 + 0 + 589 + 363 + + + + + + + + + + + @@ -127,6 +151,14 @@ + + + cSerieDetails + QWidget +
cseriedetails.h
+ 1 +
+
m_lpSearch m_lpSearchButton diff --git a/cseriedetails.cpp b/cseriedetails.cpp new file mode 100644 index 0000000..a9b9b96 --- /dev/null +++ b/cseriedetails.cpp @@ -0,0 +1,62 @@ +#include "cseriedetails.h" +#include "ui_cseriedetails.h" + +#include "cmovieimage.h" + + +cSerieDetails::cSerieDetails(QWidget *parent) : + QWidget(parent), + ui(new Ui::cSerieDetails), + m_lpActorsModel(0), + m_lpGenreModel(0) +{ + ui->setupUi(this); + + m_lpActorsModel = new QStandardItemModel(0, 0); + ui->m_lpDetailsActors->setModel(m_lpActorsModel); + + m_lpGenreModel = new QStandardItemModel(0, 9); + ui->m_lpDetailsGenre->setModel(m_lpGenreModel); +} + +cSerieDetails::~cSerieDetails() +{ + delete m_lpActorsModel; + delete m_lpGenreModel; + + delete ui; +} + +void cSerieDetails::setSerie(cSerie* lpSerie) +{ + ui->m_lpName->setText(lpSerie->seriesName()); + ui->m_lpFirstAired->setDate(lpSerie->firstAired()); + + ui->m_lpDetailsBanner->clear(); + if(!lpSerie->backdropPath().isEmpty()) + { + cMovieImage image; + QPixmap banner = image.getImage(lpSerie->backdropPath()); + ui->m_lpDetailsBanner->setPixmap(banner); + } + + ui->m_lpDetailsOverview->setText(lpSerie->overview()); + + m_lpActorsModel->clear(); + for(int x = 0;x < lpSerie->cast().count();x++) + { + QList items; + QStringList str = lpSerie->cast().at(x).split(","); + + items.append(new QStandardItem(str.at(0))); + items.append(new QStandardItem(str.at(1))); + m_lpActorsModel->appendRow(items); + } + ui->m_lpDetailsActors->resizeColumnToContents(0); + + m_lpGenreModel->clear(); + for(int x = 0;x < lpSerie->genre().count();x++) + m_lpGenreModel->appendRow(new QStandardItem(lpSerie->genre().at(x))); + + ui->m_lpDetailsGenre->resizeColumnToContents(0); +} diff --git a/cseriedetails.h b/cseriedetails.h new file mode 100644 index 0000000..e8bb704 --- /dev/null +++ b/cseriedetails.h @@ -0,0 +1,52 @@ +#ifndef CSERIEDETAILS_H +#define CSERIEDETAILS_H + + +#include "cserie.h" + +#include +#include + + +namespace Ui { +class cSerieDetails; +} + +/*! + \brief + + \class cSerieDetails cseriedetails.h "cseriedetails.h" +*/ +class cSerieDetails : public QWidget +{ + Q_OBJECT + +public: + /*! + \brief + + \fn cSerieDetails + \param parent + */ + explicit cSerieDetails(QWidget *parent = 0); + /*! + \brief + + \fn ~cSerieDetails + */ + ~cSerieDetails(); + + /*! + \brief + + \fn setSerie + \param lpSerie + */ + void setSerie(cSerie* lpSerie); +private: + Ui::cSerieDetails* ui; /*!< TODO: describe */ + QStandardItemModel* m_lpActorsModel; /*!< TODO: describe */ + QStandardItemModel* m_lpGenreModel; /*!< TODO: describe */ +}; + +#endif // CSERIEDETAILS_H diff --git a/cseriedetails.ui b/cseriedetails.ui new file mode 100644 index 0000000..77e6b14 --- /dev/null +++ b/cseriedetails.ui @@ -0,0 +1,175 @@ + + + cSerieDetails + + + + 0 + 0 + 860 + 516 + + + + Form + + + + + + + + + + + + true + + + + + + + Year: + + + + + + + true + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 310 + 200 + + + + QFrame::Box + + + + + + Qt::AlignCenter + + + + + + + + + true + + + + + 0 + 0 + 840 + 288 + + + + + + + + + true + + + + + + + + + + + Actors + + + + + + + QAbstractItemView::NoEditTriggers + + + true + + + false + + + + + + + + + + + Genre + + + + + + + QAbstractItemView::NoEditTriggers + + + true + + + false + + + + + + + + + + + + + + + + + + cVerticalLabel + QLabel +
cverticallabel.h
+
+
+ + +
diff --git a/cthemoviedbv3.cpp b/cthemoviedbv3.cpp index 2117998..b773b05 100644 --- a/cthemoviedbv3.cpp +++ b/cthemoviedbv3.cpp @@ -140,15 +140,62 @@ QList cTheMovieDBV3::searchSerie(const QString& szSerie, const qint16& QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8()); QJsonObject jsonObj = jsonResponse.object(); QJsonArray jsonArray = jsonObj["results"].toArray(); + QJsonArray tmpArray; + QStringList tmpList; for(int z = 0;z < jsonArray.count();z++) { QJsonObject serie = jsonArray[z].toObject(); cSerie* lpSerie = new cSerie; - lpSerie->setSeriesName(serie["name"].toString()); + lpSerie->setSeriesID(serie["id"].toInt()); - lpSerie->setOriginalName(serie["original_name"].toString()); + lpSerie->setBackdropPath(serie["backdrop_path"].toString()); + tmpArray = serie["created_by"].toArray(); + for(int x = 0;x < tmpArray.count();x++) + tmpList.append(tmpArray.at(x).toObject()["name"].toString()); + lpSerie->setCreatedBy(tmpList); + tmpList.clear(); lpSerie->setFirstAired(serie["first_air_date"].toString()); + tmpArray = serie["genres"].toArray(); + for(int x = 0;x < tmpArray.count();x++) + tmpList.append(tmpArray.at(x).toObject()["name"].toString()); + lpSerie->setGenre(tmpList); + tmpList.clear(); + lpSerie->setHomepage(serie["homepage"].toString()); + lpSerie->setLastAired(serie["last_air_date"].toString()); + tmpArray = serie["languages"].toArray(); + for(int x = 0;x < tmpArray.count();x++) + tmpList.append(tmpArray.at(x).toString()); + lpSerie->setLanguages(tmpList); + tmpList.clear(); + lpSerie->setSeriesName(serie["name"].toString()); + tmpArray = serie["networks"].toArray(); + for(int x = 0;x < tmpArray.count();x++) + tmpList.append(tmpArray.at(x).toObject()["name"].toString()); + lpSerie->setNetworks(tmpList); + tmpList.clear(); + lpSerie->setEpisodes(serie["number_of_episodes"].toInt()); + lpSerie->setSeasons(serie["number_of_seasons"].toInt()); + tmpArray = serie["origin_country"].toArray(); + for(int x = 0;x < tmpArray.count();x++) + tmpList.append(tmpArray.at(x).toString()); + lpSerie->setOriginCountries(tmpList); + tmpList.clear(); + lpSerie->setOriginalLanguage(serie["original_language"].toString()); + lpSerie->setOriginalName(serie["original_name"].toString()); + lpSerie->setOverview(serie["overview"].toString()); + lpSerie->setPopularity(serie["popularity"].toDouble()); + lpSerie->setPosterPath(serie["poster_path"].toString()); + tmpArray = serie["production_companies"].toArray(); + for(int x = 0;x < tmpArray.count();x++) + tmpList.append(tmpArray.at(x).toObject()["name"].toString()); + lpSerie->setProductionCompanies(tmpList); + tmpList.clear(); + lpSerie->setStatus(serie["status"].toString()); + lpSerie->setType(serie["type"].toString()); + lpSerie->setVoteAverage(serie["vote_average"].toDouble()); + lpSerie->setVoteCount(serie["vote_count"].toInt()); + serieList.append(lpSerie); } if(jsonObj["total_pages"].toInt() == page) @@ -920,3 +967,13 @@ QList cTheMovieDBV3::discoverSerie(const QString& szText, const qint16& return(serieList); } + +void cTheMovieDBV3::loadCastSerie(cSerie* lpSerie) +{ + cSerie* lpSerie1 = loadSerie(lpSerie->seriesID(), "DE-de"); + + lpSerie->setCast(lpSerie1->cast()); + lpSerie->setCrew(lpSerie1->crew()); + + delete lpSerie1; +} diff --git a/cthemoviedbv3.h b/cthemoviedbv3.h index 8c86000..9c8791c 100644 --- a/cthemoviedbv3.h +++ b/cthemoviedbv3.h @@ -124,6 +124,13 @@ public: \return QList */ QList discoverSerie(const QString& szText, const qint16& iYear, const QList& genres, const qreal& voteMin, const qreal& voteMax, const QString& szLanguage = "all"); + /*! + \brief + + \fn loadCastSerie + \param lpSerie + */ + void loadCastSerie(cSerie* lpSerie); private: QString m_szToken; /*!< TODO: describe */ QMap m_genres; /*!< TODO: describe */ diff --git a/qtMovies.pro b/qtMovies.pro index 3f0fa6f..74cb1e0 100644 --- a/qtMovies.pro +++ b/qtMovies.pro @@ -44,7 +44,8 @@ SOURCES += main.cpp\ cmoviediscover.cpp \ qxtspanslider.cpp \ ccheckboxitemdelegate.cpp \ - cmoviedetails.cpp + cmoviedetails.cpp \ + cseriedetails.cpp HEADERS += cmainwindow.h \ cserie.h \ @@ -78,7 +79,8 @@ HEADERS += cmainwindow.h \ qxtspanslider.h \ qxtspanslider_p.h \ ccheckboxitemdelegate.h \ - cmoviedetails.h + cmoviedetails.h \ + cseriedetails.h FORMS += cmainwindow.ui \ csearch.ui \ @@ -92,7 +94,8 @@ FORMS += cmainwindow.ui \ cexportdialog.ui \ cdiscover.ui \ cmoviediscover.ui \ - cmoviedetails.ui + cmoviedetails.ui \ + cseriedetails.ui DISTFILES += \ qtMovies.ico \