diff --git a/src/Utils.cpp b/src/Utils.cpp
index b92c6cce..8ad84e85 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -1,5 +1,6 @@
// SPDX-FileCopyrightText: 2021 Nheko Contributors
// SPDX-FileCopyrightText: 2022 Nheko Contributors
+// SPDX-FileCopyrightText: 2023 Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -45,16 +46,17 @@ createDescriptionInfo(const Event &event, const QString &localUser, const QStrin
const auto username = displayName;
const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts);
- auto body = utils::event_body(event).trimmed();
+ auto body = mtx::accessors::body(event);
if (mtx::accessors::relations(event).reply_to())
- body = QString::fromStdString(utils::stripReplyFromBody(body.toStdString()));
+ body = utils::stripReplyFromBody(body);
- return DescInfo{QString::fromStdString(msg.event_id),
- sender,
- utils::messageDescription<T>(username, body, sender == localUser),
- utils::descriptiveTime(ts),
- msg.origin_server_ts,
- ts};
+ return DescInfo{
+ QString::fromStdString(msg.event_id),
+ sender,
+ utils::messageDescription<T>(username, QString::fromStdString(body), sender == localUser),
+ utils::descriptiveTime(ts),
+ msg.origin_server_ts,
+ ts};
}
std::string
@@ -216,6 +218,7 @@ utils::getMessageDescription(const TimelineEvent &event,
using Notice = mtx::events::RoomEvent<mtx::events::msg::Notice>;
using Text = mtx::events::RoomEvent<mtx::events::msg::Text>;
using Video = mtx::events::RoomEvent<mtx::events::msg::Video>;
+ using Confetti = mtx::events::RoomEvent<mtx::events::msg::Confetti>;
using CallInvite = mtx::events::RoomEvent<mtx::events::voip::CallInvite>;
using CallAnswer = mtx::events::RoomEvent<mtx::events::voip::CallAnswer>;
using CallHangUp = mtx::events::RoomEvent<mtx::events::voip::CallHangUp>;
@@ -236,6 +239,8 @@ utils::getMessageDescription(const TimelineEvent &event,
return createDescriptionInfo<Text>(event, localUser, displayName);
} else if (std::holds_alternative<Video>(event)) {
return createDescriptionInfo<Video>(event, localUser, displayName);
+ } else if (std::holds_alternative<Confetti>(event)) {
+ return createDescriptionInfo<Confetti>(event, localUser, displayName);
} else if (std::holds_alternative<CallInvite>(event)) {
return createDescriptionInfo<CallInvite>(event, localUser, displayName);
} else if (std::holds_alternative<CallAnswer>(event)) {
@@ -324,28 +329,6 @@ utils::levenshtein_distance(const std::string &s1, const std::string &s2)
return *std::min_element(row1.begin(), row1.end());
}
-QString
-utils::event_body(const mtx::events::collections::TimelineEvents &e)
-{
- using namespace mtx::events;
- if (auto ev = std::get_if<RoomEvent<msg::Audio>>(&e); ev != nullptr)
- return QString::fromStdString(ev->content.body);
- if (auto ev = std::get_if<RoomEvent<msg::Emote>>(&e); ev != nullptr)
- return QString::fromStdString(ev->content.body);
- if (auto ev = std::get_if<RoomEvent<msg::File>>(&e); ev != nullptr)
- return QString::fromStdString(ev->content.body);
- if (auto ev = std::get_if<RoomEvent<msg::Image>>(&e); ev != nullptr)
- return QString::fromStdString(ev->content.body);
- if (auto ev = std::get_if<RoomEvent<msg::Notice>>(&e); ev != nullptr)
- return QString::fromStdString(ev->content.body);
- if (auto ev = std::get_if<RoomEvent<msg::Text>>(&e); ev != nullptr)
- return QString::fromStdString(ev->content.body);
- if (auto ev = std::get_if<RoomEvent<msg::Video>>(&e); ev != nullptr)
- return QString::fromStdString(ev->content.body);
-
- return QString();
-}
-
QPixmap
utils::scaleImageToPixmap(const QImage &img, int size)
{
@@ -354,8 +337,8 @@ utils::scaleImageToPixmap(const QImage &img, int size)
// Deprecated in 5.13: const double sz =
// std::ceil(QApplication::desktop()->screen()->devicePixelRatioF() * (double)size);
- const double sz =
- std::ceil(QGuiApplication::primaryScreen()->devicePixelRatio() * (double)size);
+ const int sz = static_cast<int>(
+ std::ceil(QGuiApplication::primaryScreen()->devicePixelRatio() * (double)size));
return QPixmap::fromImage(img.scaled(sz, sz, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
}
@@ -376,8 +359,8 @@ utils::scaleDown(uint64_t maxWidth, uint64_t maxHeight, const QPixmap &source)
w = source.width();
h = source.height();
} else {
- w = source.width() * minAspectRatio;
- h = source.height() * minAspectRatio;
+ w = static_cast<int>(static_cast<double>(source.width()) * minAspectRatio);
+ h = static_cast<int>(static_cast<double>(source.height()) * minAspectRatio);
}
return source.scaled(w, h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
@@ -452,7 +435,7 @@ utils::escapeBlacklistedHtml(const QString &rawStr)
const auto end = data.cend();
for (auto pos = data.cbegin(); pos < end;) {
auto tagStart = std::find(pos, end, '<');
- buffer.append(pos, tagStart - pos);
+ buffer.append(pos, static_cast<int>(tagStart - pos));
if (tagStart == end)
break;
@@ -460,14 +443,15 @@ utils::escapeBlacklistedHtml(const QString &rawStr)
const auto tagNameEnd =
std::find_first_of(tagNameStart, end, tagNameEnds.begin(), tagNameEnds.end());
- if (allowedTags.find(QByteArray(tagNameStart, tagNameEnd - tagNameStart).toLower()) ==
+ if (allowedTags.find(
+ QByteArray(tagNameStart, static_cast<int>(tagNameEnd - tagNameStart)).toLower()) ==
allowedTags.end()) {
// not allowed -> escape
buffer.append("<");
pos = tagNameStart;
continue;
} else {
- buffer.append(tagStart, tagNameEnd - tagStart);
+ buffer.append(tagStart, static_cast<int>(tagNameEnd - tagStart));
pos = tagNameEnd;
@@ -492,7 +476,8 @@ utils::escapeBlacklistedHtml(const QString &rawStr)
auto attrEnd = std::find_first_of(
attrStart, attrsEnd, attrNameEnds.begin(), attrNameEnds.end());
- auto attrName = QByteArray(attrStart, attrEnd - attrStart).toLower();
+ auto attrName =
+ QByteArray(attrStart, static_cast<int>(attrEnd - attrStart)).toLower();
auto sanitizeValue = [&attrName](QByteArray val) {
if (attrName == QByteArrayLiteral("src") && !val.startsWith("mxc://"))
@@ -520,8 +505,8 @@ utils::escapeBlacklistedHtml(const QString &rawStr)
if (valueEnd == attrsEnd)
break;
- auto val =
- sanitizeValue(QByteArray(attrStart, valueEnd - attrStart));
+ auto val = sanitizeValue(QByteArray(
+ attrStart, static_cast<int>(valueEnd - attrStart)));
attrStart = consumeSpaces(valueEnd + 1);
if (!val.isEmpty()) {
buffer.append(' ');
@@ -537,8 +522,8 @@ utils::escapeBlacklistedHtml(const QString &rawStr)
if (valueEnd == attrsEnd)
break;
- auto val =
- sanitizeValue(QByteArray(attrStart, valueEnd - attrStart));
+ auto val = sanitizeValue(QByteArray(
+ attrStart, static_cast<int>(valueEnd - attrStart)));
attrStart = consumeSpaces(valueEnd + 1);
if (!val.isEmpty()) {
buffer.append(' ');
@@ -553,9 +538,9 @@ utils::escapeBlacklistedHtml(const QString &rawStr)
attrsEnd,
attrValueEnds.begin(),
attrValueEnds.end());
- auto val =
- sanitizeValue(QByteArray(attrStart, valueEnd - attrStart));
- attrStart = consumeSpaces(valueEnd);
+ auto val = sanitizeValue(QByteArray(
+ attrStart, static_cast<int>(valueEnd - attrStart)));
+ attrStart = consumeSpaces(valueEnd);
if (val.contains('"'))
continue;
@@ -772,15 +757,15 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun
auto hash = hashQString(input);
// create a hue value based on the hash of the input.
// Adapted to make Nico blue
- auto userHue =
- static_cast<int>(static_cast<double>(hash - static_cast<uint32_t>(0x60'00'00'00)) /
- std::numeric_limits<uint32_t>::max() * 360.);
+ auto userHue = static_cast<double>(hash - static_cast<uint32_t>(0x60'00'00'00)) /
+ std::numeric_limits<uint32_t>::max() * 360.;
// start with moderate saturation and lightness values.
- auto sat = 230;
- auto lightness = 125;
+ auto sat = 230.;
+ auto lightness = 125.;
// converting to a QColor makes the luminance calc easier.
- QColor inputColor = QColor::fromHsl(userHue, sat, lightness);
+ QColor inputColor = QColor::fromHsl(
+ static_cast<int>(userHue), static_cast<int>(sat), static_cast<int>(lightness));
// calculate the initial luminance and contrast of the
// generated color. It's possible that no additional
@@ -798,7 +783,9 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun
if (lightness >= 242 || lightness <= 13) {
qreal newSat = qBound(26.0, sat * 1.25, 242.0);
- inputColor.setHsl(userHue, qFloor(newSat), lightness);
+ inputColor.setHsl(static_cast<int>(userHue),
+ static_cast<int>(qFloor(newSat)),
+ static_cast<int>(lightness));
auto tmpLum = luminance(inputColor);
auto higherContrast = computeContrast(tmpLum, backgroundLum);
if (higherContrast > contrast) {
@@ -806,7 +793,9 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun
sat = newSat;
} else {
newSat = qBound(26.0, sat / 1.25, 242.0);
- inputColor.setHsl(userHue, qFloor(newSat), lightness);
+ inputColor.setHsl(static_cast<int>(userHue),
+ static_cast<int>(qFloor(newSat)),
+ static_cast<int>(lightness));
tmpLum = luminance(inputColor);
auto lowerContrast = computeContrast(tmpLum, backgroundLum);
if (lowerContrast > contrast) {
@@ -817,7 +806,9 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun
} else {
qreal newLightness = qBound(13.0, lightness * 1.25, 242.0);
- inputColor.setHsl(userHue, sat, qFloor(newLightness));
+ inputColor.setHsl(static_cast<int>(userHue),
+ static_cast<int>(sat),
+ static_cast<int>(qFloor(newLightness)));
auto tmpLum = luminance(inputColor);
auto higherContrast = computeContrast(tmpLum, backgroundLum);
@@ -829,7 +820,9 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun
// otherwise, try going the other way instead.
} else {
newLightness = qBound(13.0, lightness / 1.25, 242.0);
- inputColor.setHsl(userHue, sat, qFloor(newLightness));
+ inputColor.setHsl(static_cast<int>(userHue),
+ static_cast<int>(sat),
+ static_cast<int>(qFloor(newLightness)));
tmpLum = luminance(inputColor);
auto lowerContrast = computeContrast(tmpLum, backgroundLum);
if (lowerContrast > contrast) {
@@ -888,8 +881,8 @@ utils::centerWidget(QWidget *widget, QWindow *parent)
}
auto findCenter = [childRect = widget->rect()](QRect hostRect) -> QPoint {
- return QPoint(hostRect.center().x() - (childRect.width() * 0.5),
- hostRect.center().y() - (childRect.height() * 0.5));
+ return QPoint(static_cast<int>(hostRect.center().x() - (childRect.width() * 0.5)),
+ static_cast<int>(hostRect.center().y() - (childRect.height() * 0.5)));
};
widget->move(findCenter(QGuiApplication::primaryScreen()->geometry()));
}
|