Strip auto-hashtag in support mode message editing.

This commit is contained in:
John Preston 2019-06-05 21:40:21 +03:00
parent 126ffc8769
commit 8c67a4b991
4 changed files with 45 additions and 16 deletions

View File

@ -75,11 +75,7 @@ EditCaptionBox::EditCaptionBox(
}
doc = document;
}
const auto original = item->originalText();
const auto editData = TextWithTags {
original.text,
ConvertEntitiesToTextTags(original.entities)
};
const auto editData = PrepareEditText(item);
if (!_animated && (dimensions.isEmpty() || doc || !image)) {
if (!image) {

View File

@ -8,6 +8,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "chat_helpers/message_field.h"
#include "history/history_widget.h"
#include "history/history.h" // History::session
#include "history/history_item.h" // HistoryItem::originalText
#include "base/qthelp_regex.h"
#include "base/qthelp_url.h"
#include "boxes/abstract_box.h"
@ -172,6 +174,34 @@ void EditLinkBox::prepare() {
};
}
TextWithEntities StripSupportHashtag(TextWithEntities &&text) {
static const auto expression = QRegularExpression(
qsl("\\n?#tsf[a-z0-9_-]*[\\s#a-z0-9_-]*$"),
QRegularExpression::CaseInsensitiveOption);
const auto match = expression.match(text.text);
if (!match.hasMatch()) {
return text;
}
text.text.chop(match.capturedLength());
const auto length = text.text.size();
if (!length) {
return TextWithEntities();
}
for (auto i = text.entities.begin(); i != text.entities.end();) {
auto &entity = *i;
if (entity.offset() >= length) {
i = text.entities.erase(i);
} else if (entity.offset() + entity.length() > length) {
entity.shrinkFromRight(length - entity.offset());
++i;
}
}
if (!text.text.isEmpty() && !text.text.endsWith('\n')) {
text.text.append('\n');
}
return text;
}
} // namespace
QString ConvertTagToMimeTag(const QString &tagId) {
@ -286,6 +316,16 @@ void SetClipboardText(
}
}
TextWithTags PrepareEditText(not_null<HistoryItem*> item) {
const auto original = item->history()->session().supportMode()
? StripSupportHashtag(item->originalText())
: item->originalText();
return TextWithTags{
original.text,
ConvertEntitiesToTextTags(original.entities)
};
}
Fn<bool(
Ui::InputField::EditLinkSelection selection,
QString text,

View File

@ -25,6 +25,7 @@ std::unique_ptr<QMimeData> MimeDataFromText(const TextForMimeData &text);
void SetClipboardText(
const TextForMimeData &text,
QClipboard::Mode mode = QClipboard::Clipboard);
TextWithTags PrepareEditText(not_null<HistoryItem*> item);
Fn<bool(
Ui::InputField::EditLinkSelection selection,

View File

@ -5879,11 +5879,7 @@ void HistoryWidget::editMessage(not_null<HistoryItem*> item) {
}
}
const auto original = item->originalText();
const auto editData = TextWithTags {
original.text,
ConvertEntitiesToTextTags(original.entities)
};
const auto editData = PrepareEditText(item);
const auto cursor = MessageCursor {
editData.text.size(),
editData.text.size(),
@ -6353,12 +6349,8 @@ void HistoryWidget::escape() {
} else if (_isInlineBot) {
onInlineBotCancel();
} else if (_editMsgId) {
auto original = _replyEditMsg ? _replyEditMsg->originalText() : TextWithEntities();
auto editData = TextWithTags{
original.text,
ConvertEntitiesToTextTags(original.entities)
};
if (_replyEditMsg && editData != _field->getTextWithTags()) {
if (_replyEditMsg
&& PrepareEditText(_replyEditMsg) != _field->getTextWithTags()) {
Ui::show(Box<ConfirmBox>(
lang(lng_cancel_edit_post_sure),
lang(lng_cancel_edit_post_yes),