Added ability to translate transcribed voice messages.
This commit is contained in:
parent
b401f0bfea
commit
27bcd35832
|
@ -2404,28 +2404,34 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
||||||
Settings::ShowPremium(_controller, "no_ads");
|
Settings::ShowPremium(_controller, "no_ads");
|
||||||
}, &st::menuIconBlock);
|
}, &st::menuIconBlock);
|
||||||
}
|
}
|
||||||
if (!item->isService()
|
if (!item->isService() && view && actionText.isEmpty()) {
|
||||||
&& view
|
if (!hasCopyRestriction(item)
|
||||||
&& actionText.isEmpty()
|
&& (view->hasVisibleText() || mediaHasTextForCopy)) {
|
||||||
&& !hasCopyRestriction(item)
|
_menu->addAction(
|
||||||
&& (view->hasVisibleText() || mediaHasTextForCopy)) {
|
tr::lng_context_copy_text(tr::now),
|
||||||
_menu->addAction(tr::lng_context_copy_text(tr::now), [=] {
|
[=] { copyContextText(itemId); },
|
||||||
copyContextText(itemId);
|
&st::menuIconCopy);
|
||||||
}, &st::menuIconCopy);
|
}
|
||||||
}
|
if (view->hasVisibleText() || mediaHasTextForCopy) {
|
||||||
if (!item->isService()
|
const auto translate = mediaHasTextForCopy
|
||||||
&& view
|
? (HistoryView::TransribedText(item)
|
||||||
&& actionText.isEmpty()
|
.append('\n')
|
||||||
&& (view->hasVisibleText() || mediaHasTextForCopy)
|
.append(item->originalText()))
|
||||||
&& !Ui::SkipTranslate(item->originalText())) {
|
: item->originalText();
|
||||||
_menu->addAction(tr::lng_context_translate(tr::now), [=] {
|
if (!translate.text.isEmpty()
|
||||||
_controller->show(Box(
|
&& !Ui::SkipTranslate(translate)) {
|
||||||
Ui::TranslateBox,
|
_menu->addAction(tr::lng_context_translate(tr::now), [=] {
|
||||||
item->history()->peer,
|
_controller->show(Box(
|
||||||
item->fullId().msg,
|
Ui::TranslateBox,
|
||||||
item->originalText(),
|
item->history()->peer,
|
||||||
hasCopyRestriction(item)));
|
mediaHasTextForCopy
|
||||||
}, &st::menuIconTranslate);
|
? MsgId()
|
||||||
|
: item->fullId().msg,
|
||||||
|
translate,
|
||||||
|
hasCopyRestriction(item)));
|
||||||
|
}, &st::menuIconTranslate);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "api/api_polls.h"
|
#include "api/api_polls.h"
|
||||||
#include "api/api_report.h"
|
#include "api/api_report.h"
|
||||||
#include "api/api_ringtones.h"
|
#include "api/api_ringtones.h"
|
||||||
|
#include "api/api_transcribes.h"
|
||||||
#include "api/api_who_reacted.h"
|
#include "api/api_who_reacted.h"
|
||||||
#include "api/api_toggling_media.h" // Api::ToggleFavedSticker
|
#include "api/api_toggling_media.h" // Api::ToggleFavedSticker
|
||||||
#include "base/unixtime.h"
|
#include "base/unixtime.h"
|
||||||
|
@ -1034,37 +1035,44 @@ base::unique_qptr<Ui::PopupMenu> FillContextMenu(
|
||||||
if (const auto document = media ? media->getDocument() : nullptr) {
|
if (const auto document = media ? media->getDocument() : nullptr) {
|
||||||
AddDocumentActions(result, document, view->data(), list);
|
AddDocumentActions(result, document, view->data(), list);
|
||||||
}
|
}
|
||||||
if (!link
|
if (!link && (view->hasVisibleText() || mediaHasTextForCopy)) {
|
||||||
&& (view->hasVisibleText() || mediaHasTextForCopy)
|
if (!list->hasCopyRestriction(view->data())) {
|
||||||
&& !list->hasCopyRestriction(view->data())) {
|
const auto asGroup = (request.pointState != PointState::GroupPart);
|
||||||
const auto asGroup = (request.pointState != PointState::GroupPart);
|
result->addAction(tr::lng_context_copy_text(tr::now), [=] {
|
||||||
result->addAction(tr::lng_context_copy_text(tr::now), [=] {
|
if (const auto item = owner->message(itemId)) {
|
||||||
if (const auto item = owner->message(itemId)) {
|
if (!list->showCopyRestriction(item)) {
|
||||||
if (!list->showCopyRestriction(item)) {
|
if (asGroup) {
|
||||||
if (asGroup) {
|
if (const auto group = owner->groups().find(item)) {
|
||||||
if (const auto group = owner->groups().find(item)) {
|
TextUtilities::SetClipboardText(HistoryGroupText(group));
|
||||||
TextUtilities::SetClipboardText(HistoryGroupText(group));
|
return;
|
||||||
return;
|
}
|
||||||
}
|
}
|
||||||
|
TextUtilities::SetClipboardText(HistoryItemText(item));
|
||||||
}
|
}
|
||||||
TextUtilities::SetClipboardText(HistoryItemText(item));
|
|
||||||
}
|
}
|
||||||
}
|
}, &st::menuIconCopy);
|
||||||
}, &st::menuIconCopy);
|
}
|
||||||
}
|
|
||||||
if (!link
|
const auto translate = mediaHasTextForCopy
|
||||||
&& (view->hasVisibleText() || mediaHasTextForCopy)
|
? (HistoryView::TransribedText(item)
|
||||||
&& !Ui::SkipTranslate(item->originalText())) {
|
.append('\n')
|
||||||
result->addAction(tr::lng_context_translate(tr::now), [=] {
|
.append(item->originalText()))
|
||||||
if (const auto item = owner->message(itemId)) {
|
: item->originalText();
|
||||||
list->controller()->show(Box(
|
if (!translate.text.isEmpty()
|
||||||
Ui::TranslateBox,
|
&& !Ui::SkipTranslate(translate)) {
|
||||||
item->history()->peer,
|
result->addAction(tr::lng_context_translate(tr::now), [=] {
|
||||||
item->fullId().msg,
|
if (const auto item = owner->message(itemId)) {
|
||||||
item->originalText(),
|
list->controller()->show(Box(
|
||||||
list->hasCopyRestriction(view->data())));
|
Ui::TranslateBox,
|
||||||
}
|
item->history()->peer,
|
||||||
}, &st::menuIconTranslate);
|
mediaHasTextForCopy
|
||||||
|
? MsgId()
|
||||||
|
: item->fullId().msg,
|
||||||
|
translate,
|
||||||
|
list->hasCopyRestriction(view->data())));
|
||||||
|
}
|
||||||
|
}, &st::menuIconTranslate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1539,4 +1547,22 @@ void AddEmojiPacksAction(
|
||||||
controller);
|
controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TextWithEntities TransribedText(not_null<HistoryItem*> item) {
|
||||||
|
const auto media = item->media();
|
||||||
|
const auto document = media ? media->document() : nullptr;
|
||||||
|
if (!document || !document->isVoiceMessage()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
const auto &entry = document->session().api().transcribes().entry(item);
|
||||||
|
if (!entry.requestId
|
||||||
|
&& entry.shown
|
||||||
|
&& !entry.toolong
|
||||||
|
&& !entry.failed
|
||||||
|
&& !entry.pending
|
||||||
|
&& !entry.result.isEmpty()) {
|
||||||
|
return { entry.result };
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace HistoryView
|
} // namespace HistoryView
|
||||||
|
|
|
@ -102,4 +102,6 @@ void AddEmojiPacksAction(
|
||||||
EmojiPacksSource source,
|
EmojiPacksSource source,
|
||||||
not_null<Window::SessionController*> controller);
|
not_null<Window::SessionController*> controller);
|
||||||
|
|
||||||
|
[[nodiscard]] TextWithEntities TransribedText(not_null<HistoryItem*> item);
|
||||||
|
|
||||||
} // namespace HistoryView
|
} // namespace HistoryView
|
||||||
|
|
Loading…
Reference in New Issue