Implemented the accountpopup. Also fixed regex again. (#89)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
#include "ui_accountpopupform.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QNetworkReply>
|
||||
#include <QNetworkRequest>
|
||||
#include <QPixmap>
|
||||
|
||||
namespace chatterino {
|
||||
namespace widgets {
|
||||
@@ -22,20 +28,119 @@ AccountPopupWidget::AccountPopupWidget(std::shared_ptr<Channel> &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
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#pragma once
|
||||
#include "concurrentmap.hpp"
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
@@ -25,7 +26,19 @@ public:
|
||||
private:
|
||||
Ui::AccountPopup *_ui;
|
||||
|
||||
void getUserId();
|
||||
void getUserData();
|
||||
void loadAvatar(const QUrl &avatarUrl);
|
||||
|
||||
std::shared_ptr<Channel> &_channel;
|
||||
|
||||
QString userID;
|
||||
QPixmap avatar;
|
||||
|
||||
ConcurrentMap<QString,QPixmap> avatarMap;
|
||||
|
||||
protected:
|
||||
virtual void focusOutEvent(QFocusEvent *event) override;
|
||||
};
|
||||
|
||||
} // namespace widgets
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user