From 20e6e771d742e54e0bd39adbccbd494017a72afe Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 3 Jan 2026 05:51:32 +0300 Subject: [PATCH] Improved summary text processing with channel translations. --- Telegram/SourceFiles/api/api_transcribes.cpp | 27 ++++++++++++------- Telegram/SourceFiles/api/api_transcribes.h | 6 ++--- Telegram/SourceFiles/history/history_item.cpp | 6 ----- .../history/view/history_view_element.cpp | 1 + .../history/view/history_view_message.cpp | 3 +++ .../view/history_view_summary_header.cpp | 5 ++++ .../view/history_view_translate_tracker.cpp | 3 +++ 7 files changed, 33 insertions(+), 18 deletions(-) diff --git a/Telegram/SourceFiles/api/api_transcribes.cpp b/Telegram/SourceFiles/api/api_transcribes.cpp index 65712cd897..fae17a7566 100644 --- a/Telegram/SourceFiles/api/api_transcribes.cpp +++ b/Telegram/SourceFiles/api/api_transcribes.cpp @@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history.h" #include "history/history_item.h" #include "history/history_item_helpers.h" +#include "lang/lang_keys.h" #include "main/main_app_config.h" #include "main/main_session.h" #include "main/main_session_settings.h" @@ -264,11 +265,12 @@ void Transcribes::summarize(not_null item) { entry.loading = false; entry.premiumRequired = false; entry.onPremiumRequired = nullptr; + entry.languageId = translatedTo; entry.result = TextWithEntities( qs(data.vtext()), Api::EntitiesFromMTP(_session, data.ventities().v)); if (const auto item = _session->data().message(id)) { - _session->data().requestItemResize(item); + _session->data().requestItemTextRefresh(item); _session->data().requestItemShowHighlight(item); } }).fail([=](const MTP::Error &error) { @@ -284,7 +286,7 @@ void Transcribes::summarize(not_null item) { entry.loading = false; entry.onPremiumRequired = nullptr; if (const auto item = _session->data().message(id)) { - _session->data().requestItemResize(item); + _session->data().requestItemTextRefresh(item); } }).send(); @@ -297,13 +299,20 @@ void Transcribes::summarize(not_null item) { _session->data().requestItemResize(item); } -void Transcribes::setSummaryFromLang(FullMsgId id, QString &&text) { - _summariesFromLang[id] = std::move(text); -} - -QString Transcribes::summaryFromLang(FullMsgId id) const { - const auto i = _summariesFromLang.find(id); - return (i != _summariesFromLang.end()) ? i->second : QString(); +void Transcribes::checkSummaryToTranslate(FullMsgId id) { + const auto i = _summaries.find(id); + if (i == _summaries.end() || i->second.result.empty()) { + return; + } + const auto item = _session->data().message(id); + if (!item) { + return; + } + const auto translatedTo = item->history()->translatedTo(); + if (i->second.languageId != translatedTo) { + i->second.result = tr::lng_contacts_loading(tr::now, tr::italic); + summarize(item); + } } } // namespace Api diff --git a/Telegram/SourceFiles/api/api_transcribes.h b/Telegram/SourceFiles/api/api_transcribes.h index 709ea66e28..eb248e7cc5 100644 --- a/Telegram/SourceFiles/api/api_transcribes.h +++ b/Telegram/SourceFiles/api/api_transcribes.h @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "mtproto/sender.h" +#include "spellcheck/spellcheck_types.h" class ApiWrap; @@ -20,6 +21,7 @@ namespace Api { struct SummaryEntry { Fn onPremiumRequired = nullptr; TextWithEntities result; + LanguageId languageId; bool shown = false; bool loading = false; bool premiumRequired = false; @@ -48,8 +50,7 @@ public: Fn onPremiumRequired); [[nodiscard]] const SummaryEntry &summary( not_null item) const; - void setSummaryFromLang(FullMsgId, QString &&summaryFromLang); - [[nodiscard]] QString summaryFromLang(FullMsgId) const; + void checkSummaryToTranslate(FullMsgId id); void apply(const MTPDupdateTranscribedAudio &update); @@ -77,7 +78,6 @@ private: base::flat_map _ids; base::flat_map _summaries; - base::flat_map _summariesFromLang; }; diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index 529f535605..f642f7ff94 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -483,12 +483,6 @@ HistoryItem::HistoryItem( history->owner().histories().reportDelivery(this); } } - - if (const auto summaryFromLang = data.vsummary_from_language()) { - history->session().api().transcribes().setSummaryFromLang( - fullId(), - qs(*summaryFromLang)); - } } HistoryItem::HistoryItem( diff --git a/Telegram/SourceFiles/history/view/history_view_element.cpp b/Telegram/SourceFiles/history/view/history_view_element.cpp index 7c22b9824b..b5c8250a24 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.cpp +++ b/Telegram/SourceFiles/history/view/history_view_element.cpp @@ -2417,6 +2417,7 @@ void Element::itemTextUpdated() { if (const auto media = _media.get()) { media->parentTextUpdated(); } + _flags &= ~Flag::SummaryShown; clearSpecialOnlyEmoji(); _text = Ui::Text::String(st::msgMinWidth); _textWidth = -1; diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index af10c96ec8..ccfbe7080e 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -2283,6 +2283,9 @@ void Message::unloadHeavyPart() { _fromNameStatus->custom = nullptr; _fromNameStatus->id = EmojiStatusId(); } + if (const auto summaryHeader = Get()) { + summaryHeader->unloadHeavyPart(); + } } bool Message::hasFromPhoto() const { diff --git a/Telegram/SourceFiles/history/view/history_view_summary_header.cpp b/Telegram/SourceFiles/history/view/history_view_summary_header.cpp index 4736cb7947..1236d02a70 100644 --- a/Telegram/SourceFiles/history/view/history_view_summary_header.cpp +++ b/Telegram/SourceFiles/history/view/history_view_summary_header.cpp @@ -231,4 +231,9 @@ void SummaryHeader::stopLastRipple() { } } +void SummaryHeader::unloadHeavyPart() { + _animation = nullptr; + _ripple.animation = nullptr; +} + } // namespace HistoryView diff --git a/Telegram/SourceFiles/history/view/history_view_translate_tracker.cpp b/Telegram/SourceFiles/history/view/history_view_translate_tracker.cpp index ba840d258e..902cf486d6 100644 --- a/Telegram/SourceFiles/history/view/history_view_translate_tracker.cpp +++ b/Telegram/SourceFiles/history/view/history_view_translate_tracker.cpp @@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "apiwrap.h" #include "api/api_text_entities.h" +#include "api/api_transcribes.h" #include "core/application.h" #include "core/core_settings.h" #include "data/data_changes.h" @@ -157,6 +158,8 @@ bool TranslateTracker::add( void TranslateTracker::switchTranslation( not_null item, LanguageId id) { + _history->session().api().transcribes().checkSummaryToTranslate( + item->fullId()); if (item->translationShowRequiresRequest(id)) { _itemsToRequest.emplace( item->fullId(),