From 82763484844002a98e5a6a480024a38a10c832e6 Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Fri, 20 Oct 2017 11:46:47 +0200 Subject: [PATCH] . --- cedit.cpp | 1 - cedit.h | 6 +- cmainwindow.cpp | 190 +++++++++++++++++++++++---- cmainwindow.h | 8 ++ cmovie.cpp | 14 +- cmovieedit.cpp | 81 ++++++++++++ cmovieedit.h | 35 +++++ cmovieedit.ui | 257 +++++++++++++++++++++++++++++++++++++ cmovieimage.cpp | 64 +++++++++ cmovieimage.h | 17 +++ cmovieviewitemdelegate.cpp | 57 +++++++- qtMovies.pro | 11 +- 12 files changed, 703 insertions(+), 38 deletions(-) create mode 100644 cmovieedit.cpp create mode 100644 cmovieedit.h create mode 100644 cmovieedit.ui create mode 100644 cmovieimage.cpp create mode 100644 cmovieimage.h diff --git a/cedit.cpp b/cedit.cpp index 22976f7..6128f28 100644 --- a/cedit.cpp +++ b/cedit.cpp @@ -42,7 +42,6 @@ cEdit::cEdit(QWidget *parent) : m_lpAllProgress(0), m_lpAllDone(0), m_lpVerticalSpacer(0), -// m_lpButtonBox(0), m_lpSerie(0) { ui->setupUi(this); diff --git a/cedit.h b/cedit.h index 4dece49..3fd8017 100644 --- a/cedit.h +++ b/cedit.h @@ -5,7 +5,6 @@ #include "cserie.h" #include -//#include namespace Ui { @@ -33,9 +32,9 @@ private slots: void on_m_lpTabWidget_tabBarClicked(int index); - void on_m_lpCliffhanger_clicked(); + void on_m_lpCliffhanger_clicked(); - void on_m_lpFirstAired_dateChanged(const QDate &date); + void on_m_lpFirstAired_dateChanged(const QDate &date); private: Ui::cEdit* ui; @@ -59,7 +58,6 @@ private: QPushButton* m_lpAllDone; QSpacerItem* m_lpVerticalSpacer; -// QDialogButtonBox* m_lpButtonBox; cSerie* m_lpSerie; }; diff --git a/cmainwindow.cpp b/cmainwindow.cpp index a8ed8b0..338517b 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -10,6 +10,7 @@ #include "cmessageanimatedialog.h" #include "cmessagedialog.h" #include "cedit.h" +#include "cmovieedit.h" #include "cimage.h" #include "cthemoviedbv3.h" @@ -623,7 +624,7 @@ void cMainWindow::displayMovies() lpRoot = 0; else { - lpRoot = new QStandardItem(szOldCollection); + lpRoot = new QStandardItem(QString("%1").arg(szOldCollection)); m_lpMoviesListModel->appendRow(lpRoot); } } @@ -702,8 +703,42 @@ void cMainWindow::showMoviesContextMenu(QTreeView* lpTreeView, const QPoint &pos lpMenu->addAction("add", this, SLOT(onActionMovieAdd())); + lpMenu->addAction("update all", this, SLOT(onActionMovieUpdateAll())); + lpMenu->addSeparator(); + + if(lpTreeView->selectionModel()->selectedRows().count() == 1) + { + cMovie* lpMovie = m_lpMoviesListModel->itemFromIndex(lpTreeView->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value(); + if(lpMovie) + { + lpMenu->addAction("update", this, SLOT(onActionMovieUpdate())); + lpMenu->addAction("delete", this, SLOT(onActionMovieDelete())); + lpMenu->addAction("edit", this, SLOT(onActionMovieEdit())); + lpMenu->addSeparator(); + + if(!lpMovie->imdbID().isEmpty()) + lpMenu->addAction("open IMDB", this, SLOT(onActionMovieGotoIMDB())); + +// if(!lpMovie->download().isEmpty()) +// { +// lpMenu->addAction("open download link", this, SLOT(onActionMovieGotoDownload())); +// lpMenu->addAction("copy download link", this, SLOT(onActionMovieCopyDownload())); +// } + lpMenu->addSeparator(); + lpMenu->addAction("load images", this, SLOT(onActionMovieLoadPictures())); + } + } + else if(lpTreeView->selectionModel()->selectedRows().count()) + { + lpMenu->addAction("update selected", this, SLOT(onActionMovieUpdate())); + lpMenu->addAction("delete selected", this, SLOT(onActionMovieDelete())); + lpMenu->addSeparator(); + lpMenu->addAction("load images", this, SLOT(onActionLoadMoviePictures())); + } + lpMenu->popup(lpTreeView->viewport()->mapToGlobal(pos)); } + bool cMainWindow::runEdit(cSerie* lpSerie, QString& szDownload) { cEdit* lpEdit = new cEdit; @@ -775,6 +810,52 @@ bool cMainWindow::runEdit(cSerie* lpSerie, QString& szDownload) return(true); } +bool cMainWindow::runMovieEdit(cMovie *lpMovie) +{ + cMovieEdit* lpMovieEdit = new cMovieEdit(this); + + cMessageAnimateDialog* lpDialog = new cMessageAnimateDialog(this); + lpDialog->setTitle("Edit"); + lpDialog->setMessage("Loading"); + lpDialog->show(); + + lpMovieEdit->setMovie(lpMovie); + + QSettings settings; + qint16 iX = settings.value("movieEdit/x", QVariant::fromValue(-1)).toInt(); + qint16 iY = settings.value("movieEdit/y", QVariant::fromValue(-1)).toInt(); + qint16 iWidth = settings.value("movieEdit/width", QVariant::fromValue(-1)).toInt(); + qint16 iHeight = settings.value("movieEdit/height", QVariant::fromValue(-1)).toInt(); + + if(iX != -1 && iY != -1) + lpMovieEdit->move(iX, iY); + if(iWidth != -1 && iHeight != -1) + lpMovieEdit->resize(iWidth, iHeight); + + delete lpDialog; + + qint16 ret = lpMovieEdit->exec(); + + settings.setValue("movieEdit/width", QVariant::fromValue(lpMovieEdit->size().width())); + settings.setValue("movieEdit/height", QVariant::fromValue(lpMovieEdit->size().height())); + settings.setValue("movieEdit/x", QVariant::fromValue(lpMovieEdit->x())); + settings.setValue("movieEdit/y", QVariant::fromValue(lpMovieEdit->y())); + if(this->isMaximized()) + settings.setValue("movieEdit/maximized", QVariant::fromValue(true)); + else + settings.setValue("movieEdit/maximized", QVariant::fromValue(false)); + + if(ret == QDialog::Rejected) + { + delete lpMovieEdit; + return(false); + } + + delete lpMovieEdit; + + return(true); +} + void cMainWindow::onActionAdd() { cSearch* lpSearch = new cSearch(this); @@ -890,15 +971,7 @@ void cMainWindow::onActionMovieAdd() delete lpDialog; - lpDialog = new cMessageAnimateDialog(this); - lpDialog->setTitle("Update"); - lpDialog->setMessage("Updating"); - lpDialog->show(); - - lpMovie->save(m_db); -/* - QString szDownload; - if(!runEdit(lpSerie, szDownload)) + if(!runMovieEdit(lpMovie)) return; lpDialog = new cMessageAnimateDialog(this); @@ -906,18 +979,16 @@ void cMainWindow::onActionMovieAdd() lpDialog->setMessage("Updating"); lpDialog->show(); - lpSerie->save(m_db); -*/ + lpMovie->save(m_db); } else { -/* - lpSerie = new cSerie; - lpSerie->setSeriesName(szPlaceholder); + lpMovie = new cMovie; + lpMovie->setMovieTitle(szPlaceholder); qint32 iMax = 0; QSqlQuery query; - if(query.exec("SELECT MAX(id) FROM serie;")) + if(query.exec("SELECT MAX(movieID) FROM movie;")) { query.next(); if(query.isValid()) @@ -927,10 +998,9 @@ void cMainWindow::onActionMovieAdd() iMax = 1000000; else iMax++; - lpSerie->setID(iMax); - lpSerie->setFirstAired(QDate(iYear, 1, 1)); - lpSerie->save(m_db); -*/ + lpMovie->setMovieID(iMax); + lpMovie->setReleaseDate(QString("%1-01-01").arg(iYear)); + lpMovie->save(m_db); } loadMoviesDB(); @@ -947,6 +1017,10 @@ void cMainWindow::onActionUpdateAll() doUpdate(serieList); } +void cMainWindow::onActionMovieUpdateAll() +{ +} + void cMainWindow::onActionUpdateUnfinished() { cSerieList serieList; @@ -974,6 +1048,10 @@ void cMainWindow::onActionUpdate() doUpdate(serieList); } +void cMainWindow::onActionMovieUpdate() +{ +} + void cMainWindow::doUpdate(cSerieList& serieList) { if(serieList.count()) @@ -1045,6 +1123,28 @@ void cMainWindow::onActionDelete() delete lpDialog; } +void cMainWindow::onActionMovieDelete() +{ + if(QMessageBox::question(this, "Delete Movie", "Are you sure?") == QMessageBox::No) + return; + + cMovie* lpMovie = m_lpMoviesListModel->itemFromIndex(ui->m_lpMoviesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value(); + if(!lpMovie) + return; + + cMessageAnimateDialog* lpDialog = new cMessageAnimateDialog(this); + lpDialog->setTitle("Delete"); + lpDialog->setMessage("Deleting"); + lpDialog->show(); + + lpMovie->del(m_db); + + loadMoviesDB(); + displayMovies(); + + delete lpDialog; +} + void cMainWindow::onActionEdit() { cSerie* lpSerie = m_lpSeriesListModel->itemFromIndex(ui->m_lpSeriesList1->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value(); @@ -1067,23 +1167,52 @@ void cMainWindow::onActionEdit() lpSerie->save(m_db); m_szOldSelected = lpSerie->seriesName(); - loadDB(); + loadSeriesDB(); displaySeries(); delete lpDialog; } +void cMainWindow::onActionMovieEdit() +{ + cMovie* lpMovie = m_lpMoviesListModel->itemFromIndex(ui->m_lpMoviesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value(); + if(!lpMovie) + return; + + QString szDownload; + if(!runMovieEdit(lpMovie)) + return; + + cMessageAnimateDialog* lpDialog = new cMessageAnimateDialog(this); + lpDialog->setTitle("Update"); + lpDialog->setMessage("Updating"); + lpDialog->show(); + + lpMovie->del(m_db); + lpMovie->save(m_db); + + m_szOldSelected = lpMovie->movieTitle(); + loadMoviesDB(); + displayMovies(); + + delete lpDialog; +} + void cMainWindow::on_m_lpSeriesList1_doubleClicked(const QModelIndex &/*index*/) { onActionEdit(); } - void cMainWindow::on_m_lpSeriesList2_doubleClicked(const QModelIndex &/*index*/) { onActionEdit(); } +void cMainWindow::on_m_lpMoviesList_doubleClicked(const QModelIndex &index) +{ + onActionMovieEdit(); +} + void cMainWindow::onActionGotoIMDB() { if(ui->m_lpSeriesList1->selectionModel()->selectedRows().count()) @@ -1097,6 +1226,19 @@ void cMainWindow::onActionGotoIMDB() } } +void cMainWindow::onActionMovieGotoIMDB() +{ + if(ui->m_lpMoviesList->selectionModel()->selectedRows().count()) + { + cMovie* lpMovie = m_lpMoviesListModel->itemFromIndex(ui->m_lpMoviesList->selectionModel()->selectedRows().at(0))->data(Qt::UserRole).value(); + if(lpMovie) + { + QString link = QString("http://www.imdb.com/title/%1").arg(lpMovie->imdbID()); + QDesktopServices::openUrl(QUrl(link)); + } + } +} + void cMainWindow::onActionGotoDownload() { if(ui->m_lpSeriesList1->selectionModel()->selectedRows().count()) @@ -1162,6 +1304,10 @@ void cMainWindow::onActionLoadPictures() m_lpPicturesThread->start(); } +void cMainWindow::onActionMovieLoadPictures() +{ +} + void cMainWindow::picturesMessage(const QString& szMessage, const qint32& iProgress) { m_lpMessageDialog->setMessage(szMessage); diff --git a/cmainwindow.h b/cmainwindow.h index 6acb1dc..17cdd1d 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -45,6 +45,7 @@ private slots: void on_m_lpSeriesList2_pressed(const QModelIndex &index); void on_m_lpMoviesList_customContextMenuRequested(const QPoint &pos); + void on_m_lpMoviesList_doubleClicked(const QModelIndex &index); void onActionAdd(); void onActionUpdateAll(); @@ -58,6 +59,12 @@ private slots: void onActionLoadPictures(); void onActionMovieAdd(); + void onActionMovieUpdateAll(); + void onActionMovieUpdate(); + void onActionMovieDelete(); + void onActionMovieEdit(); + void onActionMovieGotoIMDB(); + void onActionMovieLoadPictures(); void updateMessage(const QString& szMessage, const qint32 &iProgress); void updateAppendMessage(const QString& szMessage); @@ -101,6 +108,7 @@ private: void displayMovies(); bool runEdit(cSerie *lpSerie, QString& szDownload); + bool runMovieEdit(cMovie *lpMovie); void showSeriesContextMenu(QTreeView* lpTreeView, const QPoint &pos); void doUpdate(cSerieList& serieList); diff --git a/cmovie.cpp b/cmovie.cpp index bff2907..8d13bf1 100644 --- a/cmovie.cpp +++ b/cmovie.cpp @@ -10,9 +10,19 @@ #include -cMovie::cMovie() +cMovie::cMovie() : + m_szOverview(QString("")), + m_dPopularity(0.0), + m_szPosterPath(QString("")), + m_dRevenue(0.0), + m_iRuntime(0), + m_szStatus(QString("")), + m_szTagline(QString("")), + m_bVideo(false), + m_dVoteAverage(0.0), + m_iVoteCount(0), + m_iState(StateInit) { - } void cMovie::setMovieTitle(const QString& szTitle) diff --git a/cmovieedit.cpp b/cmovieedit.cpp new file mode 100644 index 0000000..4fe65ca --- /dev/null +++ b/cmovieedit.cpp @@ -0,0 +1,81 @@ +#include "cmovieedit.h" +#include "cmovieimage.h" + +#include "ui_cmovieedit.h" + + +cMovieEdit::cMovieEdit(QWidget *parent) : + QDialog(parent), + ui(new Ui::cMovieEdit), + m_lpMovie(0) +{ + ui->setupUi(this); +} + +cMovieEdit::~cMovieEdit() +{ + delete ui; +} + +void cMovieEdit::setMovie(cMovie *lpMovie) +{ + m_lpMovie = lpMovie; + + if(!lpMovie) + return; + + ui->m_lpName->setText(lpMovie->movieTitle()); + ui->m_lpFirstAired->setDate(lpMovie->releaseDate()); + + switch(lpMovie->state()) + { + case cMovie::StateInit: + ui->m_lpInit->setChecked(true); + break; + case cMovie::StateProgress: + ui->m_lpProgress->setChecked(true); + case cMovie::StateDone: + ui->m_lpDone->setChecked(true); + break; + } + + if(!m_lpMovie->backdropPath().isEmpty()) + { + cMovieImage image; + QPixmap banner = image.getImage(m_lpMovie->backdropPath()); + ui->m_lpDetailsBanner->setPixmap(banner); + } + + ui->m_lpDetailsOverview->setText(m_lpMovie->overview()); + + QTreeWidgetItem* lpItem; + for(int x = 0;x < m_lpMovie->cast().count();x++) + { + QStringList str = m_lpMovie->cast().at(x).split(","); + lpItem = new QTreeWidgetItem(ui->m_lpDetailsActors); + lpItem->setText(0, str.at(0)); + lpItem->setText(1, str.at(1)); + ui->m_lpDetailsActors->addTopLevelItem(lpItem); + } + for(int x = 0;x < m_lpMovie->genres().count();x++) + { + lpItem = new QTreeWidgetItem(ui->m_lpDetailsGenre); + lpItem->setText(0, m_lpMovie->genres().at(x)); + ui->m_lpDetailsGenre->addTopLevelItem(lpItem); + } +} + +void cMovieEdit::on_m_lpInit_clicked() +{ + m_lpMovie->setState(cMovie::StateInit); +} + +void cMovieEdit::on_m_lpProgress_clicked() +{ + m_lpMovie->setState(cMovie::StateProgress); +} + +void cMovieEdit::on_m_lpDone_clicked() +{ + m_lpMovie->setState(cMovie::StateDone); +} diff --git a/cmovieedit.h b/cmovieedit.h new file mode 100644 index 0000000..9cb6c32 --- /dev/null +++ b/cmovieedit.h @@ -0,0 +1,35 @@ +#ifndef CMOVIEEDIT_H +#define CMOVIEEDIT_H + + +#include "cmovie.h" + +#include + +namespace Ui { +class cMovieEdit; +} + +class cMovieEdit : public QDialog +{ + Q_OBJECT + +public: + explicit cMovieEdit(QWidget *parent = 0); + ~cMovieEdit(); + + void setMovie(cMovie* lpMovie); +private slots: + void on_m_lpInit_clicked(); + + void on_m_lpProgress_clicked(); + + void on_m_lpDone_clicked(); + +private: + Ui::cMovieEdit *ui; + + cMovie* m_lpMovie; +}; + +#endif // CMOVIEEDIT_H diff --git a/cmovieedit.ui b/cmovieedit.ui new file mode 100644 index 0000000..7e4c954 --- /dev/null +++ b/cmovieedit.ui @@ -0,0 +1,257 @@ + + + cMovieEdit + + + + 0 + 0 + 805 + 582 + + + + Dialog + + + + + + + + + + + + true + + + + + + + Year: + + + + + + + true + + + + + + + + + + + Initialized + + + + + + + in Progress + + + + + + + done + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 310 + 200 + + + + QFrame::Box + + + + + + Qt::AlignCenter + + + + + + + + + true + + + + + 0 + 0 + 785 + 310 + + + + + + + + + true + + + + + + + + + + + Actors + + + + + + + 2 + + + false + + + + 1 + + + + + 2 + + + + + + + + + + + + Genre + + + + + + + 2 + + + false + + + + 1 + + + + + 2 + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + cVerticalLabel + QLabel +
cverticallabel.h
+
+
+ + + + buttonBox + accepted() + cMovieEdit + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + cMovieEdit + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/cmovieimage.cpp b/cmovieimage.cpp new file mode 100644 index 0000000..e0c62e1 --- /dev/null +++ b/cmovieimage.cpp @@ -0,0 +1,64 @@ +#include "common.h" + +#include "cmovieimage.h" + +#include +#include +#include +#include +#include +#include +#include + + +cMovieImage::cMovieImage() +{ +} + +QPixmap cMovieImage::getImage(const QString& szFileName) +{ + QPixmap pixmap; + + QString szPath = rootPath() + QDir::separator() + "t" + QDir::separator() + "p" + QDir::separator() + "w300" + QDir::separator() + szFileName.right(szFileName.length()-1); + + if(szFileName.isEmpty()) + pixmap.load(rootPath() + QDir::separator() + QDir::separator() + "empty.jpg"); + else + pixmap.load(szPath); + + if(!pixmap.width()) + return(downloadFile(szFileName)); + + return(pixmap); +} + +QPixmap cMovieImage::downloadFile(const QString& szFileName) +{ + QPixmap pixmap; + + QString szPath = rootPath() + QDir::separator() + "t" + QDir::separator() + "p" + QDir::separator() + "w300" + QDir::separator() + szFileName.right(szFileName.length()-1); + QString szURL = "http://image.tmdb.org/t/p/w300" + szFileName; + + QNetworkAccessManager networkManager; + QUrl url(szURL); + QNetworkRequest request(url); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/xml"); + + QNetworkReply* reply = networkManager.get(request); + QEventLoop loop; + + QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); + loop.exec(); + + QByteArray szData = reply->readAll(); + delete reply; + + pixmap.loadFromData(szData); + + QDir dir(szPath); + QFileInfo fileInfo(szPath); + dir.mkpath(dir.filePath(fileInfo.absolutePath())); + pixmap.save(szPath); + + return(pixmap); +} diff --git a/cmovieimage.h b/cmovieimage.h new file mode 100644 index 0000000..f38fe52 --- /dev/null +++ b/cmovieimage.h @@ -0,0 +1,17 @@ +#ifndef CMOVIEIMAGE_H +#define CMOVIEIMAGE_H + + +#include + + +class cMovieImage +{ +public: + cMovieImage(); + QPixmap getImage(const QString& szFileName); +private: + QPixmap downloadFile(const QString& szFileName); +}; + +#endif // CMOVIEIMAGE_H diff --git a/cmovieviewitemdelegate.cpp b/cmovieviewitemdelegate.cpp index b27acbb..f83e3a8 100644 --- a/cmovieviewitemdelegate.cpp +++ b/cmovieviewitemdelegate.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include #define STATE_INIT Qt::gray @@ -39,10 +41,47 @@ void cMovieViewItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem if(!lpMovie) { - QItemModel* lpModel = (QItemModel*)index.model(); - aaaaa + int statusInit = 0; + int statusProg = 0; + int statusDone = 0; + + QStandardItemModel* lpModel = (QStandardItemModel*)index.model(); + QStandardItem* lpParent = lpModel->itemFromIndex(index); + if(lpParent) + { + int x = 0; + + QStandardItem* lpChild = lpParent->child(x); + while(lpChild) + { + cMovie* lpMovie1 = qvariant_cast(lpChild->data(Qt::UserRole)); + if(lpMovie1) + { + switch(lpMovie1->state()) + { + case cMovie::StateInit: + statusInit++; + break; + case cMovie::StateProgress: + statusProg++; + break; + case cMovie::StateDone: + statusDone++; + break; + } + } + x++; + lpChild = lpParent->child(x); + } + } + if(statusProg) + painter->setBrush(STATE_PROGRESS); + else if(statusInit) + painter->setBrush(STATE_INIT); + else + painter->setBrush(STATE_DONE); } - if(lpMovie) + else { oldBrush = painter->brush(); @@ -60,10 +99,16 @@ void cMovieViewItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem default: break; } - painter->drawRect(clip); - - painter->setBrush(oldBrush); } + QRect back = clip; + + back.setLeft(back.left()+2); + back.setRight(back.right()-2); + back.setTop(back.top()+4); + back.setBottom(back.bottom()-4); + + painter->drawRect(back); + painter->setBrush(oldBrush); QAbstractTextDocumentLayout::PaintContext ctx; // set text color to red for selected item diff --git a/qtMovies.pro b/qtMovies.pro index b123712..ed86535 100644 --- a/qtMovies.pro +++ b/qtMovies.pro @@ -33,7 +33,9 @@ SOURCES += main.cpp\ cmovie.cpp \ cmoviesearch.cpp \ cmovieviewitemdelegate.cpp \ - common.cpp + common.cpp \ + cmovieedit.cpp \ + cmovieimage.cpp HEADERS += cmainwindow.h \ cserie.h \ @@ -55,7 +57,9 @@ HEADERS += cmainwindow.h \ cmovie.h \ cmoviesearch.h \ cmovieviewitemdelegate.h \ - common.h + common.h \ + cmovieedit.h \ + cmovieimage.h FORMS += cmainwindow.ui \ csearch.ui \ @@ -64,7 +68,8 @@ FORMS += cmainwindow.ui \ cseasondetails.ui \ cepisodedetails.ui \ cmessagedialog.ui \ - cmoviesearch.ui + cmoviesearch.ui \ + cmovieedit.ui DISTFILES +=