From 4d98fd1a44d663a435a7abf6a03863c1515f7b0e Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 23 Nov 2023 16:16:39 +0300 Subject: [PATCH] Send updateSpeechRecognitionTrial when it resets. --- td/telegram/TranscriptionManager.cpp | 29 ++++++++++++++++++++++++++++ td/telegram/TranscriptionManager.h | 8 ++++++++ 2 files changed, 37 insertions(+) diff --git a/td/telegram/TranscriptionManager.cpp b/td/telegram/TranscriptionManager.cpp index 3a7dab145..ce928c240 100644 --- a/td/telegram/TranscriptionManager.cpp +++ b/td/telegram/TranscriptionManager.cpp @@ -134,6 +134,7 @@ void TranscriptionManager::load_trial_parameters() { } } send_update_speech_recognition_trial(); + set_speech_recognition_trial_timeout(); } void TranscriptionManager::save_trial_parameters() { @@ -162,9 +163,37 @@ void TranscriptionManager::set_trial_parameters(TrialParameters new_trial_parame trial_parameters_ = std::move(new_trial_parameters); send_update_speech_recognition_trial(); + set_speech_recognition_trial_timeout(); save_trial_parameters(); } +void TranscriptionManager::set_speech_recognition_trial_timeout() { + if (trial_parameters_.next_reset_date_ == 0) { + trial_parameters_timeout_.cancel_timeout(); + } else { + trial_parameters_timeout_.set_callback(std::move(trial_parameters_timeout_static)); + trial_parameters_timeout_.set_callback_data(static_cast(td_)); + trial_parameters_timeout_.set_timeout_in(trial_parameters_.next_reset_date_ - G()->unix_time() + 1); + } +} + +void TranscriptionManager::trial_parameters_timeout_static(void *td) { + if (G()->close_flag()) { + return; + } + + CHECK(td != nullptr); + static_cast(td)->transcription_manager_->on_trial_parameters_timeout(); +} + +void TranscriptionManager::on_trial_parameters_timeout() { + if (!td_->auth_manager_->is_authorized()) { + return; + } + CHECK(!td_->auth_manager_->is_bot()); + set_trial_parameters(trial_parameters_); +} + void TranscriptionManager::send_update_speech_recognition_trial() const { send_closure(G()->td(), &Td::send_update, get_update_speech_recognition_trial_object()); } diff --git a/td/telegram/TranscriptionManager.h b/td/telegram/TranscriptionManager.h index 076162793..8c680fe98 100644 --- a/td/telegram/TranscriptionManager.h +++ b/td/telegram/TranscriptionManager.h @@ -15,6 +15,7 @@ #include "td/actor/actor.h" #include "td/actor/MultiTimeout.h" +#include "td/actor/Timeout.h" #include "td/utils/common.h" #include "td/utils/FlatHashMap.h" @@ -88,6 +89,12 @@ class TranscriptionManager final : public Actor { void set_trial_parameters(TrialParameters new_trial_parameters); + void set_speech_recognition_trial_timeout(); + + static void trial_parameters_timeout_static(void *td); + + void on_trial_parameters_timeout(); + void save_trial_parameters(); void send_update_speech_recognition_trial() const; @@ -116,6 +123,7 @@ class TranscriptionManager final : public Actor { ActorShared<> parent_; TrialParameters trial_parameters_; + Timeout trial_parameters_timeout_; FlatHashMap pending_audio_transcriptions_; MultiTimeout pending_audio_transcription_timeout_{"PendingAudioTranscriptionTimeout"};