import QtQuick import QtQuick.Layouts import qs.services import qs.modules.common import qs.modules.common.widgets ContentPage { forceWidth: true ContentSection { icon: "neurology" title: Translation.tr("AI") MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("System prompt") text: Config.options.ai.systemPrompt wrapMode: TextEdit.Wrap onTextChanged: { Qt.callLater(() => { Config.options.ai.systemPrompt = text; }); } } } ContentSection { icon: "music_cast" title: Translation.tr("Music Recognition") ConfigSpinBox { icon: "timer_off" text: Translation.tr("Total duration timeout (s)") value: Config.options.musicRecognition.timeout from: 10 to: 100 stepSize: 2 onValueChanged: { Config.options.musicRecognition.timeout = value; } } ConfigSpinBox { icon: "av_timer" text: Translation.tr("Polling interval (s)") value: Config.options.musicRecognition.interval from: 2 to: 10 stepSize: 1 onValueChanged: { Config.options.musicRecognition.interval = value; } } } ContentSection { icon: "cell_tower" title: Translation.tr("Networking") MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("User agent (for services that require it)") text: Config.options.networking.userAgent wrapMode: TextEdit.Wrap onTextChanged: { Config.options.networking.userAgent = text; } } } ContentSection { icon: "memory" title: Translation.tr("Resources") ConfigSpinBox { icon: "av_timer" text: Translation.tr("Polling interval (ms)") value: Config.options.resources.updateInterval from: 100 to: 10000 stepSize: 100 onValueChanged: { Config.options.resources.updateInterval = value; } } } ContentSection { icon: "search" title: Translation.tr("Search") ConfigSwitch { text: Translation.tr("Use Levenshtein distance-based algorithm instead of fuzzy") checked: Config.options.search.sloppy onCheckedChanged: { Config.options.search.sloppy = checked; } StyledToolTip { text: Translation.tr("Could be better if you make a ton of typos,\nbut results can be weird and might not work with acronyms\n(e.g. \"GIMP\" might not give you the paint program)") } } ContentSubsection { title: Translation.tr("Prefixes") ConfigRow { uniform: true MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Action") text: Config.options.search.prefix.action wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.action = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Clipboard") text: Config.options.search.prefix.clipboard wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.clipboard = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Emojis") text: Config.options.search.prefix.emojis wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.emojis = text; } } } ConfigRow { uniform: true MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Math") text: Config.options.search.prefix.math wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.math = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Shell command") text: Config.options.search.prefix.shellCommand wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.shellCommand = text; } } MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Web search") text: Config.options.search.prefix.webSearch wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.prefix.webSearch = text; } } } } ContentSubsection { title: Translation.tr("Web search") MaterialTextArea { Layout.fillWidth: true placeholderText: Translation.tr("Base URL") text: Config.options.search.engineBaseUrl wrapMode: TextEdit.Wrap onTextChanged: { Config.options.search.engineBaseUrl = text; } } } } }