Added initial ability to summarize text of messages.

This commit is contained in:
23rd
2025-12-23 15:59:37 +03:00
committed by John Preston
parent f13c6109db
commit 57754be6f0
10 changed files with 356 additions and 24 deletions
@@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "api/api_transcribes.h"
#include "apiwrap.h"
#include "api/api_text_entities.h"
#include "data/data_channel.h"
#include "data/data_document.h"
#include "data/data_peer.h"
@@ -114,6 +115,18 @@ void Transcribes::toggle(not_null<HistoryItem*> item) {
}
}
void Transcribes::toggleSummary(not_null<HistoryItem*> item) {
const auto id = item->fullId();
auto i = _summaries.find(id);
if (i == _summaries.end()) {
summarize(item);
_session->data().requestItemResize(item);
} else if (!i->second.loading) {
i->second.shown = !i->second.shown;
_session->data().requestItemResize(item);
}
}
const Transcribes::Entry &Transcribes::entry(
not_null<HistoryItem*> item) const {
static auto empty = Entry();
@@ -121,6 +134,12 @@ const Transcribes::Entry &Transcribes::entry(
return (i != _map.end()) ? i->second : empty;
}
const Transcribes::SummaryEntry &Transcribes::summary(
not_null<HistoryItem*> item) const {
const auto i = _summaries.find(item->fullId());
return (i != _summaries.end()) ? i->second : SummaryEntry();
}
void Transcribes::apply(const MTPDupdateTranscribedAudio &update) {
const auto id = update.vtranscription_id().v;
const auto i = _ids.find(id);
@@ -208,4 +227,47 @@ void Transcribes::load(not_null<HistoryItem*> item) {
entry.pending = false;
}
void Transcribes::summarize(not_null<HistoryItem*> item) {
if (!item->isHistoryEntry() || item->isLocal()) {
return;
}
const auto id = item->fullId();
const auto requestId = _api.request(MTPmessages_TranslateText(
MTP_flags(MTPmessages_TranslateText::Flag::f_peer
| MTPmessages_TranslateText::Flag::f_id),
item->history()->peer->input(),
MTP_vector<MTPint>(1, MTP_int(item->id)),
MTPVector<MTPTextWithEntities>(),
MTP_string("sum")
)).done([=](const MTPmessages_TranslatedText &result) {
const auto &list = result.data().vresult().v;
if (!list.isEmpty()) {
const auto &tl = list.front().data();
auto &entry = _summaries[id];
entry.requestId = 0;
entry.loading = false;
entry.result = TextWithEntities(
qs(tl.vtext()),
Api::EntitiesFromMTP(_session, tl.ventities().v));
if (const auto item = _session->data().message(id)) {
_session->data().requestItemResize(item);
}
}
}).fail([=] {
auto &entry = _summaries[id];
entry.requestId = 0;
entry.loading = false;
if (const auto item = _session->data().message(id)) {
_session->data().requestItemResize(item);
}
}).send();
auto &entry = _summaries.emplace(id).first->second;
entry.requestId = requestId;
entry.shown = true;
entry.loading = true;
if (const auto item = _session->data().message(id)) {
_session->data().requestItemResize(item);
}
}
} // namespace Api