diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 284b545..33bd151 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -9,6 +9,8 @@ #include "cedit.h" #include "cimage.h" +#include "cthemoviedbv3.h" + #include #include #include @@ -49,6 +51,7 @@ cMainWindow::cMainWindow(QWidget *parent) : lpDialog->show(); ui->setupUi(this); + ui->m_lpMainTab->setCurrentWidget(0); m_lpSeriesListModel = new QStandardItemModel(0, 3); initDB(); @@ -134,7 +137,7 @@ void cMainWindow::initDB() QSqlQuery query; - if(!m_db.tables().count()) + if(!m_db.tables().contains("serie")) { query.exec("CREATE TABLE serie (" " seriesID INTEGER," @@ -155,7 +158,10 @@ void cMainWindow::initDB() " cliffhanger BOOL," " actor STRING," " genre STRING);"); + } + if(!m_db.tables().contains("episode")) + { query.exec("CREATE TABLE episode (" " episodeID INTEGER," " episodeName STRING," @@ -178,9 +184,37 @@ void cMainWindow::initDB() " gueststars STRING," " episode_writer STRING);"); } + + if(!m_db.tables().contains("movie")) + { + query.exec("CREATE TABLE movie (" + " movieID INTEGER," + " movieTitle STRING," + " originalTitle STRING," + " language STRING," + " backdropPath STRING," + " posterPath STRING," + " overview TEXT," + " releaseDate DATE," + " actor STRING," + " genre STRING," + " imdbid STRING," + " originalLanguage STRING," + " popularity DOUBLE," + " productionCompanies STRING," + " productionCountries STRING," + " voteRating DOUBLE," + " voteCount INTEGER," + " actors TEXT);"); // NAME|CHARACTER|ORDER + } } void cMainWindow::loadDB() +{ + loadSeriesDB(); +} + +void cMainWindow::loadSeriesDB() { m_serieList.clear(); @@ -255,6 +289,82 @@ void cMainWindow::loadDB() } } +void cMainWindow::loadMoviesDB() +{ + m_movieList.clear(); + + QSqlQuery query; +/* + qint32 iOldSeriesID = -1; + qint32 iOldSeasonID = -1; + qint32 iSeriesID; + 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()) + { + iSeriesID = query.value( 8).toInt(); + iSeasonID = query.value(29).toInt(); + + if(iSeriesID != iOldSeriesID) + { + m_serieList.add(iSeriesID); + iOldSeriesID = iSeriesID; + } + + cSerie* lpSerie = m_serieList.add(iSeriesID); + lpSerie->setSeriesID(query.value(0).toInt()); + lpSerie->setSeriesName(query.value(1).toString()); + lpSerie->setLanguage(query.value(2).toString()); + lpSerie->setBanner(query.value(3).toString()); + lpSerie->setOverview(query.value(4).toString()); + lpSerie->setFirstAired(query.value(5).toDate()); + lpSerie->setNetwork(query.value(6).toString()); + lpSerie->setIMDBID(query.value(7).toString()); + lpSerie->setContentRating(query.value(9).toString()); + lpSerie->setRating(query.value(10).toDouble()); + lpSerie->setRatingCount(query.value(11).toInt()); + lpSerie->setRuntime(query.value(12).toInt()); + lpSerie->setStatus(query.value(13).toString()); + lpSerie->setDownload(query.value(14).toString()); + lpSerie->setCliffhanger(query.value(15).toBool()); + lpSerie->setActors(query.value(16).toString().split(",")); + lpSerie->setGenre(query.value(17).toString().split(",")); + + if(iSeasonID != iOldSeasonID) + { + lpSeason = lpSerie->addSeason(query.value(28).toInt()); + iOldSeasonID = iSeasonID; + } + + lpEpisode = lpSeason->addEpisode(query.value(20).toInt()); + lpEpisode->setID(query.value(18).toInt()); + lpEpisode->setEpisodeName(query.value(19).toString()); + lpEpisode->setFirstAired(query.value(21).toDate()); + lpEpisode->setIMDBID(query.value(22).toString()); + lpEpisode->setLanguage(query.value(23).toString()); + lpEpisode->setOverview(query.value(24).toString()); + lpEpisode->setProductionCode(query.value(25).toString()); + lpEpisode->setRating(query.value(26).toDouble()); + lpEpisode->setRatingCount(query.value(27).toInt()); + lpEpisode->setSeasonNumber(query.value(28).toInt()); + lpEpisode->setSeasonID(query.value(29).toInt()); + lpEpisode->setSeriesID(query.value(30).toInt()); + lpEpisode->setState((cEpisode::State)query.value(31).toInt()); + lpEpisode->setFileName(query.value(32).toString()); + lpEpisode->setThumbHeight(query.value(33).toInt()); + lpEpisode->setThumbWidth(query.value(34).toInt()); + lpEpisode->setDirector(query.value(35).toString().split(",")); + lpEpisode->setGuestStars(query.value(36).toString().split(",")); + lpEpisode->setWriter(query.value(37).toString().split(",")); + } + } +*/ +} + void cMainWindow::displaySeries() { m_lpSeriesListModel->clear(); diff --git a/cmainwindow.h b/cmainwindow.h index b76842b..521c9cd 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -3,6 +3,8 @@ #include "cserie.h" +#include "cmovie.h" + #include "cupdatethread.h" #include "cpicturesthread.h" @@ -66,6 +68,7 @@ private slots: private: Ui::cMainWindow* ui; cSerieList m_serieList; + cMovieList m_movieList; QSqlDatabase m_db; QString m_szOldSelected; @@ -82,6 +85,9 @@ private: void initDB(); void loadDB(); + void loadSeriesDB(); + void loadMoviesDB(); + void displaySeries(); bool runEdit(cSerie *lpSerie, QString& szDownload); diff --git a/cmainwindow.ui b/cmainwindow.ui index 4700d2d..5a6db85 100644 --- a/cmainwindow.ui +++ b/cmainwindow.ui @@ -14,87 +14,110 @@ qtSerien - + - - - Qt::Horizontal + + + 1 - - 0 - - - - - 1 - 0 - - - - Qt::CustomContextMenu - - - Qt::LeftToRight - - - Qt::ScrollBarAlwaysOff - - - Qt::ScrollBarAlwaysOn - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::ExtendedSelection - - - false - - - true - - - 37 - - - false + + + Series + + + + + + 1 + 0 + + + + Qt::CustomContextMenu + + + Qt::LeftToRight + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOn + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::ExtendedSelection + + + false + + + true + + + 37 + + + false + + + + + + + + 4 + 0 + + + + Qt::CustomContextMenu + + + Qt::ScrollBarAsNeeded + + + Qt::ScrollBarAlwaysOn + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::ExtendedSelection + + + false + + + true + + + + - - - - 4 - 0 - - - - Qt::CustomContextMenu - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOn - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::ExtendedSelection - - - false - - - true - + + + Movies + + + + + 260 + 170 + 256 + 192 + + + diff --git a/cmovie.cpp b/cmovie.cpp new file mode 100644 index 0000000..5462ffe --- /dev/null +++ b/cmovie.cpp @@ -0,0 +1,47 @@ +#include "cmovie.h" + + +cMovie::cMovie() +{ + +} + +void cMovie::setMovieTitle(const QString& szTitle) +{ + m_szMovieTitle = szTitle; +} + +QString cMovie::movieTitle() +{ + return(m_szMovieTitle); +} + +void cMovie::setMovieID(const qint32 iID) +{ + m_iID = iID; +} + +qint32 cMovie::movieID() +{ + return(m_iID); +} + +void cMovie::setOriginalTitle(const QString& szOriginalTitle) +{ + m_szOriginalTitle = szOriginalTitle; +} + +QString cMovie::originalTitle() +{ + return(m_szOriginalTitle); +} + +void cMovie::setReleaseDate(const QString& szDate) +{ + m_releaseDate = QDate::fromString(szDate, "yyyy-MM-dd"); +} + +QDate cMovie::releaseDate() +{ + return(m_releaseDate); +} diff --git a/cmovie.h b/cmovie.h new file mode 100644 index 0000000..08e5a2a --- /dev/null +++ b/cmovie.h @@ -0,0 +1,42 @@ +#ifndef CMOVIE_H +#define CMOVIE_H + + +#include +#include +#include + + +class cMovie +{ +public: + cMovie(); + + void setMovieTitle(const QString& szTitle); + QString movieTitle(); + + void setMovieID(const qint32 iID); + qint32 movieID(); + + void setOriginalTitle(const QString& szOriginalTitle); + QString originalTitle(); + + void setReleaseDate(const QString& szDate); + QDate releaseDate(); +private: + QString m_szMovieTitle; + qint32 m_iID; + QString m_szOriginalTitle; + QDate m_releaseDate; +}; + +Q_DECLARE_METATYPE(cMovie*) + +class cMovieList : public QList +{ +public: +// cMovie* add(const qint32& iID); +// cMovie* add(cMovie* lpMovie); +}; + +#endif // CMOVIE_H diff --git a/cthemoviedbv3.cpp b/cthemoviedbv3.cpp new file mode 100644 index 0000000..4779bc5 --- /dev/null +++ b/cthemoviedbv3.cpp @@ -0,0 +1,106 @@ +#include "cthemoviedbv3.h" + + +#include +#include +#include +#include +#include +#include +#include +#include + + +cTheMovieDBV3::cTheMovieDBV3() +{ + m_szToken = "a33271b9e54cdcb9a80680eaf5522f1b"; +/* + QNetworkAccessManager networkManager; + + QNetworkRequest request(QUrl(QString("https://api.themoviedb.org/3/authentication/token/new?api_key=a33271b9e54cdcb9a80680eaf5522f1b"))); + + 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(); + bool success = jsonObj["success"].toBool(); + m_szToken = jsonObj["request_token"].toString(); + + delete reply; + } + else + { + qDebug() << reply->errorString(); + delete reply; + } +*/ +} + +QList cTheMovieDBV3::search(const QString& szMovie, const qint16& year, const QString& szLanguage) +{ + QList movieList; + QNetworkAccessManager networkManager; + QString szRequest = QString("https://api.themoviedb.org/3/search/movie?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(szMovie)); + + 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 movie = jsonArray[z].toObject(); + cMovie* lpMovie = new cMovie; +// lpSerie->setID(serie["id"].toInt()); +// lpSerie->setSeriesName(serie["seriesName"].toString()); +// lpSerie->setFirstAired(serie["firstAired"].toString()); + lpMovie->setMovieTitle(movie["title"].toString()); + lpMovie->setMovieID(movie["id"].toInt()); + lpMovie->setOriginalTitle(movie["original_title"].toString()); + lpMovie->setReleaseDate(movie["release_date"].toString()); + movieList.append(lpMovie); + } + if(jsonObj["total_pages"].toInt() == page) + break; + + page++; + delete reply; + } + else + { + qDebug() << reply->errorString(); + delete reply; + } + } + return(movieList); +} diff --git a/cthemoviedbv3.h b/cthemoviedbv3.h new file mode 100644 index 0000000..892c6e8 --- /dev/null +++ b/cthemoviedbv3.h @@ -0,0 +1,26 @@ +#ifndef CTHEMOVIEDBV3_H +#define CTHEMOVIEDBV3_H + + +#include "cmovie.h" + +#include +#include +#include + + +class cTheMovieDBV3 +{ +public: + cTheMovieDBV3(); + + QList search(const QString& szMovie, const qint16& year = -1, const QString& szLanguage = "all"); +// cSerie* load(const qint32 &iID, const QString& szLanguage); +private: + QString m_szToken; +// QStringList getActors(const qint32& iID); +// void getEpisodes(cSerie* lpSerie, const QString& szLanguage); +// cEpisode* getEpisode(const qint32& iID, const QString& szLanguage); +}; + +#endif // CTHEMOVIEDBV3_H diff --git a/qtSeries.pro b/qtSeries.pro index 380a88d..48512fd 100644 --- a/qtSeries.pro +++ b/qtSeries.pro @@ -28,7 +28,9 @@ SOURCES += main.cpp\ cmessagedialog.cpp \ cupdatethread.cpp \ cpicturesthread.cpp \ - cthetvdbv2.cpp + cthetvdbv2.cpp \ + cthemoviedbv3.cpp \ + cmovie.cpp HEADERS += cmainwindow.h \ cserie.h \ @@ -45,7 +47,9 @@ HEADERS += cmainwindow.h \ cmessagedialog.h \ cupdatethread.h \ cpicturesthread.h \ - cthetvdbv2.h + cthetvdbv2.h \ + cthemoviedbv3.h \ + cmovie.h FORMS += cmainwindow.ui \ csearch.ui \