Work around startup UI freeze caused by QtTextToSpeech

This merge request works around an annoying startup hang that I introduced when adding text-to-speech to NeoChat. The previous implementation was a QML singleton that used the `TextToSpeech` QML component. Unfortunately that component blocks the UI thread when first loading it, while it connects to speech-dispatcher.

This MR just rewrites that singleton in C++, and moves initialization of QtTextToSpeech to the first time you read a message aloud. It doesn't fix the performance problem, but it at least stops it from affecting startup.

In the future, I'd like to move speech operations to a background thread to completely mitigate the initialization freeze.
This commit is contained in:
Ritchie Frodomar
2025-05-16 14:27:49 -04:00
parent 3ea844496a
commit d31cc486bb
7 changed files with 41 additions and 32 deletions

View File

@@ -196,7 +196,6 @@ Kirigami.ApplicationWindow {
NeoChatSettingsView.window = root;
NeoChatSettingsView.connection = root.connection;
WindowController.setBlur(pageStack, NeoChatConfig.blur && !NeoChatConfig.compactLayout);
TextToSpeechWrapper.warmUp();
if (ShareHandler.text && root.connection) {
root.handleShare()
}

View File

@@ -1,24 +0,0 @@
// SPDX-FileCopyrightText: 2025 Ritchie Frodomar <alkalinethunder@gmail.com>
// SPDX-License-Identifier: GPL-2.0-or-later
pragma Singleton
import QtQuick
import QtTextToSpeech
QtObject {
id: root
readonly property TextToSpeech tts: TextToSpeech {
id: tts
}
function warmUp() {
// TODO: This method is called on startup to avoid a UI freeze the first time you read a message aloud, but there's nothing for it to do.
// This would be a good place to check if TTS can actually be used.
}
function say(text: String) {
tts.say(text)
}
}