From b232437ce870f10605a63b4aa0b43d0195fc92f0 Mon Sep 17 00:00:00 2001 From: irascibl Date: Mon, 2 Dec 2013 08:57:42 +0100 Subject: [PATCH] fixed missing blog images --- src/sketch/welcomeview.cpp | 30 +++++++++++++++++++++--------- src/sketch/welcomeview.h | 2 ++ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/sketch/welcomeview.cpp b/src/sketch/welcomeview.cpp index c7e8e1f00..7fc9ac61b 100644 --- a/src/sketch/welcomeview.cpp +++ b/src/sketch/welcomeview.cpp @@ -217,6 +217,7 @@ WelcomeView::WelcomeView(QWidget * parent) : QFrame(parent) connect(this, SIGNAL(openSketch()), this->window(), SLOT(mainLoad())); connect(this, SIGNAL(recentSketch(const QString &, const QString &)), this->window(), SLOT(openRecentOrExampleFile(const QString &, const QString &))); + // TODO: blog network calls should only happen once, not for each window? QNetworkAccessManager * manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(gotBlogSnippet(QNetworkReply *))); manager->get(QNetworkRequest(QUrl("http://blog.fritzing.org/recent-posts-app/"))); @@ -711,9 +712,9 @@ We thought we should delight our readers a little by showing some dainties of cr void WelcomeView::readBlog(const QDomDocument & doc) { m_blogListWidget->clear(); + m_blogImageRequestList.clear(); QDomNodeList nodeList = doc.elementsByTagName("li"); - int ix = 0; for (int i = 0; i < nodeList.count(); i++) { QDomElement element = nodeList.at(i).toElement(); QDomElement child = element.firstChildElement(); @@ -746,13 +747,7 @@ void WelcomeView::readBlog(const QDomDocument & doc) { item->setData(IntroRole, text); m_blogListWidget->addItem(item); - if (!stuff.value("img", "").isEmpty()) { - QNetworkAccessManager * manager = new QNetworkAccessManager(this); - manager->setProperty("index", ix); - connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(gotBlogImage(QNetworkReply *))); - manager->get(QNetworkRequest(QUrl(stuff.value("img")))); - } - + m_blogImageRequestList << stuff.value("img", ""); if (!stuff.value("date", "").isEmpty()) { item->setData(DateRole, stuff.value("date")); @@ -761,18 +756,34 @@ void WelcomeView::readBlog(const QDomDocument & doc) { item->setData(AuthorRole, stuff.value("author")); } } + + getNextBlogImage(0); + +} + +void WelcomeView::getNextBlogImage(int ix) { + for (int i = ix; i < m_blogImageRequestList.count(); i++) { + QString image = m_blogImageRequestList.at(i); + if (image.isEmpty()) continue; + + QNetworkAccessManager * manager = new QNetworkAccessManager(this); + manager->setProperty("index", i); + connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(gotBlogImage(QNetworkReply *))); + manager->get(QNetworkRequest(QUrl(image))); + } } void WelcomeView::gotBlogImage(QNetworkReply * networkReply) { QNetworkAccessManager * manager = networkReply->manager(); + int index = manager->property("index").toInt(); + int responseCode = networkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (responseCode == 200) { QByteArray data(networkReply->readAll()); QPixmap pixmap; if (pixmap.loadFromData(data)) { QPixmap scaled = pixmap.scaled(QSize(ImageSpace, ImageSpace), Qt::KeepAspectRatio); - int index = manager->property("index").toInt(); QListWidgetItem * item = m_blogListWidget->item(index); if (item) { item->setData(IconRole, scaled); @@ -782,6 +793,7 @@ void WelcomeView::gotBlogImage(QNetworkReply * networkReply) { manager->deleteLater(); networkReply->deleteLater(); + getNextBlogImage(index + 1); } QWidget * WelcomeView::initTip() { diff --git a/src/sketch/welcomeview.h b/src/sketch/welcomeview.h index 6510cf785..866471bfd 100644 --- a/src/sketch/welcomeview.h +++ b/src/sketch/welcomeview.h @@ -89,6 +89,7 @@ Q_OBJECT QWidget * initTip(); void readBlog(const QDomDocument &); QWidget * makeRecentItem(const QString & objectName, const QString & iconText, const QString & textText, QLabel * & icon, QLabel * & text); + void getNextBlogImage(int ix); signals: void newSketch(); @@ -112,6 +113,7 @@ protected slots: QFrame * m_fabFooterFrame; QFrame * m_shopContentFrame; QFrame * m_shopFooterFrame; + QStringList m_blogImageRequestList; }; class BlogListDelegate : public QAbstractItemDelegate