mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-26 11:13:18 +02:00
Improve escaping of some data in HTML export.
This commit is contained in:
parent
4e5c81dac2
commit
eb11185de7
1 changed files with 17 additions and 54 deletions
|
@ -151,6 +151,7 @@ QByteArray SerializeList(const std::vector<QByteArray> &values) {
|
||||||
}
|
}
|
||||||
return QByteArray();
|
return QByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray MakeLinks(const QByteArray &value) {
|
QByteArray MakeLinks(const QByteArray &value) {
|
||||||
const auto domain = QByteArray("https://telegram.org/");
|
const auto domain = QByteArray("https://telegram.org/");
|
||||||
auto result = QByteArray();
|
auto result = QByteArray();
|
||||||
|
@ -190,27 +191,6 @@ QByteArray MakeLinks(const QByteArray &value) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializeMultiline(
|
|
||||||
QByteArray &appendTo,
|
|
||||||
const QByteArray &value,
|
|
||||||
int newline) {
|
|
||||||
const auto data = value.data();
|
|
||||||
auto offset = 0;
|
|
||||||
do {
|
|
||||||
appendTo.append("> ");
|
|
||||||
const auto win = (newline > 0 && *(data + newline - 1) == '\r');
|
|
||||||
if (win) --newline;
|
|
||||||
appendTo.append(data + offset, newline - offset).append(kLineBreak);
|
|
||||||
if (win) ++newline;
|
|
||||||
offset = newline + 1;
|
|
||||||
newline = value.indexOf('\n', offset);
|
|
||||||
} while (newline > 0);
|
|
||||||
if (const auto size = value.size(); size > offset) {
|
|
||||||
appendTo.append("> ");
|
|
||||||
appendTo.append(data + offset, size - offset).append(kLineBreak);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray JoinList(
|
QByteArray JoinList(
|
||||||
const QByteArray &separator,
|
const QByteArray &separator,
|
||||||
const std::vector<QByteArray> &list) {
|
const std::vector<QByteArray> &list) {
|
||||||
|
@ -294,31 +274,6 @@ QByteArray FormatText(
|
||||||
}) | ranges::to_vector);
|
}) | ranges::to_vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SerializeKeyValue(
|
|
||||||
std::vector<std::pair<QByteArray, QByteArray>> &&values) {
|
|
||||||
auto result = QByteArray();
|
|
||||||
for (const auto &[key, value] : values) {
|
|
||||||
if (value.isEmpty()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
result.append(key);
|
|
||||||
if (const auto newline = value.indexOf('\n'); newline >= 0) {
|
|
||||||
result.append(':').append(kLineBreak);
|
|
||||||
SerializeMultiline(result, value, newline);
|
|
||||||
} else {
|
|
||||||
result.append(": ").append(value).append(kLineBreak);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray SerializeBlockquote(
|
|
||||||
std::vector<std::pair<QByteArray, QByteArray>> &&values) {
|
|
||||||
return "<blockquote>"
|
|
||||||
+ SerializeKeyValue(std::move(values))
|
|
||||||
+ "</blockquote>";
|
|
||||||
}
|
|
||||||
|
|
||||||
Data::Utf8String FormatUsername(const Data::Utf8String &username) {
|
Data::Utf8String FormatUsername(const Data::Utf8String &username) {
|
||||||
return username.isEmpty() ? username : ('@' + username);
|
return username.isEmpty() ? username : ('@' + username);
|
||||||
}
|
}
|
||||||
|
@ -766,7 +721,9 @@ QByteArray HtmlWriter::Wrap::pushUserpic(const UserpicData &userpic) {
|
||||||
"line-height: " + size));
|
"line-height: " + size));
|
||||||
auto character = [](const QByteArray &from) {
|
auto character = [](const QByteArray &from) {
|
||||||
const auto utf = QString::fromUtf8(from).trimmed();
|
const auto utf = QString::fromUtf8(from).trimmed();
|
||||||
return utf.isEmpty() ? QByteArray() : utf.mid(0, 1).toUtf8();
|
return utf.isEmpty()
|
||||||
|
? QByteArray()
|
||||||
|
: SerializeString(utf.mid(0, 1).toUtf8());
|
||||||
};
|
};
|
||||||
result.append(character(userpic.firstName));
|
result.append(character(userpic.firstName));
|
||||||
result.append(character(userpic.lastName));
|
result.append(character(userpic.lastName));
|
||||||
|
@ -997,16 +954,20 @@ auto HtmlWriter::Wrap::pushMessage(
|
||||||
const auto serviceText = v::match(message.action.content, [&](
|
const auto serviceText = v::match(message.action.content, [&](
|
||||||
const ActionChatCreate &data) {
|
const ActionChatCreate &data) {
|
||||||
return serviceFrom
|
return serviceFrom
|
||||||
+ " created group «" + data.title + "»"
|
+ " created group «"
|
||||||
|
+ SerializeString(data.title)
|
||||||
|
+ "»"
|
||||||
+ (data.userIds.empty()
|
+ (data.userIds.empty()
|
||||||
? QByteArray()
|
? QByteArray()
|
||||||
: " with members " + peers.wrapUserNames(data.userIds));
|
: " with members " + peers.wrapUserNames(data.userIds));
|
||||||
}, [&](const ActionChatEditTitle &data) {
|
}, [&](const ActionChatEditTitle &data) {
|
||||||
return isChannel
|
return isChannel
|
||||||
? ("Channel title changed to «" + data.title + "»")
|
? ("Channel title changed to «"
|
||||||
|
+ SerializeString(data.title)
|
||||||
|
+ "»")
|
||||||
: (serviceFrom
|
: (serviceFrom
|
||||||
+ " changed group title to «"
|
+ " fchanged group title to «"
|
||||||
+ data.title
|
+ SerializeString(data.title)
|
||||||
+ "»");
|
+ "»");
|
||||||
}, [&](const ActionChatEditPhoto &data) {
|
}, [&](const ActionChatEditPhoto &data) {
|
||||||
return isChannel
|
return isChannel
|
||||||
|
@ -1029,14 +990,16 @@ auto HtmlWriter::Wrap::pushMessage(
|
||||||
+ " joined group by link from "
|
+ " joined group by link from "
|
||||||
+ peers.wrapUserName(data.inviterId);
|
+ peers.wrapUserName(data.inviterId);
|
||||||
}, [&](const ActionChannelCreate &data) {
|
}, [&](const ActionChannelCreate &data) {
|
||||||
return "Channel «" + data.title + "» created";
|
return "Channel «"
|
||||||
|
+ SerializeString(data.title)
|
||||||
|
+ "» created";
|
||||||
}, [&](const ActionChatMigrateTo &data) {
|
}, [&](const ActionChatMigrateTo &data) {
|
||||||
return serviceFrom
|
return serviceFrom
|
||||||
+ " converted this group to a supergroup";
|
+ " converted this group to a supergroup";
|
||||||
}, [&](const ActionChannelMigrateFrom &data) {
|
}, [&](const ActionChannelMigrateFrom &data) {
|
||||||
return serviceFrom
|
return serviceFrom
|
||||||
+ " converted a basic group to this supergroup "
|
+ " converted a basic group to this supergroup "
|
||||||
+ "«" + data.title + "»";
|
+ "«" + SerializeString(data.title) + "»";
|
||||||
}, [&](const ActionPinMessage &data) {
|
}, [&](const ActionPinMessage &data) {
|
||||||
return serviceFrom
|
return serviceFrom
|
||||||
+ " pinned "
|
+ " pinned "
|
||||||
|
@ -1062,7 +1025,7 @@ auto HtmlWriter::Wrap::pushMessage(
|
||||||
return data.message;
|
return data.message;
|
||||||
}, [&](const ActionBotAllowed &data) {
|
}, [&](const ActionBotAllowed &data) {
|
||||||
return "You allowed this bot to message you when you logged in on "
|
return "You allowed this bot to message you when you logged in on "
|
||||||
+ data.domain;
|
+ SerializeString(data.domain);
|
||||||
}, [&](const ActionSecureValuesSent &data) {
|
}, [&](const ActionSecureValuesSent &data) {
|
||||||
auto list = std::vector<QByteArray>();
|
auto list = std::vector<QByteArray>();
|
||||||
for (const auto type : data.types) {
|
for (const auto type : data.types) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue