diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 47db26aacb..31667caef1 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -1953,6 +1953,7 @@ bool HistoryWidget::applyDraft(FieldHistoryAction fieldHistoryAction) { updateControlsVisibility(); updateControlsGeometry(); refreshTopBarActiveChat(); + checkCharsLimitation(); if (_editMsgId) { updateReplyEditTexts(); if (!_replyEditMsg) { @@ -3869,17 +3870,12 @@ void HistoryWidget::saveEditMsg() { return; } const auto webPageDraft = _preview->draft(); - auto left = prepareTextForEditMsg(); - auto sending = TextWithEntities(); + const auto sending = prepareTextForEditMsg(); - const auto originalLeftSize = left.text.size(); const auto hasMediaWithCaption = item && item->media() && item->media()->allowsEditCaption(); - const auto maxCaptionSize = !hasMediaWithCaption - ? MaxMessageSize - : Data::PremiumLimits(&session()).captionLengthCurrent(); - if (!TextUtilities::CutPart(sending, left, maxCaptionSize) + if (sending.text.isEmpty() && (webPageDraft.removed || webPageDraft.url.isEmpty() || !webPageDraft.manual) @@ -3888,11 +3884,16 @@ void HistoryWidget::saveEditMsg() { controller()->show( Box(item, suggestModerateActions)); return; - } else if (!left.text.isEmpty()) { - const auto remove = originalLeftSize - maxCaptionSize; - controller()->showToast( - tr::lng_edit_limit_reached(tr::now, lt_count, remove)); - return; + } else { + const auto maxCaptionSize = !hasMediaWithCaption + ? MaxMessageSize + : Data::PremiumLimits(&session()).captionLengthCurrent(); + const auto remove = Ui::FieldCharacterCount(_field) - maxCaptionSize; + if (remove > 0) { + controller()->showToast( + tr::lng_edit_limit_reached(tr::now, lt_count, remove)); + return; + } } const auto weak = Ui::MakeWeak(this); @@ -7319,9 +7320,8 @@ void HistoryWidget::checkCharsLimitation() { _charsLimitation = nullptr; return; } - const auto limits = Data::PremiumLimits(&session()); - const auto left = prepareTextForEditMsg(); - const auto remove = left.text.size() - limits.captionLengthCurrent(); + const auto remove = Ui::FieldCharacterCount(_field) + - Data::PremiumLimits(&session()).captionLengthCurrent(); if (remove > 0) { if (!_charsLimitation) { _charsLimitation = base::make_unique_q( diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp index c8d47451cf..cabfedbabc 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -3150,6 +3150,10 @@ not_null ComposeControls::likeAnimationTarget() const { return _like; } +int ComposeControls::fieldCharacterCount() const { + return Ui::FieldCharacterCount(_field); +} + bool ComposeControls::preventsClose(Fn &&continueCallback) const { if (_voiceRecordBar->isActive()) { _voiceRecordBar->showDiscardBox(std::move(continueCallback)); @@ -3323,9 +3327,8 @@ void ComposeControls::checkCharsLimitation() { _charsLimitation = nullptr; return; } - const auto limits = Data::PremiumLimits(&session()); - const auto left = prepareTextForEditMsg(); - const auto remove = left.text.size() - limits.captionLengthCurrent(); + const auto remove = Ui::FieldCharacterCount(_field) + - Data::PremiumLimits(&session()).captionLengthCurrent(); if (remove > 0) { if (!_charsLimitation) { using namespace Controls; diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h index b1bc012ca3..d5985d6cb1 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h @@ -228,6 +228,7 @@ public: [[nodiscard]] rpl::producer hasSendTextValue() const; [[nodiscard]] rpl::producer fieldMenuShownValue() const; [[nodiscard]] not_null likeAnimationTarget() const; + [[nodiscard]] int fieldCharacterCount() const; [[nodiscard]] TextWithEntities prepareTextForEditMsg() const; diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 8ad662925a..d8482c9d63 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -1170,29 +1170,29 @@ void RepliesWidget::edit( return; } const auto webpage = _composeControls->webPageDraft(); - auto sending = TextWithEntities(); - auto left = _composeControls->prepareTextForEditMsg(); + const auto sending = _composeControls->prepareTextForEditMsg(); - const auto originalLeftSize = left.text.size(); const auto hasMediaWithCaption = item && item->media() && item->media()->allowsEditCaption(); - const auto maxCaptionSize = !hasMediaWithCaption - ? MaxMessageSize - : Data::PremiumLimits(&session()).captionLengthCurrent(); - if (!TextUtilities::CutPart(sending, left, maxCaptionSize) - && !hasMediaWithCaption) { + if (sending.text.isEmpty() && !hasMediaWithCaption) { if (item) { controller()->show(Box(item, false)); } else { doSetInnerFocus(); } return; - } else if (!left.text.isEmpty()) { - const auto remove = originalLeftSize - maxCaptionSize; - controller()->showToast( - tr::lng_edit_limit_reached(tr::now, lt_count, remove)); - return; + } else { + const auto maxCaptionSize = !hasMediaWithCaption + ? MaxMessageSize + : Data::PremiumLimits(&session()).captionLengthCurrent(); + const auto remove = _composeControls->fieldCharacterCount() + - maxCaptionSize; + if (remove > 0) { + controller()->showToast( + tr::lng_edit_limit_reached(tr::now, lt_count, remove)); + return; + } } lifetime().add([=] { diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp index af2008ed87..ca1fff7c91 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp @@ -635,29 +635,29 @@ void ScheduledWidget::edit( return; } const auto webpage = _composeControls->webPageDraft(); - auto sending = TextWithEntities(); - auto left = _composeControls->prepareTextForEditMsg(); + const auto sending = _composeControls->prepareTextForEditMsg(); - const auto originalLeftSize = left.text.size(); const auto hasMediaWithCaption = item && item->media() && item->media()->allowsEditCaption(); - const auto maxCaptionSize = !hasMediaWithCaption - ? MaxMessageSize - : Data::PremiumLimits(&session()).captionLengthCurrent(); - if (!TextUtilities::CutPart(sending, left, maxCaptionSize) - && !hasMediaWithCaption) { + if (sending.text.isEmpty() && !hasMediaWithCaption) { if (item) { controller()->show(Box(item, false)); } else { _composeControls->focus(); } return; - } else if (!left.text.isEmpty()) { - const auto remove = originalLeftSize - maxCaptionSize; - controller()->showToast( - tr::lng_edit_limit_reached(tr::now, lt_count, remove)); - return; + } else { + const auto maxCaptionSize = !hasMediaWithCaption + ? MaxMessageSize + : Data::PremiumLimits(&session()).captionLengthCurrent(); + const auto remove = _composeControls->fieldCharacterCount() + - maxCaptionSize; + if (remove > 0) { + controller()->showToast( + tr::lng_edit_limit_reached(tr::now, lt_count, remove)); + return; + } } lifetime().add([=] { diff --git a/Telegram/lib_ui b/Telegram/lib_ui index d424751135..333587d95e 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit d4247511355a666903e9a57d821b1eb58884aade +Subproject commit 333587d95edefcae1ebaf8838d3f499639fc2de8