/* * This file is part of openauto project. * Copyright (C) 2018 f1x.studio (Michal Szwaj) * * openauto 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. * openauto 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 openauto. If not, see . */ #include #include #include #include #include #include #include #include "autoapp/UI/MainWindow.hpp" #include "ui_mainwindow.h" namespace autoapp { namespace ui { MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui_(new Ui::MainWindow), webSocket(new QWebSocket), reconnectTimer(new QTimer(this)), shuttingDown(false) { ui_->setupUi(this); connect(ui_->pushButtonSettings, &QPushButton::clicked, this, &MainWindow::openSettings); connect(ui_->pushButtonExit, &QPushButton::clicked, this, &MainWindow::exit); connect(ui_->pushButtonToggleCursor, &QPushButton::clicked, this, &MainWindow::toggleCursor); connect(ui_->pushButtonWirelessConnection, &QPushButton::clicked, this, &MainWindow::openConnectDialog); // RADIO WEBSOCKET STUFF reconnectTimer->setSingleShot(true); reconnectTimer->setInterval(3000); connect(reconnectTimer, &QTimer::timeout, this, &MainWindow::connectWebSocket); connect(webSocket, &QWebSocket::connected, this, [this]() { qDebug() << "WebSocket connected"; webSocket->sendTextMessage(QStringLiteral("Hello from MainWindow WebSocket!")); }); connect(webSocket, &QWebSocket::textMessageReceived, this, [this](const QString &message) { qDebug() << "Message received:" << message; handleIncomingMessage(message); }); connect(webSocket, &QWebSocket::disconnected, this, [this]() { qDebug() << "WebSocket disconnected"; if (!shuttingDown) { qDebug() << "Attempting to reconnect in 3 seconds..."; reconnectTimer->start(); } }); connect(webSocket, QOverload::of(&QWebSocket::error), this, [this](QAbstractSocket::SocketError) { qDebug() << "WebSocket error:" << webSocket->errorString(); }); connectWebSocket(); } MainWindow::~MainWindow() { shuttingDown = true; webSocket->abort(); webSocket->deleteLater(); delete ui_; } } } void autoapp::ui::MainWindow::connectWebSocket() { QUrl url(QStringLiteral("ws://127.0.0.1:5000")); // Change to your real server qDebug() << "Connecting to WebSocket:" << url; webSocket->open(url); } void autoapp::ui::MainWindow::handleIncomingMessage(const QString &message) { qDebug() << "[Handler] Processing message:" << message; QJsonDocument doc = QJsonDocument::fromJson(message.toUtf8(), &error); QJsonObject rootObj = doc.object(); if (rootObj.contains("bluetooth")) { ui_->stackedWidget->setCurrentIndex(0); QJsonObject btObj = rootObj["bluetooth"].toObject(); ui_->btSongName->setText(btObj["song"].toString()); ui_->btArtistName->setText(btObj["artist"].toString()); ui_->btAlbumName->setText(btObj["album"].toString()); } else if (rootObj.contains("radio")) { ui_->stackedWidget->setCurrentIndex(1); QJsonObject radioObj = rootObj["radio"].toObject(); ui_->radioScreen->setText(radioObj["screen"].toString()); ui_->radioPreset->setText(radioObj["preset"].toString()); ui_->radioSecondLine->setText(radioObj["second"].toString()); } }