From 60e586b20e56cdad251c5401184acff5284c7fb3 Mon Sep 17 00:00:00 2001 From: Chidi Williams Date: Mon, 21 Nov 2022 19:12:13 +0000 Subject: [PATCH] Add reset settings to default (#178) --- .coveragerc | 2 +- Makefile | 2 ++ gui.py | 34 +++++++++++++++++++++++++--------- gui_test.py | 16 +++++++++++++++- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/.coveragerc b/.coveragerc index f11f6af..0946e13 100644 --- a/.coveragerc +++ b/.coveragerc @@ -8,4 +8,4 @@ omit = directory = coverage/html [report] -fail_under = 75 +fail_under = 78 diff --git a/Makefile b/Makefile index ccd0fd6..dd3a6b7 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ version := $$(poetry version -s) +version_escaped := $$(echo ${version} | sed -e 's/\./\\./g') mac_app_path := ./dist/Buzz.app mac_zip_path := ./dist/Buzz-${version}-mac.zip @@ -54,6 +55,7 @@ dist/Buzz dist/Buzz.app: whisper_cpp.py version: poetry version ${version} echo "VERSION = \"${version}\"" > __version__.py + sed -i "s/version=.*,/version=\'${version_escaped}\',/" Buzz.spec CMAKE_FLAGS= ifeq ($(UNAME_S),Darwin) diff --git a/gui.py b/gui.py index f87a5ee..ba0d8fb 100644 --- a/gui.py +++ b/gui.py @@ -1,9 +1,10 @@ import enum +import logging import os import platform import sys from datetime import datetime -from typing import Dict, List, Optional, Tuple +from typing import Any, Dict, List, Optional, Tuple import humanize import sounddevice @@ -469,7 +470,7 @@ class FileTranscriberWidget(QWidget): if output_file == '': return - use_whisper_cpp = self.settings.enable_ggml_inference( + use_whisper_cpp = self.settings.get_enable_ggml_inference( ) and self.selected_language is not None self.run_button.setDisabled(True) @@ -547,15 +548,30 @@ class FileTranscriberWidget(QWidget): class Settings(QSettings): - ENABLE_GGML_INFERENCE = 'enable_ggml_inference' + _ENABLE_GGML_INFERENCE = 'enable_ggml_inference' - def __init__(self, parent: Optional[QWidget], *args): + def __init__(self, parent: Optional[QWidget] = None, *args): super().__init__('Buzz', 'Buzz', parent, *args) + logging.debug('Loaded settings from path = %s', self.fileName()) - def enable_ggml_inference(self): + def get_enable_ggml_inference(self) -> bool: if LOADED_WHISPER_DLL is False: return False - return self.value(self.ENABLE_GGML_INFERENCE, False) + return self._value_to_bool(self.value(self._ENABLE_GGML_INFERENCE, False)) + + def set_enable_ggml_inference(self, value: bool) -> None: + self.setValue(self._ENABLE_GGML_INFERENCE, value) + + # Convert QSettings value to boolean: https://forum.qt.io/topic/108622/how-to-get-a-boolean-value-from-qsettings-correctly + @staticmethod + def _value_to_bool(value: Any) -> bool: + if isinstance(value, bool): + return value + + if isinstance(value, str): + return value.lower() == 'true' + + return bool(value) class RecordingTranscriberWidget(QWidget): @@ -642,7 +658,7 @@ class RecordingTranscriberWidget(QWidget): def start_recording(self): self.record_button.setDisabled(True) - use_whisper_cpp = self.settings.enable_ggml_inference( + use_whisper_cpp = self.settings.get_enable_ggml_inference( ) and self.selected_language is not None model_name = get_model_name(self.selected_quality) @@ -803,7 +819,7 @@ class MainWindow(QMainWindow): '&Enable GGML Inference', self) enable_ggml_inference_action.setCheckable(True) enable_ggml_inference_action.setChecked( - bool(self.settings.enable_ggml_inference())) + bool(self.settings.get_enable_ggml_inference())) enable_ggml_inference_action.triggered.connect( self.on_toggle_enable_ggml_inference) enable_ggml_inference_action.setDisabled(LOADED_WHISPER_DLL is False) @@ -822,7 +838,7 @@ class MainWindow(QMainWindow): self.new_import_window_triggered.emit((file_path, self.geometry())) def on_toggle_enable_ggml_inference(self, state: bool): - self.settings.setValue(Settings.ENABLE_GGML_INFERENCE, state) + self.settings.set_enable_ggml_inference(state) def on_trigger_about_action(self): about_dialog = AboutDialog(self) diff --git a/gui_test.py b/gui_test.py index 7d5efe4..1ab5a48 100644 --- a/gui_test.py +++ b/gui_test.py @@ -7,7 +7,7 @@ from PyQt6.QtCore import Qt from gui import (Application, AudioDevicesComboBox, DownloadModelProgressDialog, FileTranscriberWidget, - LanguagesComboBox, MainWindow, OutputFormatsComboBox, Quality, + LanguagesComboBox, MainWindow, OutputFormatsComboBox, Quality, Settings, QualityComboBox, TranscriberProgressDialog) from transcriber import OutputFormat @@ -190,3 +190,17 @@ class TestFileTranscriberWidget: output_file = open(output_file_path, 'r', encoding='utf-8') assert 'Bienvenue dans Passe-Relle, un podcast' in output_file.read() + + +class TestSettings: + def test_should_enable_ggml_inference(self): + settings = Settings() + settings.clear() + + assert settings.get_enable_ggml_inference() is False + + settings.set_enable_ggml_inference(True) + assert settings.get_enable_ggml_inference() is True + + settings.set_enable_ggml_inference(False) + assert settings.get_enable_ggml_inference() is False