mirror-chatterino2/src/widgets/dialogs/EmotePopup.cpp

170 lines
5.5 KiB
C++
Raw Normal View History

2018-06-26 14:09:39 +02:00
#include "EmotePopup.hpp"
2018-06-26 14:09:39 +02:00
#include "Application.hpp"
#include "controllers/accounts/AccountController.hpp"
#include "messages/MessageBuilder.hpp"
#include "providers/twitch/TwitchChannel.hpp"
#include "widgets/Notebook.hpp"
#include <QHBoxLayout>
2018-05-23 13:54:42 +02:00
#include <QShortcut>
#include <QTabWidget>
2017-09-15 17:23:49 +02:00
namespace chatterino {
EmotePopup::EmotePopup()
2018-05-23 22:27:29 +02:00
: BaseWindow(nullptr, BaseWindow::EnableCustomFrame)
2017-09-15 17:23:49 +02:00
{
2018-07-06 19:23:47 +02:00
this->viewEmotes_ = new ChannelView();
this->viewEmojis_ = new ChannelView();
2018-07-06 19:23:47 +02:00
this->viewEmotes_->setOverrideFlags(MessageElement::Flags(
2018-08-06 21:17:03 +02:00
MessageElement::Default | MessageElement::AlwaysShow |
MessageElement::EmoteImages));
2018-07-06 19:23:47 +02:00
this->viewEmojis_->setOverrideFlags(MessageElement::Flags(
2018-08-06 21:17:03 +02:00
MessageElement::Default | MessageElement::AlwaysShow |
MessageElement::EmoteImages));
2018-01-27 21:13:22 +01:00
2018-07-06 19:23:47 +02:00
this->viewEmotes_->setEnableScrollingToBottom(false);
this->viewEmojis_->setEnableScrollingToBottom(false);
auto *layout = new QVBoxLayout(this);
this->getLayoutContainer()->setLayout(layout);
2017-12-19 03:18:00 +01:00
2018-05-23 11:59:37 +02:00
Notebook *notebook = new Notebook(this);
layout->addWidget(notebook);
layout->setMargin(0);
2018-07-06 19:23:47 +02:00
notebook->addPage(this->viewEmotes_, "Emotes");
notebook->addPage(this->viewEmojis_, "Emojis");
2017-12-19 03:18:00 +01:00
this->loadEmojis();
2018-01-24 20:58:53 +01:00
2018-07-06 19:23:47 +02:00
this->viewEmotes_->linkClicked.connect(
2018-01-24 20:58:53 +01:00
[this](const Link &link) { this->linkClicked.invoke(link); });
2018-07-06 19:23:47 +02:00
this->viewEmojis_->linkClicked.connect(
2018-01-24 20:58:53 +01:00
[this](const Link &link) { this->linkClicked.invoke(link); });
2017-09-15 17:23:49 +02:00
}
void EmotePopup::loadChannel(ChannelPtr _channel)
2017-09-15 17:23:49 +02:00
{
2018-08-02 14:23:27 +02:00
this->setWindowTitle("Emotes from " + _channel->getName());
2018-04-18 18:55:49 +02:00
TwitchChannel *channel = dynamic_cast<TwitchChannel *>(_channel.get());
if (channel == nullptr) {
return;
}
2018-07-06 17:30:12 +02:00
ChannelPtr emoteChannel(new Channel("", Channel::Type::None));
2018-08-06 21:17:03 +02:00
auto addEmotes = [&](const EmoteMap &map, const QString &title,
const QString &emoteDesc) {
// TITLE
MessageBuilder builder1;
2018-01-28 03:48:15 +01:00
builder1.append(new TextElement(title, MessageElement::Text));
2018-04-18 09:12:29 +02:00
builder1.getMessage()->flags |= Message::Centered;
emoteChannel->addMessage(builder1.getMessage());
// EMOTES
MessageBuilder builder2;
2018-04-18 09:12:29 +02:00
builder2.getMessage()->flags |= Message::Centered;
builder2.getMessage()->flags |= Message::DisableCompactEmotes;
2018-08-02 14:23:27 +02:00
for (auto emote : map) {
2018-08-06 21:17:03 +02:00
builder2.append(
(new EmoteElement(emote.second,
MessageElement::Flags::AlwaysShow))
->setLink(Link(Link::InsertText, emote.first.string)));
2018-08-02 14:23:27 +02:00
}
emoteChannel->addMessage(builder2.getMessage());
};
auto app = getApp();
2017-12-17 02:18:13 +01:00
2018-08-06 21:17:03 +02:00
// fourtf: the entire emote manager needs to be refactored so there's no
// point in trying to fix this pile of garbage
for (const auto &set :
app->accounts->twitch.getCurrent()->accessEmotes()->emoteSets) {
2018-05-31 16:20:46 +02:00
// TITLE
MessageBuilder builder1;
2018-05-31 16:20:46 +02:00
QString setText;
if (set->text.isEmpty()) {
if (set->channelName.isEmpty()) {
setText = "Twitch Account Emotes";
} else {
setText = "Twitch Account Emotes (" + set->channelName + ")";
}
} else {
setText = set->text;
}
builder1.append(new TextElement(setText, MessageElement::Text));
2018-05-31 16:20:46 +02:00
builder1.getMessage()->flags |= Message::Centered;
emoteChannel->addMessage(builder1.getMessage());
// EMOTES
MessageBuilder builder2;
2018-05-31 16:20:46 +02:00
builder2.getMessage()->flags |= Message::Centered;
builder2.getMessage()->flags |= Message::DisableCompactEmotes;
for (const auto &emote : set->emotes) {
2018-08-02 14:23:27 +02:00
builder2.append(
2018-08-06 21:17:03 +02:00
(new EmoteElement(
app->emotes->twitch.getOrCreateEmote(emote.id, emote.name),
MessageElement::Flags::AlwaysShow))
2018-08-02 14:23:27 +02:00
->setLink(Link(Link::InsertText, emote.name.string)));
2018-05-31 16:20:46 +02:00
}
emoteChannel->addMessage(builder2.getMessage());
}
2018-08-06 21:17:03 +02:00
addEmotes(*app->emotes->bttv.accessGlobalEmotes(),
"BetterTTV Global Emotes", "BetterTTV Global Emote");
addEmotes(*channel->accessBttvEmotes(), "BetterTTV Channel Emotes",
"BetterTTV Channel Emote");
// addEmotes(*app->emotes->ffz.accessGlobalEmotes(), "FrankerFaceZ Global
// Emotes",
2018-08-02 14:23:27 +02:00
// "FrankerFaceZ Global Emote");
addEmotes(*channel->accessFfzEmotes(), "FrankerFaceZ Channel Emotes",
"FrankerFaceZ Channel Emote");
2017-09-15 17:23:49 +02:00
2018-07-06 19:23:47 +02:00
this->viewEmotes_->setChannel(emoteChannel);
2017-12-19 03:18:00 +01:00
}
void EmotePopup::loadEmojis()
{
2018-06-05 18:53:49 +02:00
auto &emojis = getApp()->emotes->emojis.emojis;
2017-12-19 03:18:00 +01:00
2018-07-06 17:30:12 +02:00
ChannelPtr emojiChannel(new Channel("", Channel::Type::None));
2017-12-19 03:18:00 +01:00
// title
MessageBuilder builder1;
2017-12-19 03:18:00 +01:00
2018-01-28 03:48:15 +01:00
builder1.append(new TextElement("emojis", MessageElement::Text));
2018-04-18 09:12:29 +02:00
builder1.getMessage()->flags |= Message::Centered;
2017-12-19 03:18:00 +01:00
emojiChannel->addMessage(builder1.getMessage());
// emojis
MessageBuilder builder;
2018-04-18 09:12:29 +02:00
builder.getMessage()->flags |= Message::Centered;
builder.getMessage()->flags |= Message::DisableCompactEmotes;
2018-08-02 14:23:27 +02:00
emojis.each([&builder](const auto &key, const auto &value) {
builder.append(
2018-08-02 14:23:27 +02:00
(new EmoteElement(value->emote, MessageElement::Flags::AlwaysShow))
2018-08-06 21:17:03 +02:00
->setLink(Link(Link::Type::InsertText,
":" + value->shortCodes[0] + ":")));
});
2017-12-19 03:18:00 +01:00
emojiChannel->addMessage(builder.getMessage());
2018-07-06 19:23:47 +02:00
this->viewEmojis_->setChannel(emojiChannel);
2017-09-15 17:23:49 +02:00
}
2017-12-17 02:10:35 +01:00
} // namespace chatterino