#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include class QNetworkReply; namespace yremote { MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { QString DEFAULT_ADDRESS = "10.0.0.227"; ui->setupUi(this); setFixedSize(size()); ui->txt_address->setText(DEFAULT_ADDRESS); mAddress = ui->txt_address->text(); connect(&mTimer, &QTimer::timeout, this, &MainWindow::sendVolume); mTimer.setSingleShot(true); // load initial data sendCommand("GetParam"); sendCommand("GetParam"); } MainWindow::~MainWindow() { delete ui; } void MainWindow::sendCommand(QString cmd) { QNetworkRequest request; request.setUrl("http://" + mAddress + ":80/YamahaRemoteControl/ctrl"); request.setRawHeader("Content-Type", "text/xml; charset=UTF-8"); request.setRawHeader("Content-Length", QByteArray::number(cmd.size())); QNetworkAccessManager *networkManager = new QNetworkAccessManager(this); networkManager->post(request, cmd.toUtf8()); connect(networkManager, &QNetworkAccessManager::finished, this, &MainWindow::replyFinished); } void MainWindow::replyFinished(QNetworkReply* reply) { QString ans; if(reply->error() == QNetworkReply::NoError) { QByteArray data = reply->readAll(); ans = QString(data); } else { qDebug() << reply->url(); qDebug() << reply->errorString(); return; } // check power state QRegularExpression regexPower("(.*)"); QRegularExpressionMatch matchPower = regexPower.match(ans); if (matchPower.hasMatch()) { if (matchPower.captured(1) == "On") mPowered = true; else if (matchPower.captured(1) == "Off") mPowered = false; } // check volume QRegularExpression regexVolume("(.*)"); QRegularExpressionMatch matchVolume = regexVolume.match(ans); if (matchVolume.hasMatch()) { mVolume = matchVolume.captured(1).toInt(); } reply->deleteLater(); updateUi(); } void MainWindow::updateUi() { ui->btn_onoff->setText(mPowered ? "On" : "Off"); ui->dial->setEnabled(mPowered); ui->dial->setValue(mVolume); ui->lbl_volume->setEnabled(mPowered); ui->btn_hdmi1->setEnabled(mPowered); ui->btn_hdmi2->setEnabled(mPowered); ui->btn_hdmi3->setEnabled(mPowered); ui->btn_spotify->setEnabled(mPowered); ui->btn_airplay->setEnabled(mPowered); ui->btn_audioin->setEnabled(mPowered); } void MainWindow::on_txt_address_textEdited(const QString &arg1) { mAddress = arg1; } void MainWindow::on_btn_onoff_clicked() { if (mPowered){ sendCommand("" "Standby" ""); } else { sendCommand("" "On" ""); } mPowered = !mPowered; updateUi(); } void MainWindow::on_dial_valueChanged(int value) { int d = value % 10; if (!( d == -5 || d == 0 )) value -= d; ui->lbl_volume->setText(QString::number(value)); ui->dial->setValue(value); mVolume = value; mTimer.start(WAITTIME); } void MainWindow::sendVolume() { sendCommand("" + QString::number(mVolume) + "1dB"); } }