mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-07 15:43:55 +02:00
Correct implementation of auto-translation.
This commit is contained in:
parent
d9016b7979
commit
10e4c59f2e
6 changed files with 41 additions and 31 deletions
|
@ -4292,6 +4292,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"lng_sensitive_toast" = "You can update the visibility of sensitive media in **Settings > Chat Settings > Sensitive content**";
|
||||
|
||||
"lng_translate_show_original" = "Show Original";
|
||||
"lng_translate_return_original" = "View Original ({language})";
|
||||
"lng_translate_bar_to" = "Translate to {name}";
|
||||
"lng_translate_bar_to_other" = "Translate to {name}";
|
||||
"lng_translate_menu_to" = "Translate To";
|
||||
|
|
|
@ -1116,29 +1116,37 @@ void Controller::fillAutoTranslateButton() {
|
|||
[] {},
|
||||
st::manageGroupTopicsButton,
|
||||
{ &st::menuIconTranslate }));
|
||||
const auto toggled = autotranslate->lifetime().make_state<
|
||||
rpl::event_stream<bool>
|
||||
>();
|
||||
struct State {
|
||||
rpl::event_stream<bool> toggled;
|
||||
rpl::variable<bool> isLocked = false;
|
||||
};
|
||||
const auto state = autotranslate->lifetime().make_state<State>();
|
||||
autotranslate->toggleOn(rpl::single(
|
||||
channel->autoTranslation()
|
||||
) | rpl::then(toggled->events()));
|
||||
const auto isLocked = channel->levelHint() < requiredLevel;
|
||||
) | rpl::then(state->toggled.events()));
|
||||
state->isLocked = (channel->levelHint() < requiredLevel);
|
||||
const auto reason = Ui::AskBoostReason{
|
||||
.data = Ui::AskBoostAutotranslate{ .requiredLevel = requiredLevel },
|
||||
};
|
||||
|
||||
autotranslate->setToggleLocked(isLocked);
|
||||
state->isLocked.value() | rpl::start_with_next([=](bool locked) {
|
||||
autotranslate->setToggleLocked(locked);
|
||||
}, autotranslate->lifetime());
|
||||
|
||||
autotranslate->toggledChanges(
|
||||
) | rpl::start_with_next([=](bool value) {
|
||||
if (!isLocked) {
|
||||
_autotranslateSavedValue = toggled;
|
||||
if (!state->isLocked.current()) {
|
||||
_autotranslateSavedValue = value;
|
||||
} else if (value) {
|
||||
toggled->fire(false);
|
||||
state->toggled.fire(false);
|
||||
auto weak = Ui::MakeWeak(autotranslate);
|
||||
CheckBoostLevel(
|
||||
_navigation->uiShow(),
|
||||
_peer,
|
||||
[=](int level) {
|
||||
if (const auto strong = weak.data()) {
|
||||
state->isLocked = (level < requiredLevel);
|
||||
}
|
||||
return (level < requiredLevel)
|
||||
? std::make_optional(reason)
|
||||
: std::nullopt;
|
||||
|
|
|
@ -3686,6 +3686,11 @@ void History::translateOfferFrom(LanguageId id) {
|
|||
}
|
||||
} else if (!_translation) {
|
||||
_translation = std::make_unique<HistoryTranslation>(this, id);
|
||||
using Flag = PeerData::TranslationFlag;
|
||||
if (peer->autoTranslation()
|
||||
&& (peer->translationFlag() == Flag::Enabled)) {
|
||||
translateTo(Core::App().settings().translateTo());
|
||||
}
|
||||
} else {
|
||||
_translation->offerFrom(id);
|
||||
}
|
||||
|
|
|
@ -7557,10 +7557,6 @@ void HistoryWidget::checkLastPinnedClickedIdReset(
|
|||
void HistoryWidget::setupTranslateBar() {
|
||||
Expects(_history != nullptr);
|
||||
|
||||
if (_history->peer->autoTranslation()) {
|
||||
_history->translateTo(Core::App().settings().translateTo());
|
||||
}
|
||||
|
||||
_translateBar = std::make_unique<HistoryView::TranslateBar>(
|
||||
this,
|
||||
controller(),
|
||||
|
|
|
@ -372,11 +372,16 @@ void TranslateBar::setup(not_null<History*> history) {
|
|||
const auto&,
|
||||
const auto&) {
|
||||
using Flag = PeerData::TranslationFlag;
|
||||
//const auto autotranslation = history->peer->autoTranslation();
|
||||
const auto automatic = history->peer->autoTranslation();
|
||||
return (history->peer->translationFlag() != Flag::Enabled)
|
||||
? rpl::single(QString())
|
||||
: history->translatedTo()
|
||||
? tr::lng_translate_show_original()
|
||||
? (automatic
|
||||
? tr::lng_translate_return_original(
|
||||
lt_language,
|
||||
rpl::single(Ui::LanguageName(
|
||||
history->translateOfferedFrom())))
|
||||
: tr::lng_translate_show_original())
|
||||
: history->translateOfferedFrom()
|
||||
? Ui::TranslateBarTo(to)
|
||||
: rpl::single(QString());
|
||||
|
|
|
@ -53,28 +53,23 @@ void TranslateTracker::setup() {
|
|||
const auto peer = _history->peer;
|
||||
peer->updateFull();
|
||||
|
||||
using namespace rpl::mappers;
|
||||
_trackingLanguage = rpl::combine(
|
||||
Data::AmPremiumValue(&_history->session()),
|
||||
Core::App().settings().translateChatEnabledValue(),
|
||||
_1 && _2);
|
||||
|
||||
const auto channel = peer->asChannel();
|
||||
auto autoTranslationValue = (channel
|
||||
? channel->flagsValue()
|
||||
: rpl::single(Data::Flags<ChannelDataFlags>::Change({}, {}))
|
||||
) | rpl::map([=](Data::Flags<ChannelDataFlags>::Change data) {
|
||||
) | rpl::map([=](Data::Flags<ChannelDataFlags>::Change data) {
|
||||
return (data.value & ChannelDataFlag::AutoTranslation);
|
||||
}) | rpl::distinct_until_changed();
|
||||
rpl::combine(
|
||||
_trackingLanguage.value(),
|
||||
std::move(autoTranslationValue)
|
||||
) | rpl::start_with_next([=](bool tracking, bool autotranslation) {
|
||||
|
||||
using namespace rpl::mappers;
|
||||
_trackingLanguage = rpl::combine(
|
||||
Core::App().settings().translateChatEnabledValue(),
|
||||
Data::AmPremiumValue(&_history->session()),
|
||||
std::move(autoTranslationValue),
|
||||
_1 && (_2 || _3));
|
||||
_trackingLanguage.value() | rpl::start_with_next([=](bool tracking) {
|
||||
_trackingLifetime.destroy();
|
||||
if (autotranslation) {
|
||||
_history->translateOfferFrom({ QLocale::French });
|
||||
AssertIsDebug();
|
||||
} else if (tracking) {
|
||||
if (tracking) {
|
||||
recognizeCollected();
|
||||
trackSkipLanguages();
|
||||
} else {
|
||||
|
@ -115,7 +110,7 @@ bool TranslateTracker::add(
|
|||
bool skipDependencies) {
|
||||
Expects(_addedInBunch >= 0);
|
||||
|
||||
if (item->out()
|
||||
if ((item->out() && !item->history()->peer->autoTranslation())
|
||||
|| item->isService()
|
||||
|| !item->isRegular()
|
||||
|| item->isOnlyEmojiAndSpaces()) {
|
||||
|
|
Loading…
Add table
Reference in a new issue