You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
5.6 KiB
C++

#include "cfanarttv.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QEventLoop>
#include <QByteArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
cFanartTV::cFanartTV() :
m_szAPIKey("5c31661038de56f110b5f2fc4d49a7d1")
{
}
void cFanartTV::processArray(const QJsonArray& array, cFanartList& fanartList, cFanart::Type type)
{
cFanart* lpFanart;
for(int x = 0;x < array.count();x++)
{
QJsonObject obj = array.at(x).toObject();
lpFanart = fanartList.add(type);
switch(type)
{
case cFanart::TypeHDTVLogo:
case cFanart::TypeClearLogo:
case cFanart::TypeTVPoster:
case cFanart::TypeClearArt:
case cFanart::TypeHDClearArt:
case cFanart::TypeTVThumb:
case cFanart::TypeCharacterArt:
case cFanart::TypeTVBanner:
lpFanart->setID(obj["id"].toString().toInt());
lpFanart->setLanguage(obj["lang"].toString());
lpFanart->setLikes(obj["likes"].toString().toInt());
lpFanart->setURL(obj["url"].toString());
break;
case cFanart::TypeShowBackground:
case cFanart::TypeSeasonPoster:
case cFanart::TypeSeasonBanner:
case cFanart::TypeSeasonThumb:
lpFanart->setID(obj["id"].toString().toInt());
lpFanart->setLanguage(obj["lang"].toString());
lpFanart->setLikes(obj["likes"].toString().toInt());
lpFanart->setURL(obj["url"].toString());
if(!obj["season"].toString().compare("all"))
lpFanart->setSeason(-1);
else
lpFanart->setSeason(obj["season"].toString().toInt());
break;
case cFanart::TypeHDMovieLogo:
case cFanart::TypeMovieLogo:
case cFanart::TypeMoviePoster:
case cFanart::TypeHDMovieClearArt:
case cFanart::TypeMovieArt:
case cFanart::TypeMovieBackground:
case cFanart::TypeMovieBanner:
case cFanart::TypeMovieThumb:
lpFanart->setID(obj["id"].toString().toInt());
lpFanart->setLanguage(obj["lang"].toString());
lpFanart->setLikes(obj["likes"].toString().toInt());
lpFanart->setURL(obj["url"].toString());
break;
case cFanart::TypeMovieDisc:
lpFanart->setID(obj["id"].toString().toInt());
lpFanart->setLanguage(obj["lang"].toString());
lpFanart->setLikes(obj["likes"].toString().toInt());
lpFanart->setURL(obj["url"].toString());
lpFanart->setDisc(obj["disc"].toString());
lpFanart->setDiscType(obj["disc_type"].toString());
break;
default:
break;
}
}
}
cFanartList cFanartTV::loadFanartSerie(const qint32 &iID)
{
cFanartList fanartList;
QNetworkAccessManager networkManager;
QNetworkRequest request(QUrl(QString("http://webservice.fanart.tv/v3/tv/%1?api_key=%2").arg(iID).arg(m_szAPIKey)));
request.setRawHeader("Content-Type", "application/json");
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();
delete reply;
processArray(jsonObj["hdtvlogo"].toArray(), fanartList, cFanart::TypeHDTVLogo);
processArray(jsonObj["clearlogo"].toArray(), fanartList, cFanart::TypeClearLogo);
processArray(jsonObj["tvposter"].toArray(), fanartList, cFanart::TypeTVPoster);
processArray(jsonObj["clearart"].toArray(), fanartList, cFanart::TypeClearArt);
processArray(jsonObj["hdclearart"].toArray(), fanartList, cFanart::TypeHDClearArt);
processArray(jsonObj["showbackground"].toArray(), fanartList, cFanart::TypeShowBackground);
processArray(jsonObj["seasonposter"].toArray(), fanartList, cFanart::TypeSeasonPoster);
processArray(jsonObj["tvthumb"].toArray(), fanartList, cFanart::TypeTVThumb);
processArray(jsonObj["seasonbanner"].toArray(), fanartList, cFanart::TypeSeasonBanner);
processArray(jsonObj["characterart"].toArray(), fanartList, cFanart::TypeCharacterArt);
processArray(jsonObj["seasonthumb"].toArray(), fanartList, cFanart::TypeSeasonThumb);
processArray(jsonObj["tvbanner"].toArray(), fanartList, cFanart::TypeTVBanner);
}
else
{
qDebug() << reply->errorString();
delete reply;
}
return(fanartList);
}
cFanartList cFanartTV::loadFanartMovie(const QString &szIMDBID)
{
cFanartList fanartList;
QNetworkAccessManager networkManager;
QNetworkRequest request(QUrl(QString("http://webservice.fanart.tv/v3/movies/%1?api_key=%2").arg(szIMDBID).arg(m_szAPIKey)));
request.setRawHeader("Content-Type", "application/json");
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();
delete reply;
processArray(jsonObj["hdmovielogo"].toArray(), fanartList, cFanart::TypeHDMovieLogo);
processArray(jsonObj["movielogo"].toArray(), fanartList, cFanart::TypeMovieLogo);
processArray(jsonObj["movieposter"].toArray(), fanartList, cFanart::TypeMoviePoster);
processArray(jsonObj["hdmovieclearart"].toArray(), fanartList, cFanart::TypeHDMovieClearArt);
processArray(jsonObj["movieart"].toArray(), fanartList, cFanart::TypeMovieArt);
processArray(jsonObj["moviebackground"].toArray(), fanartList, cFanart::TypeMovieBackground);
processArray(jsonObj["moviebanner"].toArray(), fanartList, cFanart::TypeMovieBanner);
processArray(jsonObj["moviethumb"].toArray(), fanartList, cFanart::TypeMovieThumb);
}
else
{
qDebug() << reply->errorString();
delete reply;
}
return(fanartList);
}