Changeset View
Changeset View
Standalone View
Standalone View
src/widgets/welcomewidget.cpp
Show All 27 Lines | |||||
28 | #include <QScrollArea> | 28 | #include <QScrollArea> | ||
29 | #include <QStyle> | 29 | #include <QStyle> | ||
30 | #include <QTimer> | 30 | #include <QTimer> | ||
31 | #include <QToolButton> | 31 | #include <QToolButton> | ||
32 | #include <QVBoxLayout> | 32 | #include <QVBoxLayout> | ||
33 | #include "welcomewidget.h" | 33 | #include "welcomewidget.h" | ||
34 | 34 | | |||
35 | #define POSTS_LIMIT 5 | 35 | #define POSTS_LIMIT 5 | ||
36 | 36 | QString WelcomeWidget::m_telegramLink = QStringLiteral(R"(<a href="http://t.me/KDEAtelier">)"); | |||
37 | WelcomeWidget::WelcomeWidget(QWidget *parent): QWidget(parent), m_newsFeedWidget(new QWidget) | 37 | QString WelcomeWidget::m_documentsLink = QStringLiteral(R"(<a href="http://atelier.kde.org/documentation/atelier">)"); | ||
38 | QString WelcomeWidget::m_linkClose = QStringLiteral("</a>"); | ||||
39 | | ||||
40 | WelcomeWidget::WelcomeWidget(QWidget *parent) | ||||
41 | : QWidget(parent) | ||||
42 | , m_newsFeedWidget(new QWidget(this)) | ||||
38 | { | 43 | { | ||
39 | QFont appFont = font(); | 44 | QFont appFont = font(); | ||
40 | 45 | | |||
41 | auto hlayout = new QHBoxLayout; | 46 | auto hlayout = new QHBoxLayout; | ||
42 | auto layout = new QVBoxLayout; | 47 | auto layout = new QVBoxLayout; | ||
43 | auto label = new QLabel; | 48 | auto label = new QLabel(this); | ||
44 | 49 | | |||
45 | label->setText(i18n("Welcome to Atelier!")); | 50 | label->setText(i18n("Welcome to Atelier!")); | ||
46 | appFont.setPointSize(font().pointSize() + 4); | 51 | appFont.setPointSize(font().pointSize() + 4); | ||
47 | label->setFont(appFont); | 52 | label->setFont(appFont); | ||
48 | hlayout->addWidget(label); | 53 | hlayout->addWidget(label); | ||
49 | 54 | | |||
50 | label = new QLabel; | 55 | label = new QLabel(this); | ||
51 | label->setPixmap(QPixmap(":/icon/logo")); | 56 | label->setPixmap(QPixmap(":/icon/logo")); | ||
52 | label->setLayoutDirection(Qt::LayoutDirection::RightToLeft); | 57 | label->setLayoutDirection(Qt::LayoutDirection::RightToLeft); | ||
53 | hlayout->addWidget(label); | 58 | hlayout->addWidget(label); | ||
54 | layout->addItem(hlayout); | 59 | layout->addItem(hlayout); | ||
55 | 60 | | |||
56 | auto line = new QFrame; | 61 | auto line = new QFrame(this); | ||
57 | line->setFrameShape(QFrame::HLine); | 62 | line->setFrameShape(QFrame::HLine); | ||
58 | layout->addWidget(line); | 63 | layout->addWidget(line); | ||
59 | 64 | | |||
60 | appFont.setPointSize(font().pointSize() + 2); | 65 | appFont.setPointSize(font().pointSize() + 2); | ||
61 | label = new QLabel(i18n("Quick Connect Guide")); | 66 | label = new QLabel(i18n("Quick Connect Guide"), this); | ||
62 | label->setFont(appFont); | 67 | label->setFont(appFont); | ||
63 | layout->addWidget(label); | 68 | layout->addWidget(label); | ||
64 | 69 | | |||
65 | for (const QString &sentence : { | 70 | for (const QString &sentence : { | ||
66 | i18n("1 - Create a Profile."), i18n("2 - Select the device."), i18n("3 - Select the profile and connect.") | 71 | i18n("1 - Create a Profile."), i18n("2 - Select the device."), i18n("3 - Select the profile and connect.") | ||
67 | }) { | 72 | }) { | ||
68 | label = new QLabel(sentence); | 73 | label = new QLabel(sentence, this); | ||
69 | layout->addWidget(label); | 74 | layout->addWidget(label); | ||
70 | } | 75 | } | ||
71 | 76 | | |||
72 | label = new QLabel(i18n("Having a connection problem?")); | 77 | label = new QLabel(i18n("Having a connection problem?"), this); | ||
73 | label->setFont(appFont); | 78 | label->setFont(appFont); | ||
74 | layout->addWidget(label); | 79 | layout->addWidget(label); | ||
75 | 80 | | |||
76 | label = new QLabel(i18n("See the info section of the Log for common problems.")); | 81 | label = new QLabel(i18n("See the info section of the Log for common problems."), this); | ||
77 | layout->addWidget(label); | 82 | layout->addWidget(label); | ||
78 | 83 | | |||
79 | label = new QLabel(i18n("Check our <a href=\"http://atelier.kde.org/documentation/atelier\">Atelier Docs</a> for more information.")); | 84 | label = new QLabel(i18n("Check our %1Atelier Docs%2 for more information.", m_documentsLink, m_linkClose), this); | ||
80 | label->setOpenExternalLinks(true); | 85 | label->setOpenExternalLinks(true); | ||
81 | layout->addWidget(label); | 86 | layout->addWidget(label); | ||
82 | 87 | | |||
83 | label = new QLabel(i18n("Check our last news!")); | 88 | label = new QLabel(i18n("Check our last news!"), this); | ||
84 | label->setFont(appFont); | 89 | label->setFont(appFont); | ||
85 | layout->addWidget(label); | 90 | layout->addWidget(label); | ||
86 | retrieveRssFeed(); | 91 | retrieveRssFeed(); | ||
87 | layout->addWidget(m_newsFeedWidget); | 92 | layout->addWidget(m_newsFeedWidget); | ||
88 | 93 | | |||
89 | label = new QLabel(i18n("Get Involved")); | 94 | label = new QLabel(i18n("Get Involved"), this); | ||
90 | label->setFont(appFont); | 95 | label->setFont(appFont); | ||
91 | layout->addWidget(label); | 96 | layout->addWidget(label); | ||
92 | 97 | | |||
93 | label = new QLabel(QString("<a href=\"http://t.me/KDEAtelier\">") + i18n("Join our Telegram Group!") + QString("</a>")); | 98 | label = new QLabel(i18n(" Join our %1Telegram Group%2!", m_telegramLink, m_linkClose), this); | ||
94 | label->setOpenExternalLinks(true); | 99 | label->setOpenExternalLinks(true); | ||
95 | layout->addWidget(label); | 100 | layout->addWidget(label); | ||
96 | 101 | | |||
97 | label = new QLabel(i18n("You can also find us on Freenode IRC #kde-atelier")); | 102 | label = new QLabel(i18n("You can also find us on Freenode IRC #kde-atelier"), this); | ||
98 | layout->addWidget(label); | 103 | layout->addWidget(label); | ||
99 | 104 | | |||
100 | layout->addStretch(); | 105 | layout->addStretch(); | ||
101 | 106 | | |||
102 | auto infoWidget = new QWidget(); | 107 | auto infoWidget = new QWidget(this); | ||
103 | infoWidget->setLayout(layout); | 108 | infoWidget->setLayout(layout); | ||
104 | 109 | | |||
105 | auto scrollArea = new QScrollArea(this); | 110 | auto scrollArea = new QScrollArea(this); | ||
106 | scrollArea->setWidget(infoWidget); | 111 | scrollArea->setWidget(infoWidget); | ||
107 | scrollArea->setWidgetResizable(true); | 112 | scrollArea->setWidgetResizable(true); | ||
108 | 113 | | |||
109 | layout = new QVBoxLayout; | 114 | layout = new QVBoxLayout; | ||
110 | layout->addWidget(scrollArea); | 115 | layout->addWidget(scrollArea); | ||
111 | setLayout(layout); | 116 | setLayout(layout); | ||
112 | } | 117 | } | ||
113 | 118 | | |||
114 | WelcomeWidget::~WelcomeWidget() | | |||
115 | { | | |||
116 | | ||||
117 | } | | |||
118 | | ||||
119 | void WelcomeWidget::retrieveRssFeed() | 119 | void WelcomeWidget::retrieveRssFeed() | ||
120 | { | 120 | { | ||
121 | auto manager = new QNetworkAccessManager(); | 121 | auto manager = new QNetworkAccessManager(this); | ||
122 | for (const QUrl &url : { | 122 | for (const QUrl &url : { | ||
123 | QUrl("https://rizzitello.wordpress.com/category/atelier/feed/"), | 123 | QUrl("https://rizzitello.wordpress.com/category/atelier/feed/"), | ||
124 | QUrl("https://laysrodriguesdev.wordpress.com/category/atelier/feed/") | 124 | QUrl("https://laysrodriguesdev.wordpress.com/category/atelier/feed/") | ||
125 | }) { | 125 | }) { | ||
126 | QNetworkRequest request(url); | 126 | QNetworkRequest request(url); | ||
127 | request.setRawHeader("User-Agent", "Atelier 1.0"); | 127 | request.setRawHeader("User-Agent", "Atelier 1.0"); | ||
128 | manager->get(request); | 128 | manager->get(request); | ||
129 | connect(manager, &QNetworkAccessManager::finished, this, [&](QNetworkReply * reply) { | 129 | connect(manager, &QNetworkAccessManager::finished, this, [&](QNetworkReply * reply) { | ||
130 | if (reply->error()) { | 130 | if (reply->error()) { | ||
131 | return; | 131 | return; | ||
132 | } else { | 132 | } | ||
133 | QDomDocument document; | 133 | QDomDocument document; | ||
134 | if (document.setContent(reply->readAll())) { | 134 | if (document.setContent(reply->readAll())) { | ||
135 | parseRss(document); | 135 | parseRss(document); | ||
136 | } | 136 | } | ||
137 | } | | |||
138 | }); | 137 | }); | ||
139 | } | 138 | } | ||
140 | } | 139 | } | ||
141 | 140 | | |||
142 | void WelcomeWidget::parseRss(const QDomDocument &document) | 141 | void WelcomeWidget::parseRss(const QDomDocument &document) | ||
143 | { | 142 | { | ||
144 | auto itemList = document.elementsByTagName("item"); | 143 | auto itemList = document.elementsByTagName("item"); | ||
145 | QRegularExpression dateRegex("(?<date>\\d{2} \\w{3} \\d{4})"); | 144 | QRegularExpression dateRegex(QStringLiteral(R"((?<date>\d{2} \w{3} \d{4}))")); | ||
146 | 145 | | |||
147 | for (int i = 0; i < itemList.count(); ++i) { | 146 | for (int i = 0; i < itemList.count(); ++i) { | ||
148 | auto node = itemList.at(i); | 147 | auto node = itemList.at(i); | ||
149 | if (node.isElement()) { | 148 | if (node.isElement()) { | ||
150 | //Sample of date format Wed, 24 May 2017 13:46:07 +0000 | 149 | //Sample of date format Wed, 24 May 2017 13:46:07 +0000 | ||
151 | QString pDate = node.firstChildElement("pubDate").toElement().text(); | 150 | QString pDate = node.firstChildElement("pubDate").toElement().text(); | ||
152 | QRegularExpressionMatch match = dateRegex.match(pDate); | 151 | QRegularExpressionMatch match = dateRegex.match(pDate); | ||
153 | if (match.hasMatch()) { | 152 | if (match.hasMatch()) { | ||
▲ Show 20 Lines • Show All 54 Lines • Show Last 20 Lines |