diff --git a/forms/accountpopupform.ui b/forms/accountpopupform.ui
index 8ce31e364..1e816a144 100644
--- a/forms/accountpopupform.ui
+++ b/forms/accountpopupform.ui
@@ -6,8 +6,8 @@
0
0
- 400
- 131
+ 317
+ 145
@@ -19,60 +19,72 @@
AccountPopup
+
+
+
- -
-
-
- Purge
-
-
-
-
-
- Views
+ Views:
-
- 420
+ Loading...
-
- Followers
+ Followers:
-
- 69
+ Loading...
-
- Account Age
+ Created at:
-
- 6 years
+ Loading...
+ -
+
+
+
+ 100
+ 100
+
+
+
+ Loading...
+
+
+ true
+
+
+
-
-
@@ -91,7 +103,7 @@
- USERNAME
+ Loading...
@@ -110,13 +122,6 @@
- -
-
-
- AVATAR
-
-
-
diff --git a/src/messages/messagebuilder.cpp b/src/messages/messagebuilder.cpp
index 03df558cc..ccf3b0453 100644
--- a/src/messages/messagebuilder.cpp
+++ b/src/messages/messagebuilder.cpp
@@ -10,7 +10,7 @@ MessageBuilder::MessageBuilder()
: _words()
{
_parseTime = std::chrono::system_clock::now();
- regex.setPattern("[[:ascii:]]*\\.[A-Z]+");
+ regex.setPattern("[[:ascii:]]*\\.[A-Z]+\/[[:ascii:]]+");
regex.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
}
diff --git a/src/widgets/accountpopup.cpp b/src/widgets/accountpopup.cpp
index ae38c5879..e792e7214 100644
--- a/src/widgets/accountpopup.cpp
+++ b/src/widgets/accountpopup.cpp
@@ -3,6 +3,12 @@
#include "ui_accountpopupform.h"
#include
+#include
+#include
+#include
+#include
+#include
+#include
namespace chatterino {
namespace widgets {
@@ -22,20 +28,119 @@ AccountPopupWidget::AccountPopupWidget(std::shared_ptr &channel)
connect(_ui->btnClose, &QPushButton::clicked, [=]() {
hide(); //
});
-
- connect(_ui->btnPurge, &QPushButton::clicked, [=]() {
- qDebug() << "xD: " << _channel->name;
- printf("Channel pointer in dialog: %p\n", _channel.get());
-
- //_channel->sendMessage(QString(".timeout %1 0").arg(_ui->lblUsername->text()));
- _channel->sendMessage("xD");
- });
}
void AccountPopupWidget::setName(const QString &name)
{
_ui->lblUsername->setText(name);
+ getUserId();
}
+void AccountPopupWidget::getUserId()
+{
+ QUrl nameUrl("https://api.twitch.tv/kraken/users?login=" + _ui->lblUsername->text());
+
+ QNetworkRequest req(nameUrl);
+ req.setRawHeader(QByteArray("Accept"),QByteArray("application/vnd.twitchtv.v5+json"));
+ req.setRawHeader(QByteArray("Client-ID"),QByteArray("7ue61iz46fz11y3cugd0l3tawb4taal"));
+
+ static auto manager = new QNetworkAccessManager();
+ auto *reply = manager->get(req);
+
+ QObject::connect(reply,&QNetworkReply::finished,this,[=]
+ {
+ if(reply->error() == QNetworkReply::NoError){
+ auto doc = QJsonDocument::fromJson(reply->readAll());
+ auto obj = doc.object();
+ auto array = obj.value("users").toArray();
+
+ userID = array.at(0).toObject().value("_id").toString();
+
+ getUserData();
+ }
+ });
+
+}
+
+void AccountPopupWidget::getUserData()
+{
+ QUrl idUrl("https://api.twitch.tv/kraken/channels/" + userID);
+
+ QNetworkRequest req(idUrl);
+ req.setRawHeader(QByteArray("Accept"),QByteArray("application/vnd.twitchtv.v5+json"));
+ req.setRawHeader(QByteArray("Client-ID"),QByteArray("7ue61iz46fz11y3cugd0l3tawb4taal"));
+
+ static auto manager = new QNetworkAccessManager();
+ auto *reply = manager->get(req);
+
+ QObject::connect(reply,&QNetworkReply::finished,this,[=]
+ {
+ if(reply->error() == QNetworkReply::NoError){
+ auto doc = QJsonDocument::fromJson(reply->readAll());
+ auto obj = doc.object();
+
+ _ui->lblFollowers->setText(QString::number(obj.value("followers").toInt()));
+ _ui->lblViews->setText(QString::number(obj.value("views").toInt()));
+ _ui->lblAccountAge->setText(obj.value("created_at").toString().section("T",0,0));
+
+ loadAvatar(QUrl(obj.value("logo").toString()));
+ }
+ else
+ {
+ _ui->lblFollowers->setText("ERROR");
+ _ui->lblViews->setText("ERROR");
+ _ui->lblAccountAge->setText("ERROR");
+ }
+ });
+}
+
+void AccountPopupWidget::loadAvatar(const QUrl &avatarUrl)
+{
+ if(!avatarMap.tryGet(userID,this->avatar))
+ {
+ if(!avatarUrl.isEmpty())
+ {
+ QNetworkRequest req(avatarUrl);
+ static auto manager = new QNetworkAccessManager();
+ auto *reply = manager->get(req);
+
+ QObject::connect(reply,&QNetworkReply::finished,this,[=]
+ {
+ if(reply->error() == QNetworkReply::NoError)
+ {
+ const auto data = reply->readAll();
+ this->avatar.loadFromData(data);
+ this->avatarMap.insert(userID,avatar);
+ _ui->lblAvatar->setPixmap(avatar);
+ }
+ else
+ {
+ _ui->lblAvatar->setText("ERROR");
+ }
+ });
+ }
+ else
+ {
+ _ui->lblAvatar->setText("No Avatar");
+ }
+ }
+ else
+ {
+ _ui->lblAvatar->setPixmap(this->avatar);
+ }
+}
+
+void AccountPopupWidget::focusOutEvent(QFocusEvent *event)
+{
+ hide();
+
+ _ui->lblFollowers->setText("Loading...");
+ _ui->lblViews->setText("Loading...");
+ _ui->lblAccountAge->setText("Loading...");
+ _ui->lblUsername->setText("Loading...");
+ _ui->lblAvatar->setText("Loading...");
+}
+
+
} // namespace widgets
} // namespace chatterino
diff --git a/src/widgets/accountpopup.hpp b/src/widgets/accountpopup.hpp
index b5f177107..07b77b166 100644
--- a/src/widgets/accountpopup.hpp
+++ b/src/widgets/accountpopup.hpp
@@ -1,4 +1,5 @@
#pragma once
+#include "concurrentmap.hpp"
#include
@@ -25,7 +26,19 @@ public:
private:
Ui::AccountPopup *_ui;
+ void getUserId();
+ void getUserData();
+ void loadAvatar(const QUrl &avatarUrl);
+
std::shared_ptr &_channel;
+
+ QString userID;
+ QPixmap avatar;
+
+ ConcurrentMap avatarMap;
+
+protected:
+ virtual void focusOutEvent(QFocusEvent *event) override;
};
} // namespace widgets
diff --git a/src/widgets/chatwidgetview.cpp b/src/widgets/chatwidgetview.cpp
index ce6cf8cb2..6c82c5977 100644
--- a/src/widgets/chatwidgetview.cpp
+++ b/src/widgets/chatwidgetview.cpp
@@ -383,7 +383,7 @@ void ChatWidgetView::mouseReleaseEvent(QMouseEvent *event)
switch (link.getType()) {
case messages::Link::UserInfo: {
- auto user = message->getMessage()->getUserName();
+ auto user = link.getValue();
this->userPopupWidget.setName(user);
this->userPopupWidget.move(event->screenPos().toPoint());
this->userPopupWidget.show();