@@ -24,7 +24,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-14]
|
||||
qt-version: [6.7.1]
|
||||
qt-version: [6.4.3, 6.7.1]
|
||||
plugins: [true]
|
||||
fail-fast: false
|
||||
env:
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
- Dev: Fixed duplicate CMake configure in clean builds. (#5940)
|
||||
- Dev: BTTV emotes are now loaded as WEBP. (#5957)
|
||||
- Dev: Reduced time we wait for PubSub connections to cleanly exit from 1s to 100ms. (#6019)
|
||||
- Dev: Build with Qt 6.4.3 in CI. (#6032)
|
||||
- Dev: Refactored some settings styles/APIs. (#6023)
|
||||
- Dev: Added snapshot tests for EventSub. (#5965)
|
||||
- Dev: Updated crashpad. (#6026)
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <QString>
|
||||
#include <QStringBuilder>
|
||||
#include <twitch-eventsub-ws/string.hpp>
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr const char *MINI = "mini";
|
||||
constexpr const char *LONGEST_SSO = "mylongstringyesitslongwo";
|
||||
constexpr const char *TOO_LONG = "mylongstringyesitslongwow";
|
||||
|
||||
@@ -567,3 +569,18 @@ TEST(String, Equals)
|
||||
ASSERT_TRUE(reallyLong == String(REALLY_LONG));
|
||||
ASSERT_TRUE(reallyLongQt == String(REALLY_LONG));
|
||||
}
|
||||
|
||||
TEST(String, QStringBuilder)
|
||||
{
|
||||
String s(MINI);
|
||||
|
||||
ASSERT_EQ("foo" % s.qt() % "bar", "foominibar");
|
||||
ASSERT_EQ(u"foo" % s.qt() % "bar", "foominibar");
|
||||
ASSERT_EQ("foo" % s.qt() % u"bar", "foominibar");
|
||||
ASSERT_EQ(u"foo" % s.qt() % u"bar", "foominibar");
|
||||
|
||||
// the code below breaks on qt 6.4.3, but i think it's unrelated to our String stuff
|
||||
// auto text2 = u"a" % s.qt() % u"b";
|
||||
// QString messageText = text2;
|
||||
// QString searchText = text2;
|
||||
}
|
||||
|
||||
@@ -658,12 +658,12 @@ MessageBuilder::MessageBuilder(TimeoutMessageTag, const QString &timeoutUser,
|
||||
->setLink({Link::UserInfo, name});
|
||||
if (remainder.startsWith(' '))
|
||||
{
|
||||
remainder.removeFirst();
|
||||
removeFirstQS(remainder);
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(messageText.endsWith(' '));
|
||||
messageText.removeLast();
|
||||
removeLastQS(messageText);
|
||||
el->setTrailingSpace(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
#include "singletons/StreamerMode.hpp"
|
||||
#include "util/Helpers.hpp"
|
||||
|
||||
#include <QStringBuilder>
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace chatterino;
|
||||
@@ -35,8 +37,7 @@ void makeModeMessage(EventSubMessageBuilder &builder,
|
||||
builder.emplaceSystemTextAndUpdate(duration, text);
|
||||
}
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
QString stringifyAutomodReason(const lib::automod::AutomodReason &reason,
|
||||
@@ -174,6 +175,15 @@ void EventSubMessageBuilder::appendUser(const lib::String &userName,
|
||||
}
|
||||
}
|
||||
|
||||
void EventSubMessageBuilder::setMessageAndSearchText(const QString &text)
|
||||
{
|
||||
assert(this->message().messageText.isNull());
|
||||
assert(this->message().searchText.isNull());
|
||||
|
||||
this->message().messageText = text;
|
||||
this->message().searchText = text;
|
||||
}
|
||||
|
||||
void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
const lib::payload::channel_moderate::v2::Event &event,
|
||||
const lib::payload::channel_moderate::v2::Vip &action)
|
||||
@@ -185,8 +195,7 @@ void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
builder.appendUser(action.userName, action.userLogin, text);
|
||||
builder.emplaceSystemTextAndUpdate("as a VIP of this channel.", text);
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
void makeModerateMessage(
|
||||
@@ -201,8 +210,7 @@ void makeModerateMessage(
|
||||
builder.appendUser(action.userName, action.userLogin, text);
|
||||
builder.emplaceSystemTextAndUpdate("as a VIP of this channel.", text);
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
@@ -240,8 +248,7 @@ void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
builder.emplaceSystemTextAndUpdate(reasons.join(", "), text);
|
||||
}
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
@@ -272,8 +279,7 @@ void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
builder.emplaceSystemTextAndUpdate(action.reason.qt(), text);
|
||||
}
|
||||
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
builder->timeoutUser = action.userLogin.qt();
|
||||
}
|
||||
|
||||
@@ -298,8 +304,7 @@ void makeModerateMessage(
|
||||
|
||||
builder.emplaceSystemTextAndUpdate(".", text);
|
||||
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
builder->timeoutUser = action.userLogin.qt();
|
||||
}
|
||||
|
||||
@@ -325,8 +330,7 @@ void makeModerateMessage(
|
||||
|
||||
builder.emplaceSystemTextAndUpdate(".", text);
|
||||
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
builder->timeoutUser = action.userLogin.qt();
|
||||
}
|
||||
|
||||
@@ -372,8 +376,7 @@ void makeModerateMessage(
|
||||
text.append(action.messageBody.qt());
|
||||
}
|
||||
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
builder->timeoutUser = action.userLogin.qt();
|
||||
}
|
||||
|
||||
@@ -516,8 +519,7 @@ void makeModerateMessage(
|
||||
}
|
||||
builder.emplaceSystemTextAndUpdate(u"on AutoMod."_s, text);
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
@@ -531,8 +533,7 @@ void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
builder.appendUser(action.userName, action.userLogin, text, false);
|
||||
builder.emplaceSystemTextAndUpdate(u"."_s, text);
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
void makeModerateMessage(
|
||||
@@ -547,8 +548,7 @@ void makeModerateMessage(
|
||||
builder.appendUser(action.userName, action.userLogin, text, false);
|
||||
builder.emplaceSystemTextAndUpdate(u"."_s, text);
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
@@ -562,8 +562,7 @@ void makeModerateMessage(EventSubMessageBuilder &builder,
|
||||
builder.appendUser(action.userName, action.userLogin, text, false);
|
||||
builder.emplaceSystemTextAndUpdate(".", text);
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
void makeModerateMessage(
|
||||
@@ -578,8 +577,7 @@ void makeModerateMessage(
|
||||
builder.appendUser(action.userName, action.userLogin, text, false);
|
||||
builder.emplaceSystemTextAndUpdate(".", text);
|
||||
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
}
|
||||
|
||||
MessagePtr makeAutomodHoldMessageHeader(
|
||||
@@ -625,11 +623,10 @@ MessagePtr makeAutomodHoldMessageHeader(
|
||||
MessageColor(QColor(255, 0, 0)),
|
||||
FontStyle::ChatMediumBold)
|
||||
->setLink({Link::AutoModDeny, event.messageID.qt()});
|
||||
auto text = u"AutoMod: Held a message for reason: " % reason %
|
||||
u". Allow will post "
|
||||
"it in chat. Allow Deny";
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
|
||||
builder.setMessageAndSearchText(
|
||||
u"AutoMod: Held a message for reason: " % reason %
|
||||
u". Allow will post it in chat. Allow Deny");
|
||||
|
||||
return builder.release();
|
||||
}
|
||||
@@ -667,9 +664,9 @@ MessagePtr makeAutomodHoldMessageBody(
|
||||
// XXX: add the structured message here
|
||||
builder.emplace<TextElement>(event.message.text.qt(),
|
||||
MessageElementFlag::Text, MessageColor::Text);
|
||||
auto text = displayName % u": " % event.message.text.qt();
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
|
||||
builder.setMessageAndSearchText(displayName % u": " %
|
||||
event.message.text.qt());
|
||||
|
||||
return builder.release();
|
||||
}
|
||||
@@ -734,8 +731,8 @@ MessagePtr makeSuspiciousUserMessageHeader(
|
||||
|
||||
builder.emplace<TextElement>(headerMessage, MessageElementFlag::Text,
|
||||
MessageColor::Text);
|
||||
builder->messageText = prefix % u" " % headerMessage;
|
||||
builder->searchText = prefix % u" " % headerMessage;
|
||||
|
||||
builder.setMessageAndSearchText(prefix % u" " % headerMessage);
|
||||
|
||||
return builder.release();
|
||||
}
|
||||
@@ -776,9 +773,8 @@ MessagePtr makeSuspiciousUserMessageBody(
|
||||
builder.emplace<TextElement>(event.message.text.qt(),
|
||||
MessageElementFlag::Text, MessageColor::Text);
|
||||
|
||||
auto text = event.userName.qt() % u": " % event.message.text.qt();
|
||||
builder.message().messageText = text;
|
||||
builder.message().searchText = text;
|
||||
builder.setMessageAndSearchText(event.userName.qt() % u": " %
|
||||
event.message.text.qt());
|
||||
|
||||
return builder.release();
|
||||
}
|
||||
@@ -821,8 +817,7 @@ MessagePtr makeSuspiciousUserUpdate(
|
||||
break;
|
||||
}
|
||||
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
|
||||
return builder.release();
|
||||
}
|
||||
@@ -851,8 +846,7 @@ MessagePtr makeUserMessageHeldMessage(
|
||||
"Hey! Your message is being checked by mods and has not been sent.",
|
||||
MessageElementFlag::Text, MessageColor::Text);
|
||||
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
|
||||
return builder.release();
|
||||
}
|
||||
@@ -903,8 +897,7 @@ MessagePtr makeUserMessageUpdateMessage(
|
||||
break;
|
||||
}
|
||||
|
||||
builder->messageText = text;
|
||||
builder->searchText = text;
|
||||
builder.setMessageAndSearchText(text);
|
||||
|
||||
return builder.release();
|
||||
}
|
||||
|
||||
@@ -38,6 +38,8 @@ public:
|
||||
void appendUser(const lib::String &userName, const lib::String &userLogin,
|
||||
QString &text, bool trailingSpace = true);
|
||||
|
||||
void setMessageAndSearchText(const QString &text);
|
||||
|
||||
private:
|
||||
TwitchChannel *channel;
|
||||
};
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "singletons/Settings.hpp"
|
||||
#include "singletons/WindowManager.hpp"
|
||||
#include "util/FormatTime.hpp"
|
||||
#include "util/Helpers.hpp"
|
||||
#include "util/PostToThread.hpp"
|
||||
|
||||
namespace chatterino::eventsub {
|
||||
@@ -78,7 +79,7 @@ void handleModerateMessage(
|
||||
}
|
||||
|
||||
assert(text.endsWith(' '));
|
||||
text.removeLast(); // trailing space
|
||||
removeLastQS(text); // trailing space
|
||||
|
||||
if (action.reason.view().empty())
|
||||
{
|
||||
|
||||
@@ -368,4 +368,22 @@ QStringView codepointSlice(QStringView str, qsizetype begin, qsizetype end)
|
||||
return {sliceBegin, pos};
|
||||
}
|
||||
|
||||
void removeFirstQS(QString &str)
|
||||
{
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
||||
str.removeFirst();
|
||||
#else
|
||||
str.remove(0, 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
void removeLastQS(QString &str)
|
||||
{
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
||||
str.removeLast();
|
||||
#else
|
||||
str.chop(1);
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace chatterino
|
||||
|
||||
@@ -208,4 +208,14 @@ QDateTime chronoToQDateTime(std::chrono::system_clock::time_point time);
|
||||
/// @param end End index (exclusive, in codepoints)
|
||||
QStringView codepointSlice(QStringView str, qsizetype begin, qsizetype end);
|
||||
|
||||
/// Uses str.removeFirst if Qt >= 6.5, otherwise str.remove(0, 1)
|
||||
///
|
||||
/// @param str The Qt string we want to remove 1 character from
|
||||
void removeFirstQS(QString &str);
|
||||
|
||||
/// Uses str.removeLast if Qt >= 6.5, otherwise str.chop(1)
|
||||
///
|
||||
/// @param str The Qt string we want to remove 1 character from
|
||||
void removeLastQS(QString &str);
|
||||
|
||||
} // namespace chatterino
|
||||
|
||||
Reference in New Issue
Block a user