# This file is part of Gajim. # # Gajim is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Gajim is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gajim. If not, see . from __future__ import annotations from typing import Any from typing import TYPE_CHECKING from gi.repository import Gtk from gajim.gtk.const import Setting from gajim.gtk.const import SettingKind from gajim.gtk.const import SettingType from gajim.gtk.settings import SettingsDialog from gajim.plugins.plugins_i18n import _ if TYPE_CHECKING: from ..stt_voice_messages import STTVoiceMessagesPlugin class STTVoiceMessagesConfigDialog(SettingsDialog): def __init__(self, plugin: STTVoiceMessagesPlugin, parent: Gtk.Window) -> None: self.plugin = plugin model = plugin.model if not model.available(): status = _('onnx-asr is not installed. Run: pip install "onnx-asr[hub]"') elif model.is_loaded: status = _("Model is loaded.") elif model.will_download: status = _("Model files will be downloaded on first use.") else: status = _("Model files are downloaded and ready.") settings = [ Setting( SettingKind.SWITCH, _("Transcribe automatically"), SettingType.VALUE, bool(plugin.config["auto_transcribe"]), callback=self._on_setting, data="auto_transcribe", desc=_("Transcribe voice messages as soon as they are displayed"), ), Setting( SettingKind.ENTRY, _("Model"), SettingType.VALUE, str(plugin.config["model_id"]), callback=self._on_setting, data="model_id", desc=_("onnx-asr model name or Hugging Face repository"), ), Setting( SettingKind.DROPDOWN, _("Quantization"), SettingType.VALUE, str(plugin.config["quantization"]), callback=self._on_setting, data="quantization", props={ "data": { "int8": _("int8 (fast, ~600 MB download)"), "fp32": _("Full precision (~2.4 GB download)"), } }, desc=_("Applied the next time the model is loaded"), ), Setting(SettingKind.GENERIC, _("Status"), SettingType.VALUE, desc=status), ] SettingsDialog.__init__( self, parent, _("STT Voice Messages Configuration"), Gtk.DialogFlags.MODAL, settings, "", ) def _on_setting(self, value: Any, data: Any) -> None: self.plugin.config[data] = value if data in ("model_id", "quantization"): self.plugin.model.set_config( str(self.plugin.config["model_id"]), str(self.plugin.config["quantization"]), )