+++ /dev/null
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-
-#include "rssfetcher.h"
-#include "coreconstants.h"
-
-#include <QtCore/QDebug>
-#include <QtCore/QSysInfo>
-#include <QtCore/QLocale>
-#include <QtCore/QEventLoop>
-#include <QtCore/QUrl>
-#include <QtGui/QDesktopServices>
-#include <QtGui/QLineEdit>
-#include <QtNetwork/QNetworkReply>
-#include <QtNetwork/QNetworkRequest>
-#include <QtNetwork/QNetworkProxyFactory>
-#include <QtNetwork/QNetworkAccessManager>
-#include <QtNetwork/QNetworkConfiguration>
-
-#include <QtCore/QXmlStreamReader>
-
-#ifdef Q_OS_UNIX
-#include <sys/utsname.h>
-#endif
-
-namespace Core {
-
-static const QString getOsString()
-{
- QString osString;
-#if defined(Q_OS_WIN)
- switch (QSysInfo::WindowsVersion) {
- case (QSysInfo::WV_4_0):
- osString += QLatin1String("WinNT4.0");
- break;
- case (QSysInfo::WV_5_0):
- osString += QLatin1String("Windows NT 5.0");
- break;
- case (QSysInfo::WV_5_1):
- osString += QLatin1String("Windows NT 5.1");
- break;
- case (QSysInfo::WV_5_2):
- osString += QLatin1String("Windows NT 5.2");
- break;
- case (QSysInfo::WV_6_0):
- osString += QLatin1String("Windows NT 6.0");
- break;
- case (QSysInfo::WV_6_1):
- osString += QLatin1String("Windows NT 6.1");
- break;
- default:
- osString += QLatin1String("Windows NT (Unknown)");
- break;
- }
-#elif defined (Q_OS_MAC)
- if (QSysInfo::ByteOrder == QSysInfo::BigEndian)
- osString += QLatin1String("PPC ");
- else
- osString += QLatin1String("Intel ");
- osString += QLatin1String("Mac OS X ");
- switch (QSysInfo::MacintoshVersion) {
- case (QSysInfo::MV_10_3):
- osString += QLatin1String("10_3");
- break;
- case (QSysInfo::MV_10_4):
- osString += QLatin1String("10_4");
- break;
- case (QSysInfo::MV_10_5):
- osString += QLatin1String("10_5");
- break;
- case (QSysInfo::MV_10_6):
- osString += QLatin1String("10_6");
- break;
- default:
- osString += QLatin1String("(Unknown)");
- break;
- }
-#elif defined (Q_OS_UNIX)
- struct utsname uts;
- if (uname(&uts) == 0) {
- osString += QLatin1String(uts.sysname);
- osString += QLatin1Char(' ');
- osString += QLatin1String(uts.release);
- } else {
- osString += QLatin1String("Unix (Unknown)");
- }
-#else
- ossttring = QLatin1String("Unknown OS");
-#endif
- return osString;
-}
-
-RssFetcher::RssFetcher(int maxItems)
- : QThread(0), m_maxItems(maxItems), m_items(0),
- m_requestCount(0), m_networkAccessManager(0)
-{
- qRegisterMetaType<Core::RssItem>("Core::RssItem");
- moveToThread(this);
-}
-
-RssFetcher::~RssFetcher()
-{
-}
-
-void RssFetcher::run()
-{
- exec();
- delete m_networkAccessManager;
-}
-
-void RssFetcher::fetch(const QUrl &url)
-{
- QString agentStr = QString::fromLatin1("Qt-Creator/%1 (QHttp %2; %3; %4; %5 bit)")
- .arg(Core::Constants::IDE_VERSION_LONG).arg(qVersion())
- .arg(getOsString()).arg(QLocale::system().name())
- .arg(QSysInfo::WordSize);
- QNetworkRequest req(url);
- req.setRawHeader("User-Agent", agentStr.toLatin1());
- if (!m_networkAccessManager) {
- m_networkAccessManager = new QNetworkAccessManager;
- m_networkAccessManager->setConfiguration(QNetworkConfiguration());
- connect(m_networkAccessManager, SIGNAL(finished(QNetworkReply*)),
- SLOT(fetchingFinished(QNetworkReply*)));
- }
- m_requestCount++;
- m_networkAccessManager->get(req);
-}
-
-void RssFetcher::fetchingFinished(QNetworkReply *reply)
-{
- const bool error = (reply->error() != QNetworkReply::NoError);
- if (!error) {
- parseXml(reply);
- m_items = 0;
- }
- if (--m_requestCount == 0)
- emit finished(error);
- reply->deleteLater();
-}
-
-RssFetcher::TagElement RssFetcher::tagElement(const QStringRef &r, TagElement prev)
-{
- if (r == QLatin1String("item"))
- return itemElement;
- if (r == QLatin1String("title"))
- return titleElement;
- if (r == QLatin1String("category"))
- return categoryElement;
- if (r == QLatin1String("description"))
- return descriptionElement;
- if (r == QLatin1String("image"))
- return imageElement;
- if (r == QLatin1String("link")) {
- if (prev == imageElement)
- return imageLinkElement;
- else
- return linkElement;
- }
- return otherElement;
-}
-
-void RssFetcher::parseXml(QIODevice *device)
-{
- QXmlStreamReader xmlReader(device);
-
- TagElement currentTag = otherElement;
- RssItem item;
- while (!xmlReader.atEnd()) {
- switch (xmlReader.readNext()) {
- case QXmlStreamReader::StartElement:
- currentTag = tagElement(xmlReader.name(), currentTag);
- if (currentTag == itemElement) {
- item = RssItem();
- }
- break;
- case QXmlStreamReader::EndElement:
- if (xmlReader.name() == QLatin1String("item")) {
- m_items++;
- if ((uint)m_items > (uint)m_maxItems)
- return;
- emit newsItemReady(item.title, item.description, item.url);
- emit rssItemReady(item);
- }
- break;
- case QXmlStreamReader::Characters:
- if (!xmlReader.isWhitespace()) {
- switch (currentTag) {
- case titleElement:
- item.title += xmlReader.text().toString();
- break;
- case descriptionElement:
- item.description += xmlReader.text().toString();
- break;
- case categoryElement:
- item.category += xmlReader.text().toString();
- break;
- case linkElement:
- item.url += xmlReader.text().toString();
- break;
- case imageLinkElement:
- item.imagePath += xmlReader.text().toString();
- break;
- default:
- break;
- }
- } // !xmlReader.isWhitespace()
- break;
- default:
- break;
- }
- }
- if (xmlReader.error() && xmlReader.error() != QXmlStreamReader::PrematureEndOfDocumentError) {
- qWarning("Welcome::Internal::RSSFetcher: XML ERROR: %d: %s (%s)",
- int(xmlReader.lineNumber()),
- qPrintable(xmlReader.errorString()),
- qPrintable(item.title));
- }
-}
-
-} // namespace Core
+++ /dev/null
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-
-#ifndef RSSFETCHER_H
-#define RSSFETCHER_H
-
-#include "core_global.h"
-
-#include <QtCore/QThread>
-
-QT_BEGIN_NAMESPACE
-class QUrl;
-class QNetworkReply;
-class QNetworkAccessManager;
-class QIODevice;
-QT_END_NAMESPACE
-
-namespace Core {
-
-class CORE_EXPORT RssItem
-{
-public:
- QString title;
- QString description;
- QString category;
- QString url;
- QString imagePath;
-};
-
-class CORE_EXPORT RssFetcher : public QThread
-{
- Q_OBJECT
-public:
- explicit RssFetcher(int maxItems = -1);
- virtual void run();
- virtual ~RssFetcher();
-
-signals:
- void newsItemReady(const QString& title, const QString& desciption, const QString& url);
- void rssItemReady(const Core::RssItem& item);
- void finished(bool error);
-
-public slots:
- void fetchingFinished(QNetworkReply *reply);
- void fetch(const QUrl &url);
-
-private:
- enum TagElement { itemElement, titleElement, descriptionElement, linkElement,
- imageElement, imageLinkElement, categoryElement, otherElement };
- static TagElement tagElement(const QStringRef &, TagElement prev);
- void parseXml(QIODevice *);
-
- const int m_maxItems;
- int m_items;
- int m_requestCount;
-
- QNetworkAccessManager* m_networkAccessManager;
-};
-
-} // namespace Internal
-
-#endif // RSSFETCHER_H
-
+++ /dev/null
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-
-#include "communitywelcomepagewidget.h"
-#include "ui_communitywelcomepagewidget.h"
-
-#include <coreplugin/rssfetcher.h>
-
-#include <QtCore/QMap>
-#include <QtCore/QUrl>
-#include <QtGui/QDesktopServices>
-#include <QtGui/QTreeWidgetItem>
-
-struct Site {
- const char *description;
- const char *url;
-};
-
-static const Site supportSites[] = {
- { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
- "<b>Forum Nokia</b><br /><font color='gray'>Mobile application support</font>"),
- "http://www.forum.nokia.com/Support/"},
- { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
- "<b>Qt LGPL Support</b><br /><font color='gray'>Buy commercial Qt support</font>"),
- "http://shop.qt.nokia.com/en/support.html"},
- { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
- "<b>Qt DevNet</b><br /><font color='gray'>Qt Developer Resources</font>"),
- "http://developer.qt.nokia.com" }
-};
-
-static const Site sites[] = {
- { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
- "<b>Qt Home</b><br /><font color='gray'>Qt by Nokia on the web</font>"),
- "http://qt.nokia.com" },
- { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
- "<b>Qt Git Hosting</b><br /><font color='gray'>Participate in Qt development</font>"),
- "http://qt.gitorious.org"},
- { QT_TRANSLATE_NOOP("Welcome::Internal::CommunityWelcomePageWidget",
- "<b>Qt Apps</b><br /><font color='gray'>Find free Qt-based apps</font>"),
- "http://www.qt-apps.org"}
-};
-
-namespace Welcome {
-namespace Internal {
-
-static inline void populateWelcomeTreeWidget(const Site *sites, int count, Utils::WelcomeModeTreeWidget *wt)
-{
- for (int s = 0; s < count; s++) {
- const QString description = CommunityWelcomePageWidget::tr(sites[s].description);
- const QString url = QLatin1String(sites[s].url);
- wt->addItem(description, url, url);
- }
-}
-
-CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) :
- QWidget(parent),
- m_rssFetcher(new Core::RssFetcher(7)),
- ui(new Ui::CommunityWelcomePageWidget)
-{
- ui->setupUi(this);
-
- connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
- connect(ui->miscSitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
- connect(ui->supportSitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
-
- connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
- ui->newsTreeWidget, SLOT(addNewsItem(QString, QString, QString)), Qt::QueuedConnection);
- connect(this, SIGNAL(startRssFetching(QUrl)), m_rssFetcher, SLOT(fetch(QUrl)), Qt::QueuedConnection);
-
- m_rssFetcher->start(QThread::LowestPriority);
- //: Add localized feed here only if one exists
- emit startRssFetching(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
-
- populateWelcomeTreeWidget(supportSites, sizeof(supportSites)/sizeof(Site), ui->supportSitesTreeWidget);
- populateWelcomeTreeWidget(sites, sizeof(sites)/sizeof(Site), ui->miscSitesTreeWidget);
-}
-
-CommunityWelcomePageWidget::~CommunityWelcomePageWidget()
-{
- m_rssFetcher->exit();
- m_rssFetcher->wait();
- delete m_rssFetcher;
- delete ui;
-}
-
-void CommunityWelcomePageWidget::slotUrlClicked(const QString &data)
-{
- QDesktopServices::openUrl(QUrl(data));
-}
-
-} // namespace Internal
-} // namespace Welcome
+++ /dev/null
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (info@qt.nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at info@qt.nokia.com.
-**
-**************************************************************************/
-
-#ifndef COMMUNITYWELCOMEPAGEWIDGET_H
-#define COMMUNITYWELCOMEPAGEWIDGET_H
-
-#include <QtGui/QWidget>
-
-QT_BEGIN_NAMESPACE
-class QUrl;
-QT_END_NAMESPACE
-
-namespace Core{
-class RssFetcher;
-}
-
-namespace Welcome {
-namespace Internal {
-
-namespace Ui {
- class CommunityWelcomePageWidget;
-}
-
-class CommunityWelcomePageWidget : public QWidget
-{
- Q_OBJECT
-
-public:
- explicit CommunityWelcomePageWidget(QWidget *parent = 0);
- ~CommunityWelcomePageWidget();
-
-signals:
- void startRssFetching(const QUrl& url);
-
-private slots:
- void slotUrlClicked(const QString &data);
-
-
-private:
- Core::RssFetcher *m_rssFetcher;
- Ui::CommunityWelcomePageWidget *ui;
-};
-
-
-} // namespace Internal
-} // namespace Welcome
-#endif // COMMUNITYWELCOMEPAGEWIDGET_H