- src/markdown.{h,cpp}: convertitore minimale, due funzioni:
* toRichText() -> HTML per QML Text.RichText: grassetti (**x**/__x__),
corsivi (*x*/_x_ con confini di parola per non toccare snake_case),
titoli (#), liste (-/1.), citazioni (>), codice (`x` e blocchi ```,
in monospace), link [t](u) -> solo testo, barrato ~~x~~; escape di
< & > contro injection nel rich text
* toSpeech() -> testo piatto per il TTS: via recinti di codice, marcatori
di titoli/liste/citazioni, enfasi, backtick; link/immagini -> testo;
tabelle | a | b | -> "a, b"; righe vuote compattate
- ChatModel: nuovo ruolo contentRich (calcolato in C++, testabile);
incluso nei dataChanged dello streaming
- ChatPage: le bolle dell'assistente usano contentRich con
textFormat: Text.RichText; i messaggi utente restano testo semplice
- ApiClient::speak(): il testo passa da Markdown::toSpeech (niente più
simboli di formattazione letti ad alta voce)
- core-test: 19 casi nuovi per il convertitore (tutti locali, senza device)
Verificato: build zero warning + unit test completi.
62 lines
2.4 KiB
C++
62 lines
2.4 KiB
C++
#include <QGuiApplication>
|
|
#include <QLocale>
|
|
#include <QQmlContext>
|
|
#include <QQuickView>
|
|
#include <QDebug>
|
|
#include <QTranslator>
|
|
#include <sailfishapp.h>
|
|
|
|
#include "apiclient.h"
|
|
#include "chatmodel.h"
|
|
#include "player.h"
|
|
#include "recorder.h"
|
|
#include "settings.h"
|
|
#include "voicerecorder.h"
|
|
|
|
Q_DECL_EXPORT int main(int argc, char *argv[])
|
|
{
|
|
QGuiApplication *app = SailfishApp::application(argc, argv);
|
|
|
|
// Identita' allineata al profilo X-Sailjail del desktop file:
|
|
// AppConfigLocation = ~/.config/harbour/hermes (zona persistente della sandbox).
|
|
app->setOrganizationName(QStringLiteral("harbour"));
|
|
app->setApplicationName(QStringLiteral("hermes"));
|
|
app->setApplicationVersion(QStringLiteral("0.5.2"));
|
|
|
|
qDebug() << "harbour-hermes v0.5.2 build" << __DATE__ << __TIME__;
|
|
|
|
// Traduzioni: it/fr/de da /usr/share/harbour-hermes/translations, in base
|
|
// alla lingua di sistema (l'inglese e' la lingua sorgente: nessun .qm).
|
|
QTranslator translator;
|
|
if (translator.load(QLocale(), QStringLiteral("harbour-hermes"),
|
|
QStringLiteral("-"),
|
|
QStringLiteral("/usr/share/harbour-hermes/translations")))
|
|
app->installTranslator(&translator);
|
|
|
|
Settings settings;
|
|
ApiClient api(&settings);
|
|
ChatModel chat(&api);
|
|
Recorder recorder;
|
|
Player player;
|
|
VoiceRecorder voiceRec(&settings);
|
|
|
|
// Flusso voce: registrazione -> trascrizione; TTS pronto -> riproduzione.
|
|
QObject::connect(&recorder, &Recorder::finished, &api, &ApiClient::transcribeFile);
|
|
QObject::connect(&api, &ApiClient::ttsReady, &player, &Player::play);
|
|
|
|
QQuickView *view = SailfishApp::createView();
|
|
view->rootContext()->setContextProperty(QStringLiteral("appSettings"), &settings);
|
|
view->rootContext()->setContextProperty(QStringLiteral("api"), &api);
|
|
view->rootContext()->setContextProperty(QStringLiteral("chat"), &chat);
|
|
view->rootContext()->setContextProperty(QStringLiteral("recorder"), &recorder);
|
|
view->rootContext()->setContextProperty(QStringLiteral("player"), &player);
|
|
view->rootContext()->setContextProperty(QStringLiteral("voiceRec"), &voiceRec);
|
|
view->rootContext()->setContextProperty(QStringLiteral("appVersion"),
|
|
QCoreApplication::applicationVersion());
|
|
|
|
view->setSource(SailfishApp::pathTo(QStringLiteral("qml/harbour-hermes.qml")));
|
|
view->show();
|
|
|
|
return app->exec();
|
|
}
|