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; doc = document;
} }
const auto original = item->originalText(); const auto editData = PrepareEditText(item);
const auto editData = TextWithTags {
original.text,
ConvertEntitiesToTextTags(original.entities)
};
if (!_animated && (dimensions.isEmpty() || doc || !image)) { if (!_animated && (dimensions.isEmpty() || doc || !image)) {
if (!image) { if (!image) {

View File

@ -8,6 +8,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "chat_helpers/message_field.h" #include "chat_helpers/message_field.h"
#include "history/history_widget.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_regex.h"
#include "base/qthelp_url.h" #include "base/qthelp_url.h"
#include "boxes/abstract_box.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 } // namespace
QString ConvertTagToMimeTag(const QString &tagId) { 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( Fn<bool(
Ui::InputField::EditLinkSelection selection, Ui::InputField::EditLinkSelection selection,
QString text, QString text,

View File

@ -25,6 +25,7 @@ std::unique_ptr<QMimeData> MimeDataFromText(const TextForMimeData &text);
void SetClipboardText( void SetClipboardText(
const TextForMimeData &text, const TextForMimeData &text,
QClipboard::Mode mode = QClipboard::Clipboard); QClipboard::Mode mode = QClipboard::Clipboard);
TextWithTags PrepareEditText(not_null<HistoryItem*> item);
Fn<bool( Fn<bool(
Ui::InputField::EditLinkSelection selection, 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 = PrepareEditText(item);
const auto editData = TextWithTags {
original.text,
ConvertEntitiesToTextTags(original.entities)
};
const auto cursor = MessageCursor { const auto cursor = MessageCursor {
editData.text.size(), editData.text.size(),
editData.text.size(), editData.text.size(),
@ -6353,12 +6349,8 @@ void HistoryWidget::escape() {
} else if (_isInlineBot) { } else if (_isInlineBot) {
onInlineBotCancel(); onInlineBotCancel();
} else if (_editMsgId) { } else if (_editMsgId) {
auto original = _replyEditMsg ? _replyEditMsg->originalText() : TextWithEntities(); if (_replyEditMsg
auto editData = TextWithTags{ && PrepareEditText(_replyEditMsg) != _field->getTextWithTags()) {
original.text,
ConvertEntitiesToTextTags(original.entities)
};
if (_replyEditMsg && editData != _field->getTextWithTags()) {
Ui::show(Box<ConfirmBox>( Ui::show(Box<ConfirmBox>(
lang(lng_cancel_edit_post_sure), lang(lng_cancel_edit_post_sure),
lang(lng_cancel_edit_post_yes), lang(lng_cancel_edit_post_yes),