This commit is contained in:
2017-10-27 20:56:07 +02:00
parent 51ce6b47ed
commit 2caa9ddfc3
7 changed files with 514 additions and 101 deletions
+37 -27
View File
@@ -186,28 +186,37 @@ void cMainWindow::initDB()
if(!m_db.tables().contains("serie"))
{
query.exec("CREATE TABLE serie ("
" seriesID INTEGER,"
" seriesName STRING,"
" language STRING,"
" banner STRING,"
" overview TEXT,"
" firstAired DATE,"
" network STRING,"
" imdbid STRING,"
" id INTEGER,"
" contentRating STRING,"
" rating DOUBLE,"
" ratingCount INTEGER,"
" runtime INTEGER,"
" status STRING,"
" download STRING,"
" cliffhanger BOOL,"
" actor STRING,"
" genre STRING);");
" seriesID INTEGER,"
" seriesName STRING,"
" originalName STRING,"
" backdropPath STRING,"
" createdBy STRING,"
" homepage STRING,"
" lastAired DATE,"
" networks STRING,"
" nrEpisodes INTEGER,"
" nrSeasons INTEGER,"
" originCountries STRING,"
" originalLanguage STRING,"
" popularity DOUBLE,"
" posterPath STRING,"
" productionCompanies STRING,"
" type STRING,"
" voteAverage DOUBLE,"
" voteCount INT,"
" overview TEXT,"
" firstAired DATE,"
" cast STRING,"
" crew STRING,"
" genre STRING,"
" status STRING,"
" download STRING,"
" cliffhanger BOOL);");
}
if(!m_db.tables().contains("episode"))
{
/*
query.exec("CREATE TABLE episode ("
" episodeID INTEGER,"
" episodeName STRING,"
@@ -229,8 +238,8 @@ void cMainWindow::initDB()
" director STRING,"
" gueststars STRING,"
" episode_writer STRING);");
*/
}
if(!m_db.tables().contains("movie"))
{
query.exec("CREATE TABLE movie ("
@@ -283,7 +292,7 @@ void cMainWindow::loadSeriesDB()
qint32 iSeasonID;
cSeason* lpSeason;
cEpisode* lpEpisode;
/*
if(query.exec("SELECT serie.seriesID, serie.seriesName, serie.language, serie.banner, serie.overview, serie.firstAired, serie.network, serie.imdbid, serie.id, serie.contentRating, serie.rating, serie.ratingCount, serie.runtime, serie.status, serie.download, serie.cliffhanger, serie.actor, serie.genre, episode.episodeID, episode.episodeName, episode.episodeNumber, episode.firstAired, episode.imdbid, episode.language, episode.overview, episode.productioncode, episode.rating, episode.ratingCount, episode.seasonNumber, episode.seasonID, episode.seriesID, episode.state, episode.filename, episode.thumb_height, episode.thumb_width, episode.director, episode.gueststars, episode.episode_writer FROM serie LEFT JOIN episode ON serie.id = episode.seriesID ORDER BY serie.seriesName, episode.seasonNumber, episode.episodeNumber;"))
{
while(query.next())
@@ -344,6 +353,7 @@ void cMainWindow::loadSeriesDB()
lpEpisode->setWriter(query.value(37).toString().split(","));
}
}
*/
}
void cMainWindow::loadMoviesDB()
@@ -691,10 +701,10 @@ void cMainWindow::showSeriesContextMenu(QTreeView* lpTreeView, const QPoint &pos
lpMenu->addAction("delete", this, SLOT(onActionDelete()));
lpMenu->addAction("edit", this, SLOT(onActionEdit()));
lpMenu->addSeparator();
/*
if(!lpSerie->imdbID().isEmpty())
lpMenu->addAction("open IMDB", this, SLOT(onActionGotoIMDB()));
*/
if(!lpSerie->download().isEmpty())
{
lpMenu->addAction("open download link", this, SLOT(onActionGotoDownload()));
@@ -968,7 +978,7 @@ void cMainWindow::onActionAdd()
iMax = 1000000;
else
iMax++;
lpSerie->setID(iMax);
lpSerie->setSeriesID(iMax);
lpSerie->setFirstAired(QDate(iYear, 1, 1));
lpSerie->save(m_db);
}
@@ -1028,9 +1038,9 @@ void cMainWindow::onActionMovieAdd()
cTheMovieDBV3 movieDB3;
lpMovie = movieDB3.load(id, "de");
lpMovie = movieDB3.loadMovie(id, "de");
if(!lpMovie)
lpMovie = movieDB3.load(id, "en");
lpMovie = movieDB3.loadMovie(id, "en");
delete lpDialog;
@@ -1275,7 +1285,7 @@ void cMainWindow::on_m_lpMoviesList_doubleClicked(const QModelIndex &index)
{
onActionMovieEdit();
}
/*
void cMainWindow::onActionGotoIMDB()
{
if(ui->m_lpSeriesList1->selectionModel()->selectedRows().count())
@@ -1288,7 +1298,7 @@ void cMainWindow::onActionGotoIMDB()
}
}
}
*/
void cMainWindow::onActionMovieGotoIMDB()
{
if(ui->m_lpMoviesList->selectionModel()->selectedRows().count())
+1 -1
View File
@@ -59,7 +59,7 @@ void cMovieSearch::on_m_lpSearchButton_clicked()
}
}
QList<cMovie*> movieList = theMovieDBV3.search(szSearchText, iYear, "de");
QList<cMovie*> movieList = theMovieDBV3.searchMovie(szSearchText, iYear, "de");
ui->m_lpResults->clear();
+5 -1
View File
@@ -2,6 +2,7 @@
#include "ui_csearch.h"
#include "cthetvdbv2.h"
#include "cthemoviedbv3.h"
#include "cserie.h"
#include "cmessageanimatedialog.h"
@@ -43,7 +44,10 @@ void cSearch::on_m_lpSearchButton_clicked()
lpDialog->show();
cTheTVDBV2 theTVDBV2;
cTheMovieDBV3 theMovieDBV3;
QList<cSerie*> serieList2 = theTVDBV2.search(ui->m_lpSearch->text());
QList<cSerie*> serieList3 = theMovieDBV3.searchSerie(ui->m_lpSearch->text(), -1, "de");
ui->m_lpResults->clear();
@@ -53,7 +57,7 @@ void cSearch::on_m_lpSearchButton_clicked()
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->id()));
lpNew->setData(0, Qt::UserRole, QVariant::fromValue(lpSerie->seriesID()));
ui->m_lpResults->addTopLevelItem(lpNew);
}
ui->m_lpResults->resizeColumnToContents(0);
+81 -41
View File
@@ -4,40 +4,9 @@
#include <QVariant>
void addPerson(const QString& szTable, const QString& szField1, const qint32 &iValue1, const QString &szField2, const QString& szName)
{
qint32 personID;
QSqlQuery query;
query.exec(QString("SELECT personID FROM person WHERE name='%1';").arg(szName));
if(query.next())
personID = query.value(0).toInt();
else
{
query.prepare("INSERT INTO person (name) VALUES (:name);");
query.bindValue(":name", szName);
query.exec();
query.clear();
query.prepare("SELECT personID FROM person WHERE name=:name;");
query.bindValue(":name", szName);
query.exec();
query.next();
personID = query.value(0).toInt();
}
query.exec(QString("SELECT * FROM %1 WHERE %2=%3 AND %4=%5;").arg(szTable).arg(szField1).arg(iValue1).arg(szField2).arg(personID));
if(!query.next())
{
query.prepare(QString("INSERT INTO %1 (%2, %3) VALUES (:%4, :%5);").arg(szTable).arg(szField1).arg(szField2).arg(szField1).arg(szField2));
query.bindValue(QString(":%1").arg(szField1), iValue1);
query.bindValue(QString(":%1").arg(szField2), personID);
query.exec();
}
}
cSerie::cSerie() :
m_szSeriesName(""),
m_szOriginalName(""),
m_iSeriesID(-1),
m_szLanguage(""),
m_szBanner(""),
@@ -68,6 +37,19 @@ QString cSerie::seriesName()
return(m_szSeriesName);
}
void setOriginalName(const QString& szOriginalName); //New
QString originalName();
void cSerie::setOriginalName(const QString& szOriginalName)
{
m_szOriginalName = szOriginalName;
}
QString cSerie::originalName()
{
return(m_szOriginalName);
}
void cSerie::setSeriesID(const qint32& iSeriesID)
{
m_iSeriesID = iSeriesID;
@@ -78,6 +60,56 @@ qint32 cSerie::seriesID()
return(m_iSeriesID);
}
void setBackdropPath(const QString& szBackdropPath); //New
QString backdropPath();
void setCreatedBy(const QStringList& szCreatedBy); //New
void setCreatedBy(const QString& szCreatedBy);
QStringList createdBy();
void setHomepage(const QString& szHomepage); //New
QString homepage();
void setLastAired(const QString& szLAstAired); //New
void setLastAired(const QDate& lastAired);
QDate lastAired();
void setNetworks(const QStringList& szNetworks); //New
void setNetworks(const QString& szNetworks);
QStringList networks();
void setNrEpisodes(const qint16& iEpisodes); //New
qint16 nrEpisodes();
void setNrSeasons(const qint16& iSeasons); //New
qint16 nrSeasons();
void setOriginCountries(const QStringList& szOriginCountrues); //New
void setOriginCountries(const QString& szOriginCountries);
QStringList originCountries();
void setOriginalLanguage(const QString& szOriginalLanguage); //New
QString originalLanguage();
void setPopularity(const qreal& dPopularity); //New
qreal popularity();
void setPosterPath(const QString& szPosterPath); //New
QString posterPath();
void setProductionCompanies(const QStringList& szProductionCompanies); //New
void setProductionCompanies(const QString& szProductionCompanies);
QStringList productionCompanies();
void setType(const QString& szType); //New
QString type();
void setVoteAverage(const qreal& dVoteAverage); //New
qreal voteAverage();
void setVoteCount(const qint16& iVoteCount); //New
qint16 voteCount();
/*
void cSerie::setLanguage(const QString& szLanguage)
{
m_szLanguage = szLanguage;
@@ -97,7 +129,7 @@ QString cSerie::banner()
{
return(m_szBanner);
}
*/
void cSerie::setOverview(const QString& szOverview)
{
m_szOverview = szOverview;
@@ -122,7 +154,7 @@ QDate cSerie::firstAired()
{
return(m_firstAired);
}
/*
void cSerie::setNetwork(const QString& szNetwork)
{
m_szNetwork = szNetwork;
@@ -179,6 +211,13 @@ QString cSerie::contentRating()
{
return(m_szContentRating);
}
*/
void setCast(const QStringList& szCast); //New
QStringList cast();
void setCrew(const QStringList& szCrew); //New
QStringList crew();
void cSerie::setGenre(const QString& szGenre)
{
@@ -196,7 +235,7 @@ QStringList cSerie::genre()
{
return(m_szGenre);
}
/*
void cSerie::setRating(const qreal& dRating)
{
m_dRating = dRating;
@@ -226,7 +265,7 @@ qint16 cSerie::runime()
{
return(m_iRuntime);
}
*/
void cSerie::setStatus(const QString& szStatus)
{
m_szStatus = szStatus;
@@ -341,6 +380,7 @@ qint16 cSerie::maxEpisode()
bool cSerie::save(QSqlDatabase &db)
{
/*
QSqlQuery query;
QSqlQuery querySerie;
QSqlQuery queryEpisode;
@@ -416,7 +456,7 @@ bool cSerie::save(QSqlDatabase &db)
}
}
db.commit();
*/
return(true);
}
@@ -426,11 +466,11 @@ bool cSerie::del(QSqlDatabase& db)
db.transaction();
query.prepare("DELETE FROM episode WHERE seriesID=:seriesID;");
query.bindValue(":seriesID", id());
query.bindValue(":seriesID", seriesID());
query.exec();
query.prepare("DELETE FROM serie WHERE id=:seriesID;");
query.bindValue(":seriesID", id());
query.bindValue(":seriesID", seriesID());
query.exec();
db.commit();
@@ -507,11 +547,11 @@ cSerie* cSerieList::add(const qint32& iID)
{
for(int z = 0;z < count();z++)
{
if(at(z)->id() == iID)
if(at(z)->seriesID() == iID)
return(at(z));
}
cSerie* lpNew = new cSerie;
lpNew->setID(iID);
lpNew->setSeriesID(iID);
append(lpNew);
return(lpNew);
}
+87 -27
View File
@@ -14,55 +14,114 @@ class cSerie
public:
cSerie();
void setSeriesName(const QString& szSeriesName);
void setSeriesName(const QString& szSeriesName); //OK
QString seriesName();
void setSeriesID(const qint32& iSeriesID);
void setOriginalName(const QString& szOriginalName); //New
QString originalName();
void setSeriesID(const qint32& iSeriesID); //OK
qint32 seriesID();
void setLanguage(const QString& szLanguage);
QString language();
void setBackdropPath(const QString& szBackdropPath); //New
QString backdropPath();
void setBanner(const QString& szBanner);
QString banner();
void setCreatedBy(const QStringList& szCreatedBy); //New
void setCreatedBy(const QString& szCreatedBy);
QStringList createdBy();
void setOverview(const QString& szOverview);
void setHomepage(const QString& szHomepage); //New
QString homepage();
void setLastAired(const QString& szLAstAired); //New
void setLastAired(const QDate& lastAired);
QDate lastAired();
void setNetworks(const QStringList& szNetworks); //New
void setNetworks(const QString& szNetworks);
QStringList networks();
void setNrEpisodes(const qint16& iEpisodes); //New
qint16 nrEpisodes();
void setNrSeasons(const qint16& iSeasons); //New
qint16 nrSeasons();
void setOriginCountries(const QStringList& szOriginCountrues); //New
void setOriginCountries(const QString& szOriginCountries);
QStringList originCountries();
void setOriginalLanguage(const QString& szOriginalLanguage); //New
QString originalLanguage();
void setPopularity(const qreal& dPopularity); //New
qreal popularity();
void setPosterPath(const QString& szPosterPath); //New
QString posterPath();
void setProductionCompanies(const QStringList& szProductionCompanies); //New
void setProductionCompanies(const QString& szProductionCompanies);
QStringList productionCompanies();
void setType(const QString& szType); //New
QString type();
void setVoteAverage(const qreal& dVoteAverage); //New
qreal voteAverage();
void setVoteCount(const qint16& iVoteCount); //New
qint16 voteCount();
// void setLanguage(const QString& szLanguage);
// QString language();
// void setBanner(const QString& szBanner);
// QString banner();
void setOverview(const QString& szOverview); //OK
QString overview();
void setFirstAired(const QString& szFirstAired);
void setFirstAired(const QString& szFirstAired); //OK
void setFirstAired(const QDate& firstAired);
QDate firstAired();
void setNetwork(const QString& szNetwork);
QString network();
// void setNetwork(const QString& szNetwork); //Old
// QString network();
void setIMDBID(const QString& szIMDBID);
QString imdbID();
// void setIMDBID(const QString& szIMDBID);
// QString imdbID();
void setID(const qint32& iID);
qint32 id();
// void setID(const qint32& iID);
// qint32 id();
void setActors(const QString& szActors);
void setActors(const QStringList& szActors);
QStringList actors();
// void setActors(const QString& szActors);
// void setActors(const QStringList& szActors);
// QStringList actors();
void setContentRating(const QString& szContentRating);
QString contentRating();
// void setContentRating(const QString& szContentRating);
// QString contentRating();
void setGenre(const QString& szGenre);
void setCast(const QStringList& szCast); //New
QStringList cast();
void setCrew(const QStringList& szCrew); //New
QStringList crew();
void setGenre(const QString& szGenre); //OK
void setGenre(const QStringList& szGenre);
QStringList genre();
void setRating(const qreal& dRating);
qreal rating();
// void setRating(const qreal& dRating);
// qreal rating();
void setRatingCount(const qint16& iRatingCount);
qint16 ratingCount();
// void setRatingCount(const qint16& iRatingCount);
// qint16 ratingCount();
void setRuntime(const qint16& iRuntime);
qint16 runime();
// void setRuntime(const qint16& iRuntime);
// qint16 runime();
void setStatus(const QString& szStatus);
void setStatus(const QString& szStatus); //OK
QString status();
void setDownload(const QString& szDownload);
@@ -100,6 +159,7 @@ public:
void deleteResources();
private:
QString m_szSeriesName;
QString m_szOriginalName;
qint32 m_iSeriesID;
QString m_szLanguage;
QString m_szBanner;
+296 -2
View File
@@ -18,7 +18,7 @@ cTheMovieDBV3::cTheMovieDBV3()
m_szToken = "a33271b9e54cdcb9a80680eaf5522f1b";
}
QList<cMovie*> cTheMovieDBV3::search(const QString& szMovie, const qint16& year, const QString& szLanguage)
QList<cMovie*> cTheMovieDBV3::searchMovie(const QString& szMovie, const qint16& year, const QString& szLanguage)
{
QList<cMovie*> movieList;
QNetworkAccessManager networkManager;
@@ -80,7 +80,69 @@ QList<cMovie*> cTheMovieDBV3::search(const QString& szMovie, const qint16& year,
return(movieList);
}
cMovie* cTheMovieDBV3::load(const qint32 &iID, const QString &szLanguage)
QList<cSerie*> cTheMovieDBV3::searchSerie(const QString& szSerie, const qint16& year, const QString& szLanguage)
{
QList<cSerie*> serieList;
QNetworkAccessManager networkManager;
QString szRequest = QString("https://api.themoviedb.org/3/search/tv?api_key=%1").arg(m_szToken);
qint16 page = 1;
if(!szLanguage.contains("all"))
szRequest.append(QString("&language=%1").arg(szLanguage));
szRequest.append(QString("&query=%1").arg(szSerie));
if(year != -1)
szRequest.append(QString("&year=%1").arg(year));
szRequest.append("&include_adult=false");
for(;;)
{
QNetworkRequest request(QUrl(QString("%1&page=%2").arg(szRequest).arg(page)));
QNetworkReply* reply = networkManager.get(request);
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
if (reply->error() == QNetworkReply::NoError)
{
QString strReply = (QString)reply->readAll();
QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonObj = jsonResponse.object();
QJsonArray jsonArray = jsonObj["results"].toArray();
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->setFirstAired(serie["first_air_date"].toString());
serieList.append(lpSerie);
}
if(jsonObj["total_pages"].toInt() == page)
break;
page++;
if(page > 20)
break;
delete reply;
}
else
{
qDebug() << reply->errorString();
delete reply;
}
}
return(serieList);
}
cMovie* cTheMovieDBV3::loadMovie(const qint32 &iID, const QString &szLanguage)
{
cMovie* lpMovie = 0;
QNetworkAccessManager networkManager;
@@ -221,3 +283,235 @@ cMovie* cTheMovieDBV3::load(const qint32 &iID, const QString &szLanguage)
}
return(lpMovie);
}
cSerie* cTheMovieDBV3::loadSerie(const QString& szIMDBID)
{
qint32 iID;
QNetworkAccessManager networkManager;
QNetworkRequest request(QUrl(QString("https://api.themoviedb.org/3/find/%1?api_key=%2&external_source=imdb_id").arg(szIMDBID).arg(m_szToken)));
request.setRawHeader("Content-Type", "application/json");
request.setRawHeader("Authorization", QString("Bearer %1").arg(m_szToken).toUtf8());
QNetworkReply* reply = networkManager.get(request);
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
if (reply->error() == QNetworkReply::NoError)
{
QString strReply = (QString)reply->readAll();
QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonObj = jsonResponse.object();
QJsonObject tmpObj;
delete reply;
tmpObj = jsonObj["tv_results"].toObject();
iID = tmpObj["id"].toInt();
return(loadSerie(iID, "de"));
}
return(0);
}
cSerie* cTheMovieDBV3::loadSerie(const qint32 &iID, const QString& szLanguage)
{
cSerie* lpSerie = 0;
QNetworkAccessManager networkManager;
QNetworkRequest request(QUrl(QString("https://api.themoviedb.org/3/tv/%1?api_key=%2&language=%3").arg(iID).arg(m_szToken).arg(szLanguage)));
request.setRawHeader("Content-Type", "application/json");
request.setRawHeader("Authorization", QString("Bearer %1").arg(m_szToken).toUtf8());
if(!szLanguage.contains("all"))
request.setRawHeader("Accept-Language", szLanguage.toUtf8());
else
request.setRawHeader("Accept-Language", "en");
QNetworkReply* reply = networkManager.get(request);
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
if (reply->error() == QNetworkReply::NoError)
{
QString strReply = (QString)reply->readAll();
QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonObj = jsonResponse.object();
QJsonArray tmpArray;
QStringList tmpList;
QJsonObject tmpObj;
delete reply;
lpSerie = new cSerie;
lpSerie->setBackdropPath(jsonObj["backdrop_path"].toString());
tmpArray = jsonObj["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(jsonObj["first_air_date"].toString());
tmpArray = jsonObj["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(jsonObj["homepage"].toString());
lpSerie->setLastAired(jsonObj["last_air_date"].toString());
lpSerie->setSeriesName(jsonObj["name"].toString());
tmpArray = jsonObj["networks"].toArray();
for(int x = 0;x < tmpArray.count();x++)
tmpList.append(tmpArray.at(x).toObject()["name"].toString());
lpSerie->setNetworks(tmpList);
tmpList.clear();
lpSerie->setNrEpisodes(jsonObj["number_of_episodes"].toInt());
lpSerie->setNrSeasons(jsonObj["number_of_seasons"].toInt());
tmpArray = jsonObj["origin_country"].toArray();
for(int x = 0;x < tmpArray.count();x++) //!!!!!!!!!!
tmpList.append(tmpArray.at(x).toObject()["name"].toString());
lpSerie->setOriginCountries(tmpList);
tmpList.clear();
lpSerie->setOriginalLanguage(jsonObj["original_language"].toString());
lpSerie->setOriginalName(jsonObj["original_name"].toString());
lpSerie->setOverview(jsonObj["overview"].toString());
lpSerie->setPopularity(jsonObj["popularity"].toDouble());
lpSerie->setPosterPath(jsonObj["poster_path"].toString());
tmpArray = jsonObj["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(jsonObj["status"].toString());
lpSerie->setType(jsonObj["type"].toString());
lpSerie->setVoteAverage(jsonObj["vote_average"].toDouble());
lpSerie->setVoteCount(jsonObj["vote_count"].toInt());
request.setUrl(QUrl(QString("https://api.themoviedb.org/3/tv/%1/credits?api_key=%2").arg(iID).arg(m_szToken)));
request.setRawHeader("Content-Type", "application/json");
if(!szLanguage.contains("all"))
request.setRawHeader("Accept-Language", szLanguage.toUtf8());
else
request.setRawHeader("Accept-Language", "en");
reply = networkManager.get(request);
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
if (reply->error() == QNetworkReply::NoError)
{
strReply = (QString)reply->readAll();
jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonCast = jsonResponse.object();
QJsonArray jsonArrayCast = jsonCast["cast"].toArray();
QJsonArray jsonArrayCrew = jsonCast["crew"].toArray();
QStringList szCast;
QStringList szCrew;
delete reply;
for(int x = 0;x < jsonArrayCast.count();x++)
{
tmpObj = jsonArrayCast.at(x).toObject();
szCast.append(QString("%1,%2").arg(tmpObj["name"].toString()).arg(tmpObj["character"].toString()));
}
if(szCast.count())
lpSerie->setCast(szCast);
for(int x = 0;x < jsonArrayCrew.count();x++)
{
tmpObj = jsonArrayCrew.at(x).toObject();
szCrew.append(QString("%1,%2").arg(tmpObj["name"].toString()).arg(tmpObj["job"].toString()));
}
if(szCrew.count())
lpSeerie->setCrew(szCrew);
}
tmpArray = jsonObj["seasons"].toArray();
for(int x = 0; x < tmpArray.count();x++)
{
QJsonObject seasonObj = tmpArray.at(x).toObject();
qint16 seasonNumber = seasonObj["season_number"].toInt();
cSeason* lpSeason = lpSerie->addSeason(seasonNumber);
request.setUrl(QUrl(QString("https://api.themoviedb.org/3/tv/%1/season/%2?api_key=%3&language=%4").arg(iID).arg(seasonNumber).arg(m_szToken).arg(szLanguage)));
request.setRawHeader("Content-Type", "application/json");
if(!szLanguage.contains("all"))
request.setRawHeader("Accept-Language", szLanguage.toUtf8());
else
request.setRawHeader("Accept-Language", "en");
reply = networkManager.get(request);
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
if (reply->error() == QNetworkReply::NoError)
{
strReply = (QString)reply->readAll();
jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonEpisodes = jsonResponse.object();
QJsonArray jsonArrayEpisodes = jsonEpisodes["episodes"].toArray();
delete reply;
for(int x = 0;x < jsonArrayEpisodes.count();x++)
{
tmpObj = jsonArrayEpisodes.at(x).toObject();
cEpisode* lpEpisode = lpSeason->addEpisode(tmpObj["episode_number"].toInt());
lpEpisode->setAirDate(tmpObj["air_date"].toString());
lpEpisode->setName(tmpObj["name"].toString());
lpEpisode->setOverview(tmpObj["overview"].toString());
lpEpisode->setID(tmpObj["id"].toInt());
lpEpisode->setProductionCode(tmpObj["production_code"].toString());
lpEpisode->setSeasonNumber(tmpObj["season_number"].toInt());
lpEpisode->setStillPath(tmpObj["still_path"].toString());
lpEpisode->setVoteAverage(tmpObj["vote_average"].toDouble());
lpEpisode->setVoteCount(tmpObj["vote_count"].toInt());
QJsonArray jsonArrayCrew = tmpObj["crew"].toArray();
QJsonArray jsonArrayGuestStars = tmpObj["guest_start"].toArray();
QStringList szCrew;
QStringList szGuestStars;
delete reply;
for(int x = 0;x < jsonArrayCrew.count();x++)
{
tmpObj = jsonArrayCrew.at(x).toObject();
szCrew.append(QString("%1,%2").arg(tmpObj["name"].toString()).arg(tmpObj["job"].toString()));
}
if(szCrew.count())
lpEpisode->setCrew(szCrew);
for(int x = 0;x < jsonArrayGuestStars.count();x++)
{
tmpObj = jsonArrayGuestStars.at(x).toObject();
szGuestStars.append(QString("%1,%2").arg(tmpObj["name"].toString()).arg(tmpObj["character"].toString()));
}
if(szGuestStars.count())
lpEpisode->setGuestStars(szGuestStars);
}
}
}
}
else
{
qDebug() << reply->errorString();
delete reply;
}
return(lpSerie);
}
+7 -2
View File
@@ -3,6 +3,7 @@
#include "cmovie.h"
#include "cserie.h"
#include <QString>
#include <QList>
@@ -14,8 +15,12 @@ class cTheMovieDBV3
public:
cTheMovieDBV3();
QList<cMovie*> search(const QString& szMovie, const qint16& year = -1, const QString& szLanguage = "all");
cMovie* load(const qint32 &iID, const QString& szLanguage);
QList<cMovie*> searchMovie(const QString& szMovie, const qint16& year = -1, const QString& szLanguage = "all");
cMovie* loadMovie(const qint32 &iID, const QString& szLanguage);
QList<cSerie*> searchSerie(const QString& szSerie, const qint16& year = -1, const QString& szLanguage = "all");
cSerie* loadSerie(const qint32 &iID, const QString& szLanguage);
cSerie* loadSerie(const QString& szIMDBID);
private:
QString m_szToken;
// QStringList getActors(const qint32& iID);