Switch to opendsh openauto

This commit is contained in:
marios8543 2025-04-21 19:04:52 +03:00
parent e7caeb4d49
commit 4ab5a162c4
9 changed files with 656 additions and 266 deletions

View File

@ -17,29 +17,157 @@
*/
#include <QApplication>
#include <QtWebSockets/QWebSocket>
#include <QDBusInterface>
#include <QDBusConnection>
#include <QDBusReply>
#include <QDBusMessage>
#include <QDebug>
#include "autoapp/UI/MainWindow.hpp"
#include "ui_mainwindow.h"
namespace autoapp
{
namespace ui
{
namespace ui
{
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui_(new Ui::MainWindow)
{
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);
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui_(new Ui::MainWindow), webSocket(new QWebSocket),
reconnectTimer(new QTimer(this)),
metadataTimer(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);
// BT NOW PLAYING UPDATE
connect(metadataTimer, &QTimer::timeout, this, &MainWindow::updateNowPlaying);
metadataTimer->start(1000); // refresh every 5 seconds
// 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<QAbstractSocket::SocketError>::of(&QWebSocket::error),
this, [this](QAbstractSocket::SocketError)
{ qDebug() << "WebSocket error:" << webSocket->errorString(); });
connectWebSocket();
}
MainWindow::~MainWindow()
{
shuttingDown = true;
webSocket->abort();
webSocket->deleteLater();
delete ui_;
}
}
}
MainWindow::~MainWindow()
void f1x::openauto::autoapp::ui::MainWindow::updateBtNowPlaying()
{
delete ui_;
QDBusInterface manager(
"org.bluez",
"/",
"org.freedesktop.DBus.ObjectManager",
QDBusConnection::systemBus());
if (!manager.isValid())
{
qDebug() << "Failed to connect to BlueZ D-Bus";
return;
}
QDBusReply<QVariantMap> reply = manager.call("GetManagedObjects");
if (!reply.isValid())
{
qDebug() << "D-Bus call failed:" << reply.error().message();
return;
}
QVariantMap allObjects = reply.value();
for (auto it = allObjects.begin(); it != allObjects.end(); ++it)
{
QString path = it.key();
QVariantMap interfaces = it.value().toMap();
if (interfaces.contains("org.bluez.MediaPlayer1"))
{
qDebug() << "Found MediaPlayer at:" << path;
QDBusInterface mediaPlayer(
"org.bluez",
path,
"org.freedesktop.DBus.Properties",
QDBusConnection::systemBus());
QDBusReply<QVariant> trackReply = mediaPlayer.call("Get", "org.bluez.MediaPlayer1", "Track");
if (trackReply.isValid())
{
QVariantMap track = trackReply.value().toMap();
QString artist = track["Artist"].toString();
QString title = track["Title"].toString();
QString album = track["Album"].toString();
QString status = statusReply.value().toString();
qDebug() << "Now playing:" << artist << "-" << title << "from" << album;
qDebug() << "Status:" << status;
if (status == "Playing")
{
ui_->stackedWidget->setCurrentIndex(0);
ui_->btSongName->setText(title);
ui_->btArtistName->setText(artist);
ui_->btAlbumName->setText(album);
}
else
{
ui_->stackedWidget->setCurrentIndex(1);
}
}
break;
}
}
}
void f1x::openauto::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 f1x::openauto::autoapp::ui::MainWindow::handleIncomingMessage(const QString &message)
{
// Your custom message processing logic here
qDebug() << "[Handler] Processing message:" << message;
}

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>480</height>
<width>1046</width>
<height>571</height>
</rect>
</property>
<property name="windowTitle">
@ -18,231 +18,477 @@
color: rgb(238, 238, 236);</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="labelWaitingForDevice">
<property name="geometry">
<rect>
<x>290</x>
<y>30</y>
<width>281</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:22pt; font-weight:600; font-style:italic; color:#3465a4;&quot;&gt;Waiting for device...&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>180</x>
<y>20</y>
<width>101</width>
<height>101</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/ico_androidauto.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QPushButton" name="pushButtonSettings">
<property name="geometry">
<rect>
<x>630</x>
<y>330</y>
<width>161</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>Settings</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="pushButtonExit">
<property name="geometry">
<rect>
<x>630</x>
<y>380</y>
<width>161</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>Exit</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
<widget class="QLabel" name="labelPluginDeviceText">
<property name="geometry">
<rect>
<x>340</x>
<y>70</y>
<width>301</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic; color:#eeeeec;&quot;&gt;Plug in your device to start AndroidAuto (tm).&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="labelProjectHomePage">
<property name="geometry">
<rect>
<x>10</x>
<y>440</y>
<width>271</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/f1xpl/openauto&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007af4;&quot;&gt;https://github.com/f1xpl/openauto&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="labelDistractionWarningIcon">
<property name="geometry">
<rect>
<x>30</x>
<y>170</y>
<width>31</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/ico_warning.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="labelDistractionWarning">
<property name="geometry">
<rect>
<x>80</x>
<y>130</y>
<width>531</width>
<height>101</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; color:#ef2929;&quot;&gt;WARNING!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; color:#ef2929;&quot;&gt;Distraction may cause accidents. Do not attempt to operate while driving. Always concentrate on driving and obey Traffic Regulations. You assume total responsibility and risk for using this software.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="labelCertificationWarning">
<property name="geometry">
<rect>
<x>80</x>
<y>240</y>
<width>531</width>
<height>121</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#ef2929;&quot;&gt;This software is not certified by Google Inc. It is created for R&amp;amp;D purposes and may not work as expected by the original authors. Do not use while driving.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; color:#ef2929;&quot;&gt;You use this software at your own risk.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="labelCertificationWarningIcon">
<property name="geometry">
<rect>
<x>30</x>
<y>270</y>
<width>31</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/ico_warning.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="labelCopyrightsInfoIcon">
<property name="geometry">
<rect>
<x>410</x>
<y>440</y>
<width>21</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;img src=&quot;:/ico_info.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="labelTrademark">
<property name="geometry">
<rect>
<x>440</x>
<y>440</y>
<width>351</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;AndroidAuto is registered trademark of Google Inc.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QPushButton" name="pushButtonToggleCursor">
<property name="geometry">
<rect>
<x>630</x>
<y>230</y>
<width>161</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>Toggle cursor</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="pushButtonWirelessConnection">
<property name="geometry">
<rect>
<x>630</x>
<y>280</y>
<width>161</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>Wireless connection</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>50</x>
<y>370</y>
<width>551</width>
<height>61</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;If you are looking for a Raspberry PI compatible 12V power supply equipped with an ignition switch, visit &lt;/span&gt;&lt;a href=&quot;https://bluewavestudio.io/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007af4;&quot;&gt;https://bluewavestudio.io&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="minimumSize">
<size>
<width>1024</width>
<height>500</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>1024</width>
<height>500</height>
</size>
</property>
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="page">
<widget class="QFrame" name="verticalFrame">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1021</width>
<height>500</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>500</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>1024</width>
<height>500</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item alignment="Qt::AlignVCenter">
<widget class="QFrame" name="verticalFrame">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item alignment="Qt::AlignHCenter">
<widget class="QWidget" name="btNowPlaying" native="true">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>300</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="label_6">
<property name="minimumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../assets/resources.qrc">:/bluetooth.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item alignment="Qt::AlignHCenter">
<widget class="QWidget" name="widget" native="true">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>300</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="spacing">
<number>10</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QLabel" name="label_8">
<property name="maximumSize">
<size>
<width>60</width>
<height>60</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../assets/resources.qrc">:/song.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="btSongName">
<property name="font">
<font>
<pointsize>24</pointsize>
</font>
</property>
<property name="text">
<string>Lorem Ipsum Dorem</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="label_9">
<property name="minimumSize">
<size>
<width>60</width>
<height>60</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>60</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../assets/resources.qrc">:/artist.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="btArtistName">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Example Artist</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QLabel" name="label_10">
<property name="maximumSize">
<size>
<width>60</width>
<height>60</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../assets/resources.qrc">:/album.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="btAlbumName">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Example Album</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignHCenter|Qt::AlignBottom">
<widget class="QLabel" name="btRadioScreen">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<pointsize>24</pointsize>
</font>
</property>
<property name="text">
<string>ABCD,EFGH</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QWidget" name="page_2">
<widget class="QFrame" name="horizontalFrame">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1024</width>
<height>550</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>550</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>1024</width>
<height>550</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item alignment="Qt::AlignHCenter|Qt::AlignVCenter">
<widget class="QWidget" name="horizontalWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="radioIcon">
<property name="minimumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../assets/resources.qrc">:/radio.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="radioScreen">
<property name="font">
<font>
<pointsize>40</pointsize>
</font>
</property>
<property name="text">
<string>ABCD,EFGH</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="radioPreset">
<property name="minimumSize">
<size>
<width>0</width>
<height>50</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<pointsize>20</pointsize>
</font>
</property>
<property name="text">
<string>0</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="radioSecondLine">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>50</height>
</size>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Tuner List</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</widget>
</item>
<item alignment="Qt::AlignHCenter|Qt::AlignBottom">
<widget class="QWidget" name="horizontalWidget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>1024</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>1024</width>
<height>50</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="pushButtonExit">
<property name="text">
<string>Exit</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonSettings">
<property name="text">
<string>Settings</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonWirelessConnection">
<property name="text">
<string>Wireless connection</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonToggleCursor">
<property name="text">
<string>Toggle cursor</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<tabstops>
@ -251,6 +497,8 @@ color: rgb(238, 238, 236);</string>
<tabstop>pushButtonSettings</tabstop>
<tabstop>pushButtonExit</tabstop>
</tabstops>
<resources/>
<resources>
<include location="../assets/resources.qrc"/>
</resources>
<connections/>
</ui>

BIN
autoapp/assets/album.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

BIN
autoapp/assets/artist.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 935 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

BIN
autoapp/assets/radio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 B

View File

@ -1,9 +1,14 @@
<RCC>
<qresource prefix="/">
<file>ico_androidauto.png</file>
<file>ico_warning.png</file>
<file>ico_setting.png</file>
<file>ico_info.png</file>
<file>aa_video.qml</file>
</qresource>
<qresource prefix="/">
<file>radio.png</file>
<file>album.png</file>
<file>artist.png</file>
<file>bluetooth.png</file>
<file>song.png</file>
<file>ico_androidauto.png</file>
<file>ico_warning.png</file>
<file>ico_setting.png</file>
<file>ico_info.png</file>
<file>aa_video.qml</file>
</qresource>
</RCC>

BIN
autoapp/assets/song.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

View File

@ -20,33 +20,42 @@
#include <memory>
#include <QMainWindow>
#include <QtWebSockets/QWebSocket>
namespace Ui
{
class MainWindow;
class MainWindow;
}
namespace autoapp
{
namespace ui
{
namespace ui
{
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
signals:
void exit();
void openSettings();
void toggleCursor();
void openConnectDialog();
signals:
void exit();
void openSettings();
void toggleCursor();
void openConnectDialog();
private:
Ui::MainWindow* ui_;
};
private slots:
void connectWebSocket();
void handleIncomingMessage(const QString &message);
void updateBtNowPlaying();
}
private:
Ui::MainWindow *ui_;
QWebSocket *webSocket;
QTimer *reconnectTimer;
bool shuttingDown;
};
}
}