added movie functions

This commit is contained in:
2017-08-01 20:56:54 +02:00
parent 2f8d6ec2cc
commit 8ed56ab8b3
8 changed files with 444 additions and 80 deletions
+111 -1
View File
@@ -9,6 +9,8 @@
#include "cedit.h"
#include "cimage.h"
#include "cthemoviedbv3.h"
#include <QTreeWidgetItem>
#include <QDir>
#include <QFile>
@@ -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();
+6
View File
@@ -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);
+100 -77
View File
@@ -14,87 +14,110 @@
<string>qtSerien</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QSplitter" name="m_lpSplitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<widget class="QTabWidget" name="m_lpMainTab">
<property name="currentIndex">
<number>1</number>
</property>
<property name="handleWidth">
<number>0</number>
</property>
<widget class="QTreeView" name="m_lpSeriesList1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
<attribute name="headerMinimumSectionSize">
<number>37</number>
</attribute>
<attribute name="headerStretchLastSection">
<bool>false</bool>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Series</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTreeView" name="m_lpSeriesList1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
<attribute name="headerMinimumSectionSize">
<number>37</number>
</attribute>
<attribute name="headerStretchLastSection">
<bool>false</bool>
</attribute>
</widget>
</item>
<item row="0" column="1">
<widget class="QTreeView" name="m_lpSeriesList2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>4</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QTreeView" name="m_lpSeriesList2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>4</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Movies</string>
</attribute>
<widget class="QTableWidget" name="tableWidget">
<property name="geometry">
<rect>
<x>260</x>
<y>170</y>
<width>256</width>
<height>192</height>
</rect>
</property>
</widget>
</widget>
</widget>
</item>
+47
View File
@@ -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);
}
+42
View File
@@ -0,0 +1,42 @@
#ifndef CMOVIE_H
#define CMOVIE_H
#include <QMetaType>
#include <QDate>
#include <QSqlDatabase>
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<cMovie*>
{
public:
// cMovie* add(const qint32& iID);
// cMovie* add(cMovie* lpMovie);
};
#endif // CMOVIE_H
+106
View File
@@ -0,0 +1,106 @@
#include "cthemoviedbv3.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QEventLoop>
#include <QByteArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
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<cMovie*> cTheMovieDBV3::search(const QString& szMovie, const qint16& year, const QString& szLanguage)
{
QList<cMovie*> 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);
}
+26
View File
@@ -0,0 +1,26 @@
#ifndef CTHEMOVIEDBV3_H
#define CTHEMOVIEDBV3_H
#include "cmovie.h"
#include <QString>
#include <QList>
#include <QStringList>
class cTheMovieDBV3
{
public:
cTheMovieDBV3();
QList<cMovie*> 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
+6 -2
View File
@@ -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 \