Refresh links of new messages.

As I understand links update when all message snapshots update, so we need to refresh url manually via signal.
This commit is contained in:
23rd 2018-09-06 17:11:25 +03:00
parent 2d1701cf86
commit 5f19a57f5a
3 changed files with 27 additions and 6 deletions

View file

@ -61,6 +61,12 @@ MessageElementFlags MessageElement::getFlags() const
return this->flags_;
}
MessageElement *MessageElement::updateLink()
{
this->linkChanged.invoke();
return this;
}
// IMAGE
ImageElement::ImageElement(ImagePtr image, MessageElementFlags flags)
: MessageElement(flags)
@ -152,6 +158,15 @@ void TextElement::addToContainer(MessageLayoutContainer &container,
color, this->style_, container.getScale()))
->setLink(this->getLink());
e->setTrailingSpace(trailingSpace);
// If URL link was changed,
// Should update it in MessageLayoutElement too!
if (this->getLink().type == Link::Url) {
this->linkChanged.connect(
[this, e]() {
e->setLink(this->getLink());
});
}
return e;
};

View file

@ -12,6 +12,7 @@
#include <cstdint>
#include <memory>
#include <vector>
#include <pajlada/signals/signalholder.hpp>
namespace chatterino {
class Channel;
@ -128,6 +129,7 @@ public:
const Link &getLink() const;
bool hasTrailingSpace() const;
MessageElementFlags getFlags() const;
MessageElement *updateLink();
virtual void addToContainer(MessageLayoutContainer &container,
MessageElementFlags flags) = 0;
@ -135,6 +137,7 @@ public:
protected:
MessageElement(MessageElementFlags flags);
bool trailingSpace = true;
pajlada::Signals::NoArgSignal linkChanged;
private:
Link link_;

View file

@ -280,13 +280,16 @@ void TwitchMessageBuilder::addTextOrEmoji(const QString &string_)
->setLink(link);
LinkResolver::getLinkInfo(
linkString, [linkMELowercase, linkMEOriginal](QString tooltipText,
Link originalLink) {
linkString, [linkMELowercase, linkMEOriginal, linkString]
(QString tooltipText, Link originalLink) {
if (!tooltipText.isEmpty()) {
linkMELowercase->setTooltip(tooltipText)
->setLink(originalLink);
linkMEOriginal->setTooltip(tooltipText)
->setLink(originalLink);
linkMELowercase->setTooltip(tooltipText);
linkMEOriginal->setTooltip(tooltipText);
}
if (originalLink.value != linkString &&
!originalLink.value.isEmpty()) {
linkMELowercase->setLink(originalLink)->updateLink();
linkMEOriginal->setLink(originalLink)->updateLink();
}
});
}