3 Commits
v0.2 ... master

Author SHA1 Message Date
Robin "Rogo" Goltermann
d7e1741833 possible fix for memory leak 2022-07-20 15:43:45 +02:00
Robin "Rogo" Goltermann
87261361b3 fixed missing include, added build folder to gitignore 2019-09-06 13:07:51 +02:00
082c061ac7 fixed recievcer state off after longer runtime 2018-12-23 18:37:56 +01:00
4 changed files with 181 additions and 222 deletions

3
.gitignore vendored
View File

@@ -34,3 +34,6 @@ Makefile*
*.qmlproject.user *.qmlproject.user
*.qmlproject.user.* *.qmlproject.user.*
# build
build*

View File

@@ -4,6 +4,7 @@
#include <QFile> #include <QFile>
#include <QTimer> #include <QTimer>
#include <QtNetwork/QNetworkReply> #include <QtNetwork/QNetworkReply>
#include <QRegularExpression>
class QNetworkReply; class QNetworkReply;
namespace yremote { namespace yremote {
@@ -17,6 +18,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
#endif #endif
mSettings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "RogoSoftware", "yremote"); mSettings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "RogoSoftware", "yremote");
mNetworkManager = new QNetworkAccessManager(this);
restoreGeometry(mSettings->value("geometry", saveGeometry()).toByteArray()); restoreGeometry(mSettings->value("geometry", saveGeometry()).toByteArray());
move(mSettings->value("pos", pos()).toPoint()); move(mSettings->value("pos", pos()).toPoint());
@@ -44,6 +46,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
delete ui; delete ui;
delete mSettings;
delete mNetworkManager;
} }
void MainWindow::sendCommand(QString cmd) void MainWindow::sendCommand(QString cmd)
@@ -53,18 +57,15 @@ void MainWindow::sendCommand(QString cmd)
request.setRawHeader("Content-Type", "text/xml; charset=UTF-8"); request.setRawHeader("Content-Type", "text/xml; charset=UTF-8");
request.setRawHeader("Content-Length", QByteArray::number(cmd.size())); request.setRawHeader("Content-Length", QByteArray::number(cmd.size()));
QNetworkAccessManager *networkManager = new QNetworkAccessManager(this); mNetworkManager->post(request, cmd.toUtf8());
networkManager->post(request, cmd.toUtf8()); connect(mNetworkManager, &QNetworkAccessManager::finished, this, &MainWindow::replyFinished);
connect(networkManager, &QNetworkAccessManager::finished, this, &MainWindow::replyFinished);
} }
void MainWindow::replyFinished(QNetworkReply* reply) void MainWindow::replyFinished(QNetworkReply* reply)
{ {
QString ans;
if(reply->error() == QNetworkReply::NoError) { if(reply->error() == QNetworkReply::NoError) {
QByteArray data = reply->readAll(); QByteArray data = reply->readAll();
ans = QString(data); mAnswer = QString(data);
} else { } else {
qDebug() << reply->url(); qDebug() << reply->url();
qDebug() << reply->errorString(); qDebug() << reply->errorString();
@@ -74,7 +75,7 @@ void MainWindow::replyFinished(QNetworkReply* reply)
// check power state // check power state
QRegularExpression regexPower("<Power_Control><Power>(.+)</Power></Power_Control>"); QRegularExpression regexPower("<Power_Control><Power>(.+)</Power></Power_Control>");
QRegularExpressionMatch matchPower = regexPower.match(ans); QRegularExpressionMatch matchPower = regexPower.match(mAnswer);
if (matchPower.hasMatch()) { if (matchPower.hasMatch()) {
if (matchPower.captured(1) == "On") mPowered = true; if (matchPower.captured(1) == "On") mPowered = true;
else if (matchPower.captured(1) == "Off") mPowered = false; else if (matchPower.captured(1) == "Off") mPowered = false;
@@ -82,14 +83,14 @@ void MainWindow::replyFinished(QNetworkReply* reply)
// check volume // check volume
QRegularExpression regexVolume("<Volume><Lvl><Val>(.+)</Val>"); QRegularExpression regexVolume("<Volume><Lvl><Val>(.+)</Val>");
QRegularExpressionMatch matchVolume = regexVolume.match(ans); QRegularExpressionMatch matchVolume = regexVolume.match(mAnswer);
if (matchVolume.hasMatch()) { if (matchVolume.hasMatch()) {
mVolume = matchVolume.captured(1).toInt(); mVolume = matchVolume.captured(1).toInt();
} }
// check input // check input
QRegularExpression regexInput("<Input><Input_Sel>(.+)</Input_Sel>"); QRegularExpression regexInput("<Input><Input_Sel>(.+)</Input_Sel>");
QRegularExpressionMatch matchInput = regexInput.match(ans); QRegularExpressionMatch matchInput = regexInput.match(mAnswer);
if (matchInput.hasMatch()) if (matchInput.hasMatch())
mInput = matchInput.captured(1); mInput = matchInput.captured(1);
@@ -222,7 +223,6 @@ void MainWindow::on_btn_spotify_clicked()
void MainWindow::on_btn_airplay_clicked() void MainWindow::on_btn_airplay_clicked()
{ {
// TODO
sendCommand("<YAMAHA_AV cmd=\"PUT\"><Main_Zone><Input><Input_Sel>IPOD</Input_Sel></Input></Main_Zone></YAMAHA_AV>"); sendCommand("<YAMAHA_AV cmd=\"PUT\"><Main_Zone><Input><Input_Sel>IPOD</Input_Sel></Input></Main_Zone></YAMAHA_AV>");
mInput = "IPOD"; mInput = "IPOD";
} }

View File

@@ -39,19 +39,20 @@ private slots:
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
QString mAddress;
QSettings* mSettings;
QTimer mTimerValCollect;
QTimer mTimerUpdateState;
QTimer mTimerUpdateAddress;
bool mPowered = false; bool mPowered = false;
int mVolume = 0; int mVolume = 0;
QString mInput; QString mInput;
const int TIME_VOL_COLLECT = 400; const int TIME_VOL_COLLECT = 400;
const int TIME_UPDATE_STATE = 5000; const int TIME_UPDATE_STATE = 10000;
const int TIME_UPDATE_ADDRESS = 1000; const int TIME_UPDATE_ADDRESS = 1000;
QString mAddress;
QTimer mTimerValCollect;
QTimer mTimerUpdateState;
QTimer mTimerUpdateAddress;
QSettings* mSettings = nullptr;
QNetworkAccessManager *mNetworkManager = nullptr;
QString mAnswer;
void sendCommand(QString cmd); void sendCommand(QString cmd);
void updateUi(); void updateUi();
@@ -61,6 +62,7 @@ private:
// QWidget interface // QWidget interface
protected: protected:
void moveEvent(QMoveEvent *) override; void moveEvent(QMoveEvent *) override;
}; };
} }

View File

@@ -6,16 +6,10 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>373</width> <width>359</width>
<height>166</height> <height>170</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy"> <property name="contextMenuPolicy">
<enum>Qt::NoContextMenu</enum> <enum>Qt::NoContextMenu</enum>
</property> </property>
@@ -24,53 +18,132 @@
</property> </property>
<property name="autoFillBackground"> <property name="autoFillBackground">
<bool>false</bool> <bool>false</bool>
</property> </property
<property name="unifiedTitleAndToolBarOnMac"> ><widget class="QWidget" name="centralWidget">
<bool>true</bool>
</property>
<widget class="QWidget" name="centralWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<property name="leftMargin"> <item row="2" column="0" rowspan="2" colspan="3">
<number>5</number> <widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Input</string>
</property> </property>
<property name="topMargin"> <property name="alignment">
<number>5</number> <set>Qt::AlignBottom|Qt::AlignHCenter</set>
</property> </property>
<property name="rightMargin"> <property name="flat">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item row="1" column="0">
<widget class="QPushButton" name="btn_onoff">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="autoFillBackground">
<bool>false</bool> <bool>false</bool>
</property> </property>
<widget class="QPushButton" name="btn_hdmi1">
<property name="geometry">
<rect>
<x>10</x>
<y>30</y>
<width>80</width>
<height>21</height>
</rect>
</property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"/> <string notr="true"/>
</property> </property>
<property name="text"> <property name="text">
<string>On</string> <string>HDMI 1</string>
</property> </property>
<property name="flat"> <property name="flat">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="input" stdset="0">
<string>HDMI1</string>
</property>
</widget>
<widget class="QPushButton" name="btn_hdmi2">
<property name="geometry">
<rect>
<x>10</x>
<y>60</y>
<width>80</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>HDMI 2</string>
</property>
<property name="input" stdset="0">
<string>HDMI2</string>
</property>
</widget>
<widget class="QPushButton" name="btn_hdmi3">
<property name="geometry">
<rect>
<x>10</x>
<y>90</y>
<width>80</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>HDMI 3</string>
</property>
<property name="input" stdset="0">
<string>HDMI3</string>
</property>
</widget>
<widget class="QPushButton" name="btn_spotify">
<property name="geometry">
<rect>
<x>110</x>
<y>30</y>
<width>80</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Spotify</string>
</property>
<property name="input" stdset="0">
<string>Spotify</string>
</property>
</widget>
<widget class="QPushButton" name="btn_airplay">
<property name="geometry">
<rect>
<x>110</x>
<y>60</y>
<width>80</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Airplay</string>
</property>
<property name="input" stdset="0">
<string>IPOD</string>
</property>
</widget>
<widget class="QPushButton" name="btn_audioin">
<property name="geometry">
<rect>
<x>110</x>
<y>90</y>
<width>80</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Audio In</string>
</property>
<property name="input" stdset="0">
<string>AUDIO</string>
</property>
</widget>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="1" column="2">
<widget class="QLabel" name="label">
<property name="text">
<string>Address:</string>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QDial" name="dial"> <widget class="QDial" name="dial">
<property name="minimum"> <property name="minimum">
<number>-805</number> <number>-805</number>
@@ -101,7 +174,33 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="1" column="0">
<widget class="QPushButton" name="btn_onoff">
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>On</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLineEdit" name="txt_address">
<property name="text">
<string>10.0.0.227</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QLabel" name="lbl_volume"> <widget class="QLabel" name="lbl_volume">
<property name="font"> <property name="font">
<font> <font>
@@ -123,166 +222,21 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1" rowspan="2" colspan="5">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="flat">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<property name="spacing">
<number>5</number>
</property>
<item row="0" column="0">
<widget class="QPushButton" name="btn_hdmi1">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>HDMI 1</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
<property name="input" stdset="0">
<string>HDMI1</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="btn_spotify">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Spotify</string>
</property>
<property name="input" stdset="0">
<string>Spotify</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="btn_hdmi2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>HDMI 2</string>
</property>
<property name="input" stdset="0">
<string>HDMI2</string>
</property>
</widget>
</item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QPushButton" name="btn_airplay"> <spacer name="horizontalSpacer">
<property name="sizePolicy"> <property name="orientation">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <enum>Qt::Horizontal</enum>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<property name="text"> <property name="sizeType">
<string>Airplay</string> <enum>QSizePolicy::MinimumExpanding</enum>
</property> </property>
<property name="input" stdset="0"> <property name="sizeHint" stdset="0">
<string>IPOD</string> <size>
<width>40</width>
<height>20</height>
</size>
</property> </property>
</widget> </spacer>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="btn_hdmi3">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>HDMI 3</string>
</property>
<property name="input" stdset="0">
<string>HDMI3</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btn_audioin">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Audio In</string>
</property>
<property name="input" stdset="0">
<string>AUDIO</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QLabel" name="label">
<property name="text">
<string>Address:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="txt_address">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>10.0.0.227</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="placeholderText">
<string>AV IP</string>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>