From 181623406ef95b3d5615cd13b4fc132bbf314013 Mon Sep 17 00:00:00 2001 From: Poldi Date: Sat, 6 Jan 2024 12:31:09 +1100 Subject: [PATCH 01/22] UI Section Stage1 works --- data/icons.qrc | 5 +- data/icons/32x32/network-remote.png | Bin 0 -> 6482 bytes debian/control | 64 +++++++++++++ src/CMakeLists.txt | 7 ++ src/networkremote/networkremote.cpp | 7 ++ src/networkremote/networkremote.h | 16 ++++ src/settings/networkremotesettingspage.cpp | 78 ++++++++++++++++ src/settings/networkremotesettingspage.h | 43 +++++++++ src/settings/networkremotesettingspage.ui | 101 +++++++++++++++++++++ src/settings/settingsdialog.cpp | 2 + src/settings/settingsdialog.h | 1 + 11 files changed, 322 insertions(+), 2 deletions(-) create mode 100644 data/icons/32x32/network-remote.png create mode 100644 debian/control create mode 100644 src/networkremote/networkremote.cpp create mode 100644 src/networkremote/networkremote.h create mode 100644 src/settings/networkremotesettingspage.cpp create mode 100644 src/settings/networkremotesettingspage.h create mode 100644 src/settings/networkremotesettingspage.ui diff --git a/data/icons.qrc b/data/icons.qrc index 59e94625..d52dff38 100644 --- a/data/icons.qrc +++ b/data/icons.qrc @@ -290,8 +290,8 @@ icons/48x48/moodbar.png icons/48x48/love.png icons/48x48/subsonic.png - icons/48x48/tidal.png - icons/48x48/qobuz.png + icons/48x48/tidal.png + icons/48x48/qobuz.png icons/48x48/multimedia-player-ipod-standard-black.png icons/48x48/radio.png icons/48x48/somafm.png @@ -501,5 +501,6 @@ icons/22x22/somafm.png icons/22x22/radioparadise.png icons/22x22/musicbrainz.png + icons/32x32/network-remote.png diff --git a/data/icons/32x32/network-remote.png b/data/icons/32x32/network-remote.png new file mode 100644 index 0000000000000000000000000000000000000000..ad14456da928f93dfe78ba7744c0985753076e21 GIT binary patch literal 6482 zcmeHKc{r5o`=7BNJE2LIF_a~<8jQ)kT>kw6kXFT?QMjst(^Y0!Ct;I79O&U=#>vIW7BZoVjUnmnWkla(YV~G?nXSAAxr+h8Ojc=9J3O`#bh6Q{CQ_=DKT< zQpIzY%Y6Bsc?C7Y+gfJeH|L={XgA2Iwry=s8>NcQo#o5!iLOk{dXg*w=`0#WOC0FE zl5#<>eelC4^d5c)F{}2how@&rPpS4QF&UL1Sx^z=+3czq2Tm2KlK0n21XtUbYv;Ih zXNV+qLo4|3vgw;4P!AQ*U0DkO!@~ReD)!iOwU}C^(du-u#wNuJ zibSG*aDSzBi1^OZPKbMbsh7LmL{52uTi5xr_S7P`yz16bAI90ol1rSKVTuc3q5t)mjL@sw>FNiKyDEg0kMyhUSNYS< z)}(8vi`}gFT%LOmw_LAys?spz#6aU~v4Nnv&Rp#i1&jfIrx~B*%A$%0p&Q|u(hwIL zu)zJ!!XAwqokbDTV(Q!Sz-|ZY%sU~Fyc92&<|cM4M1T78MkeC!2Ih)iA=_s3SohWW zj~NZ5+pfh2F6q{nd`f(Cb1{2c;EpkTnuD^$s_ePGq?$~T@of(<1|ta}qbW(D*VSHG zf|}@-eJy5hqWn9|c7O))`|2+K@xFem#@0u5{+;hOOH1$TKO$to?=jhEbYBqCl%JFX zU7SBD21)D_UBaIB*>xuBW0k?(xtR}n_b?~NDm&^bMAUT~lfzyfQkf!*td*XPZ?4&E zvZysOYnWKu0y2N;vzfR}^hQ|ma8EWh-BeP<*YegOrud{xo;BZJs>g#()m|k>!)8yY z#3T<5SW0BQRs!uka{~H;T6T3;XlmAumH~^_-2oL3#rd_9$OrNY>mT1c*w|D$xw853 zF6YGkvzd4KJf3gOuaaLpe$DDdxlYyCwVrZ8*A-4k5koAvH!7JTfb*S~R{P_v(4lmG z?a^%8z0=11+$se|jO{J%rL7ECwxHVZ^w9Xn%=g=lXebY5HffXQiB*fHwz|Zk-M2cr zypIuUFA?TR=kmfHjymjGURBAZ^Orn5JAup7#S?x@osuzmICm26TPZ3>iMe6%G44t3 z*lwGtX*K7J$t@@2`Mc$fE}VqjgZ$2^4XwDxj}5GP=1@%57@U@Ro+bprv#qX6$pvWGv*3LtXKFH$>+I@Ztoy%_$w&x`{d@{Vjig%1jGcZYyXVE=q za@E2P^JYGKW1kfSo{uwqn)MhhAfTxfEGAl!=PO2!(^8$7Qn66IZMOQD@mA@5o#v`s zPUFDpWNLA9gZQFRhG+iRG5hBMvmH;ErVVRC9}{NEVlG$5gFxVYbW2NDdrQl2O&e&{ zMSHWi+ud}POItH3gUJhLW#Xt6Cw0>^al!JLu4<1&FX0QG{w3(7m?O8*_IktE7^UXb z*hJ;Ul#5Ui6SE@aB01l(4tB0Z7DQ_I-0g&(HTK&piPv_LE^JZ~Cf>*N-%UMo|B~ow z&qe7DC>e63;CxR8S@hJ0NS9G!bi}Et(S^VdIx)FmlO*oZnKbKGbK|S@nWBXZ^-2xx zju#yiA>Sj5*{^HwF^jS!mtz7t?v%aAQ17s)Ntu!i*kZZm6zq`B1)HVMmG?wnz#jyk z?etlAjud~fdhmCi|-r3K_SgC!-Cys~Qt z34e@^8Z{=w`OGhaU6xseHcLaz!0xI@2X;{}ryY0-GYmnZGRZUqH!K|3WkDcgQ*Jnk z5<=rZ$+SQ^g8+Nmat#KhQwcCneJ7MtxFs!!ZWqgEw1 zZdNv5A%G_WEQrGi$0L!^(b0%#Jp_{#h(sG186i;^BnATqG~nzQ28YCjGuY}ph%Xpc zG&Y4r59iRC3@8tiL}o^E2rw8h4*eEiSh$nZ-|!6fR~7(1kX%wY5{*D1!@`i?Td+CS zQ2@x-fc~omn+Uv&Al+zeW+aP3vyP%MIO^X+P$_@ghextP*VCa=khD-*7@*1qyrO?_ zX>0G~`nLs-fXJ-ik?y zr_bZLX1}c$^gWYI_*CX2{q zh7w>r2q@2Ty}Y5uUna$l&IUAMcoqM(=G|!#U!J}!fl&JT5EQyzws;cdixV~}ibh>` z1lWBUq6Co`fiz%!e=VqQa{7OnEE0}{p`x%9I0k2khGVh%C^!iq8&1LEXc#KmFhEb= z@JDnuGk_CKV$sY4flPsHfC5_22CB7ArS^~7(LppGPbdr)jzYsx`b0Dek458AhTG7< z83jXrO&G~r)!#BUM*bg8jMo*uYXgAY7a7oAfNq8SyIpiU19OZ1-)9vTC93yKClXF@hdHv*qRLS#o< zE6^J6Uvl+aE+F|O+|HW~0*P(l9bnM$A_yQ9=GZ$~3%>*lY}6LE&BVxqKmu%gD|4dP z&4y#X>BLA#XF^Y*?_lI=DO}8Sx_eH;D-*h@a7b9dH&e#izVD!+b&i(Jks)iJJwj+8wP{wNgQvVEP2MZeUwYXrPEw@8o*(jBOLm z{cnsXEA%S7A;5-&b{EQ;#o^WcFO`f;_#<>yBC`rna=&gPD}P+I3v1t9BGm*c!hF_O zwca}kkHx}UaZy9y-knL;`L&DacOvviKo%N;}Bpgo5hEEM^8RdR{$q&^b}sz;6P4}e!z2bSJUR|~e&zvZWxRQ%}P2Pry zq4 zTA)UIbJ~TeH~z72^>VJtKpIvlZN2(pH&?LC;bW$Nj#Kk5>u31xGkQQ1|qoj(`mL1t}YQyV- zUmgp!f>RM-KY{wKPqO(`1fskdg%U!~pK>KI^Tvefidv!Sk&mvsqg)V{m>x-6^!N=Ue zY}vyeJAc`qTX^lMomjPC?$MO6jV<$@ +Build-Depends: debhelper (>= 11), + git, + make, + cmake, + gcc, + g++, + protobuf-compiler, + libglib2.0-dev, + libdbus-1-dev, + libprotobuf-dev, + libboost-dev, + libsqlite3-dev, + libasound2-dev, + libpulse-dev, + libtag1-dev, + libicu-dev, + qt6-base-dev,qt6-base-dev-tools,qt6-tools-dev,qt6-tools-dev-tools,qt6-l10n-tools, + libgstreamer1.0-dev, + libgstreamer-plugins-base1.0-dev, + libcdio-dev, + libgpod-dev, + libmtp-dev, + libchromaprint-dev, + libfftw3-dev, + libebur128-dev +Standards-Version: 4.6.1 + +Package: strawberry +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + libqt6sql6-sqlite,qt6-qpa-plugins, + gstreamer1.0-plugins-base, + gstreamer1.0-plugins-good, + gstreamer1.0-alsa, + gstreamer1.0-pulseaudio +Homepage: http://www.strawberrymusicplayer.org/ +Description: music player and music collection organizer + Strawberry is a music player aimed at music collectors and audiophiles. + . + Features: + - Play and organize music + - Supports WAV, FLAC, WavPack, Ogg Vorbis, Speex, MPC, TrueAudio, AIFF, MP4, MP3 and ASF + - Audio CD playback + - Native desktop notifications + - Playlist management and playlists in multiple formats + - Smart and dynamic playlists + - Advanced audio output and device configuration for bit-perfect playback on Linux + - Edit tags on audio files + - Automatically retrieve tags from MusicBrainz + - Album cover art from Last.fm, Musicbrainz, Discogs, Musixmatch, Deezer, Tidal, Qobuz and Spotify + - Song lyrics from Genius, Musixmatch, ChartLyrics, lyrics.ovh, lololyrics.com, songlyrics.com, azlyrics.com, elyrics.net and lyricsmode.com + - Audio analyzer + - Audio equalizer + - Transfer music to mass-storage USB players, MTP compatible devices and iPod Nano/Classic + - Scrobbler with support for Last.fm, Libre.fm and ListenBrainz + - Streaming support for Subsonic-compatible servers + - Unofficial streaming support for Tidal and Qobuz + . + It is a fork of Clementine. The name is inspired by the band Strawbs. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b695dd6b..3f168552 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -205,6 +205,7 @@ set(SOURCES settings/appearancesettingspage.cpp settings/contextsettingspage.cpp settings/notificationssettingspage.cpp + settings/networkremotesettingspage.cpp dialogs/about.cpp dialogs/console.cpp @@ -291,6 +292,8 @@ set(SOURCES organize/organizedialog.cpp organize/organizeerrordialog.cpp + networkremote/networkremote.cpp + ) set(HEADERS @@ -446,6 +449,7 @@ set(HEADERS settings/appearancesettingspage.h settings/contextsettingspage.h settings/notificationssettingspage.h + settings/networkremotesettingspage.h dialogs/about.h dialogs/errordialog.h @@ -527,6 +531,8 @@ set(HEADERS organize/organizedialog.h organize/organizeerrordialog.h + networkremote/networkremote.h + ) set(UI @@ -571,6 +577,7 @@ set(UI settings/networkproxysettingspage.ui settings/appearancesettingspage.ui settings/notificationssettingspage.ui + settings/networkremotesettingspage.ui equalizer/equalizer.ui equalizer/equalizerslider.ui diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp new file mode 100644 index 00000000..d1b8a77c --- /dev/null +++ b/src/networkremote/networkremote.cpp @@ -0,0 +1,7 @@ +#include "networkremote.h" + +NetworkRemote::NetworkRemote(QObject *parent) + : QObject{parent} +{ + +} diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h new file mode 100644 index 00000000..11c1f39e --- /dev/null +++ b/src/networkremote/networkremote.h @@ -0,0 +1,16 @@ +#ifndef NETWORKREMOTE_H +#define NETWORKREMOTE_H + +#include + +class NetworkRemote : public QObject +{ + Q_OBJECT +public: + explicit NetworkRemote(QObject *parent = nullptr); + +signals: + +}; + +#endif // NETWORKREMOTE_H diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp new file mode 100644 index 00000000..43fbd276 --- /dev/null +++ b/src/settings/networkremotesettingspage.cpp @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "core/iconloader.h" +#include "config.h" +#include "qpushbutton.h" +#include "settings/settingsdialog.h" +#include "networkremotesettingspage.h" +#include "ui_networkremotesettingspage.h" + +const char *NetworkRemoteSettingsPage::kSettingsGroup = "Remote"; + +NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog *dialog, QWidget *parent) : + SettingsPage(dialog,parent), + ui_(new Ui_NetworkRemoteSettingsPage) +{ + ui_->setupUi(this); + setWindowIcon(IconLoader::Load("network-remote", true, 0,32)); + + ui_->portSelected->setRange(5050, 65535); + ui_->ip_address->setText("0.0.0.0"); + + QObject::connect(ui_->useRemoteClient,&QPushButton::clicked, this, &NetworkRemoteSettingsPage::EnableRemote); + QObject::connect(ui_->localConnectionsOnly,&QPushButton::clicked, this,&NetworkRemoteSettingsPage::LocalConnectButtonClicked); + QObject::connect(ui_->portSelected,static_cast(&QSpinBox::valueChanged),this,&NetworkRemoteSettingsPage::RemotePortSet); + +} + +NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() +{ + delete ui_; +} + +void NetworkRemoteSettingsPage::Load() +{ + Init(ui_->layout_networkremotesettingspage->parentWidget()); +} + +void NetworkRemoteSettingsPage::Save() +{ + +} + +void NetworkRemoteSettingsPage::EnableRemote() +{ + qLog(Debug) << "Enable Remote Code"; +} + +void NetworkRemoteSettingsPage::LocalConnectOnly() +{ + qLog(Debug) << "Local Connection Code"; +} + +void NetworkRemoteSettingsPage::DisplayIP() +{ + qLog(Debug) << "Display IP Code"; +} + +void NetworkRemoteSettingsPage::RemoteButtonClicked() +{ + qLog(Debug) << "Remote Button Code"; +} + +void NetworkRemoteSettingsPage::LocalConnectButtonClicked() +{ + qLog(Debug) << "ELocal Connection Code"; +} + +void NetworkRemoteSettingsPage::RemotePortSet() +{ + qLog(Debug) << "Remote Port Code"; +} diff --git a/src/settings/networkremotesettingspage.h b/src/settings/networkremotesettingspage.h new file mode 100644 index 00000000..a8c76cd8 --- /dev/null +++ b/src/settings/networkremotesettingspage.h @@ -0,0 +1,43 @@ +#ifndef NETWORKREMOTESETTINGSPAGE_H +#define NETWORKREMOTESETTINGSPAGE_H + +#include +#include +#include +#include + +#include "config.h" +#include "qlabel.h" +#include "settingspage.h" + +class SettingsDialog; +class Ui_NetworkRemoteSettingsPage; + +class NetworkRemoteSettingsPage : public SettingsPage +{ + Q_OBJECT + +public: + explicit NetworkRemoteSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); + ~NetworkRemoteSettingsPage() override; + + static const char *kSettingsGroup; + + void Load() override; + void Save() override; + + + +private: + Ui_NetworkRemoteSettingsPage *ui_; + void EnableRemote(); + void LocalConnectOnly(); + void DisplayIP(); + +private slots: + void RemoteButtonClicked(); + void LocalConnectButtonClicked(); + void RemotePortSet(); +}; + +#endif // NETWORKREMOTESETTINGSPAGE_H diff --git a/src/settings/networkremotesettingspage.ui b/src/settings/networkremotesettingspage.ui new file mode 100644 index 00000000..f191df5b --- /dev/null +++ b/src/settings/networkremotesettingspage.ui @@ -0,0 +1,101 @@ + + + NetworkRemoteSettingsPage + + + + 0 + 0 + 496 + 195 + + + + Remote + + + + + + + + Use Remote Network Client + + + + + + + + + + + + 20 + 20 + 101 + 17 + + + + Remote Port + + + + + + 160 + 10 + 71 + 26 + + + + + + + 20 + 60 + 231 + 23 + + + + Only allow local connections + + + + + + 30 + 110 + 141 + 17 + + + + Your IP Address is + + + + + + 240 + 110 + 91 + 17 + + + + + + + + + + + + + + + diff --git a/src/settings/settingsdialog.cpp b/src/settings/settingsdialog.cpp index b87a88fb..0a6a9919 100644 --- a/src/settings/settingsdialog.cpp +++ b/src/settings/settingsdialog.cpp @@ -64,6 +64,7 @@ #include "lyricssettingspage.h" #include "transcodersettingspage.h" #include "networkproxysettingspage.h" +#include "networkremotesettingspage.h" #include "appearancesettingspage.h" #include "contextsettingspage.h" #include "notificationssettingspage.h" @@ -140,6 +141,7 @@ SettingsDialog::SettingsDialog(Application *app, OSDBase *osd, QMainWindow *main AddPage(Page::Transcoding, new TranscoderSettingsPage(this, this), general); #endif AddPage(Page::Proxy, new NetworkProxySettingsPage(this, this), general); + AddPage(Page::Remote, new NetworkRemoteSettingsPage(this, this), general); QTreeWidgetItem *iface = AddCategory(tr("User interface")); AddPage(Page::Appearance, new AppearanceSettingsPage(this, this), iface); diff --git a/src/settings/settingsdialog.h b/src/settings/settingsdialog.h index 013890dd..9695157b 100644 --- a/src/settings/settingsdialog.h +++ b/src/settings/settingsdialog.h @@ -93,6 +93,7 @@ class SettingsDialog : public QDialog { Subsonic, Tidal, Qobuz, + Remote, }; enum Role { From 4cb917dc2a7ee2afb3a4f8ff2ee3f07b6aab7ccb Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Mon, 8 Jan 2024 16:44:50 +1100 Subject: [PATCH 02/22] UI Section Stage2 works --- src/settings/networkremotesettingspage.cpp | 68 +++++++++++++--------- src/settings/networkremotesettingspage.h | 9 +-- 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp index 43fbd276..8e1bf945 100644 --- a/src/settings/networkremotesettingspage.cpp +++ b/src/settings/networkremotesettingspage.cpp @@ -6,9 +6,9 @@ #include #include #include +#include #include "core/iconloader.h" -#include "config.h" #include "qpushbutton.h" #include "settings/settingsdialog.h" #include "networkremotesettingspage.h" @@ -23,13 +23,9 @@ NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog *dialog, QWi ui_->setupUi(this); setWindowIcon(IconLoader::Load("network-remote", true, 0,32)); - ui_->portSelected->setRange(5050, 65535); - ui_->ip_address->setText("0.0.0.0"); - - QObject::connect(ui_->useRemoteClient,&QPushButton::clicked, this, &NetworkRemoteSettingsPage::EnableRemote); - QObject::connect(ui_->localConnectionsOnly,&QPushButton::clicked, this,&NetworkRemoteSettingsPage::LocalConnectButtonClicked); - QObject::connect(ui_->portSelected,static_cast(&QSpinBox::valueChanged),this,&NetworkRemoteSettingsPage::RemotePortSet); - + QObject::connect(ui_->useRemoteClient,&QPushButton::clicked, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); + // QObject::connect(ui_->localConnectionsOnly,&QPushButton::clicked, this,&NetworkRemoteSettingsPage::LocalConnectButtonClicked); + // QObject::connect(ui_->portSelected,static_cast(&QSpinBox::valueChanged),this,&NetworkRemoteSettingsPage::RemotePortSet); } NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() @@ -39,22 +35,44 @@ NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() void NetworkRemoteSettingsPage::Load() { + ui_->portSelected->setRange(5050, 65535); + ui_->ip_address->setText("0.0.0.0"); + + s.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); + qLog(Debug) << "QSettings file is in" << s.fileName() << "Group" << kSettingsGroup; + if (s.contains("useRemote")){ + qLog(Debug) << "Loading QSettings"; + ui_->useRemoteClient->setChecked(s.value("useRemote", false).toBool()); + if (s.value("useRemote").toBool()){ + ui_->localConnectionsOnly->setCheckable(true); + ui_->localConnectionsOnly->setChecked(s.value("localOnly", false).toBool()); + ui_->portSelected->setValue(s.value("remotePort", 5050).toInt()); + } + else { + ui_->localConnectionsOnly->setCheckable(false); + ui_->portSelected->isReadOnly(); + } + } + else{ + qLog(Debug) << "First time run the Network Remote"; + s.setValue("useRemote", false); + s.setValue("localOnly",false); + s.setValue("remotePort",5050); + } + qLog(Debug) << s.allKeys(); + s.endGroup(); + Init(ui_->layout_networkremotesettingspage->parentWidget()); } void NetworkRemoteSettingsPage::Save() { - -} - -void NetworkRemoteSettingsPage::EnableRemote() -{ - qLog(Debug) << "Enable Remote Code"; -} - -void NetworkRemoteSettingsPage::LocalConnectOnly() -{ - qLog(Debug) << "Local Connection Code"; + qLog(Debug) << "Save Settings ================="; + s.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); + s.setValue("useRemote",ui_->useRemoteClient->isChecked()); + s.setValue("localOnly",ui_->localConnectionsOnly->isChecked()); + s.setValue("remotePort",int(ui_->portSelected->value())); + s.endGroup(); } void NetworkRemoteSettingsPage::DisplayIP() @@ -65,14 +83,8 @@ void NetworkRemoteSettingsPage::DisplayIP() void NetworkRemoteSettingsPage::RemoteButtonClicked() { qLog(Debug) << "Remote Button Code"; + Save(); + Load(); + // NetworkRemoteSettingsPage::Load(); } -void NetworkRemoteSettingsPage::LocalConnectButtonClicked() -{ - qLog(Debug) << "ELocal Connection Code"; -} - -void NetworkRemoteSettingsPage::RemotePortSet() -{ - qLog(Debug) << "Remote Port Code"; -} diff --git a/src/settings/networkremotesettingspage.h b/src/settings/networkremotesettingspage.h index a8c76cd8..e749a97f 100644 --- a/src/settings/networkremotesettingspage.h +++ b/src/settings/networkremotesettingspage.h @@ -6,8 +6,6 @@ #include #include -#include "config.h" -#include "qlabel.h" #include "settingspage.h" class SettingsDialog; @@ -30,14 +28,13 @@ public: private: Ui_NetworkRemoteSettingsPage *ui_; - void EnableRemote(); - void LocalConnectOnly(); + QSettings s; + //void EnableRemote(); + //void LocalConnectOnly(); void DisplayIP(); private slots: void RemoteButtonClicked(); - void LocalConnectButtonClicked(); - void RemotePortSet(); }; #endif // NETWORKREMOTESETTINGSPAGE_H From d8c2f1afe42d01bf16d899a94b8588ca4f41736b Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Tue, 9 Jan 2024 09:16:13 +1100 Subject: [PATCH 03/22] UI Section Buttons work --- src/settings/networkremotesettingspage.cpp | 13 +++---------- src/settings/networkremotesettingspage.ui | 2 +- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp index 8e1bf945..1fc68d74 100644 --- a/src/settings/networkremotesettingspage.cpp +++ b/src/settings/networkremotesettingspage.cpp @@ -24,8 +24,6 @@ NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog *dialog, QWi setWindowIcon(IconLoader::Load("network-remote", true, 0,32)); QObject::connect(ui_->useRemoteClient,&QPushButton::clicked, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); - // QObject::connect(ui_->localConnectionsOnly,&QPushButton::clicked, this,&NetworkRemoteSettingsPage::LocalConnectButtonClicked); - // QObject::connect(ui_->portSelected,static_cast(&QSpinBox::valueChanged),this,&NetworkRemoteSettingsPage::RemotePortSet); } NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() @@ -39,18 +37,17 @@ void NetworkRemoteSettingsPage::Load() ui_->ip_address->setText("0.0.0.0"); s.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); - qLog(Debug) << "QSettings file is in" << s.fileName() << "Group" << kSettingsGroup; if (s.contains("useRemote")){ - qLog(Debug) << "Loading QSettings"; ui_->useRemoteClient->setChecked(s.value("useRemote", false).toBool()); if (s.value("useRemote").toBool()){ ui_->localConnectionsOnly->setCheckable(true); - ui_->localConnectionsOnly->setChecked(s.value("localOnly", false).toBool()); + ui_->portSelected->setReadOnly(false); + ui_->localConnectionsOnly->setChecked(s.value("localOnly", true).toBool()); ui_->portSelected->setValue(s.value("remotePort", 5050).toInt()); } else { ui_->localConnectionsOnly->setCheckable(false); - ui_->portSelected->isReadOnly(); + ui_->portSelected->setReadOnly(true); } } else{ @@ -59,7 +56,6 @@ void NetworkRemoteSettingsPage::Load() s.setValue("localOnly",false); s.setValue("remotePort",5050); } - qLog(Debug) << s.allKeys(); s.endGroup(); Init(ui_->layout_networkremotesettingspage->parentWidget()); @@ -67,7 +63,6 @@ void NetworkRemoteSettingsPage::Load() void NetworkRemoteSettingsPage::Save() { - qLog(Debug) << "Save Settings ================="; s.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); s.setValue("useRemote",ui_->useRemoteClient->isChecked()); s.setValue("localOnly",ui_->localConnectionsOnly->isChecked()); @@ -82,9 +77,7 @@ void NetworkRemoteSettingsPage::DisplayIP() void NetworkRemoteSettingsPage::RemoteButtonClicked() { - qLog(Debug) << "Remote Button Code"; Save(); Load(); - // NetworkRemoteSettingsPage::Load(); } diff --git a/src/settings/networkremotesettingspage.ui b/src/settings/networkremotesettingspage.ui index f191df5b..a5bd23d3 100644 --- a/src/settings/networkremotesettingspage.ui +++ b/src/settings/networkremotesettingspage.ui @@ -24,7 +24,7 @@ - + From 2ea822d33c96ab12ccde6c0b45b71d3045b3c752 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:02:28 +1100 Subject: [PATCH 04/22] UI Phase1 completed --- src/settings/networkremotesettingspage.cpp | 26 ++++++++++++++-------- src/settings/networkremotesettingspage.h | 6 ----- src/settings/networkremotesettingspage.ui | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp index 1fc68d74..79875838 100644 --- a/src/settings/networkremotesettingspage.cpp +++ b/src/settings/networkremotesettingspage.cpp @@ -1,12 +1,6 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include #include "core/iconloader.h" #include "qpushbutton.h" @@ -57,6 +51,7 @@ void NetworkRemoteSettingsPage::Load() s.setValue("remotePort",5050); } s.endGroup(); + DisplayIP(); Init(ui_->layout_networkremotesettingspage->parentWidget()); } @@ -73,6 +68,19 @@ void NetworkRemoteSettingsPage::Save() void NetworkRemoteSettingsPage::DisplayIP() { qLog(Debug) << "Display IP Code"; + QString ipAddresses; + QList hostList = QNetworkInterface::allAddresses(); + + for (const QHostAddress &address : hostList) + { + if (address.protocol() == QAbstractSocket::IPv4Protocol && address.isLoopback() == false){ + if (!ipAddresses.isEmpty()){ + ipAddresses.append(", "); +} + ipAddresses = ipAddresses.append(address.toString()); + } + } + ui_->ip_address->setText(ipAddresses); } void NetworkRemoteSettingsPage::RemoteButtonClicked() diff --git a/src/settings/networkremotesettingspage.h b/src/settings/networkremotesettingspage.h index e749a97f..d877ce54 100644 --- a/src/settings/networkremotesettingspage.h +++ b/src/settings/networkremotesettingspage.h @@ -3,8 +3,6 @@ #include #include -#include -#include #include "settingspage.h" @@ -24,13 +22,9 @@ public: void Load() override; void Save() override; - - private: Ui_NetworkRemoteSettingsPage *ui_; QSettings s; - //void EnableRemote(); - //void LocalConnectOnly(); void DisplayIP(); private slots: diff --git a/src/settings/networkremotesettingspage.ui b/src/settings/networkremotesettingspage.ui index a5bd23d3..8a2e3181 100644 --- a/src/settings/networkremotesettingspage.ui +++ b/src/settings/networkremotesettingspage.ui @@ -82,7 +82,7 @@ 240 110 - 91 + 191 17 From d4f6ff208ec6a173e67f4b09a1ca543d747f38f1 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Wed, 10 Jan 2024 15:54:53 +1100 Subject: [PATCH 05/22] TCP Server start --- src/CMakeLists.txt | 2 ++ src/networkremote/tcpserver.cpp | 38 +++++++++++++++++++++++++++++++++ src/networkremote/tcpserver.h | 35 ++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/networkremote/tcpserver.cpp create mode 100644 src/networkremote/tcpserver.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3f168552..06184118 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -293,6 +293,7 @@ set(SOURCES organize/organizeerrordialog.cpp networkremote/networkremote.cpp + networkremote/tcpserver.cpp ) @@ -532,6 +533,7 @@ set(HEADERS organize/organizeerrordialog.h networkremote/networkremote.h + networkremote/tcpserver.h ) diff --git a/src/networkremote/tcpserver.cpp b/src/networkremote/tcpserver.cpp new file mode 100644 index 00000000..8181bef6 --- /dev/null +++ b/src/networkremote/tcpserver.cpp @@ -0,0 +1,38 @@ +#include "tcpserver.h" + +TcpServer::TcpServer(QObject *parent) + : QTcpServer{parent} +{ + +} + +TcpServer::~TcpServer() +{ + +} + +void TcpServer::SetupServer() +{ + +} + +void TcpServer::StartServer() +{ + +} + +void TcpServer::AcceptConnections() +{ + +} + +void TcpServer::StopServer() +{ + +} + +void TcpServer::CreateRemoteClient() +{ + +} + diff --git a/src/networkremote/tcpserver.h b/src/networkremote/tcpserver.h new file mode 100644 index 00000000..89abc285 --- /dev/null +++ b/src/networkremote/tcpserver.h @@ -0,0 +1,35 @@ +#ifndef TCPSERVER_H +#define TCPSERVER_H + +#include "core/shared_ptr.h" +#include +#include +#include + +class TcpServer : public QTcpServer +{ + Q_OBJECT +public: + static const char *kSettingsGroup; + + explicit TcpServer(QObject *parent = nullptr); + ~TcpServer(); + +signals: + +public slots: + void SetupServer(); + void StartServer(); + void AcceptConnections(); + void StopServer(); + void CreateRemoteClient(); + +private: + SharedPtr server_; + bool use_remote_; + bool use_local_only_; + qint16 port_; + +}; + +#endif // TCPSERVER_H From 8a087afdc6ddb5c2c839ac71371f35ec49caffc7 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:37:23 +1100 Subject: [PATCH 06/22] Tcp Server is up --- src/CMakeLists.txt | 2 + src/core/application.cpp | 17 +++++-- src/core/application.h | 2 + src/networkremote/networkremote.cpp | 57 ++++++++++++++++++++-- src/networkremote/networkremote.h | 27 +++++++++- src/networkremote/remoteclient.cpp | 7 +++ src/networkremote/remoteclient.h | 16 ++++++ src/networkremote/tcpserver.cpp | 33 ++++++++----- src/networkremote/tcpserver.h | 21 ++++---- src/settings/networkremotesettingspage.cpp | 23 +++++---- src/settings/networkremotesettingspage.h | 1 + 11 files changed, 167 insertions(+), 39 deletions(-) create mode 100644 src/networkremote/remoteclient.cpp create mode 100644 src/networkremote/remoteclient.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 06184118..02044f0e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -534,6 +534,8 @@ set(HEADERS networkremote/networkremote.h networkremote/tcpserver.h + networkremote/remoteclient.cpp + networkremote/remoteclient.h ) diff --git a/src/core/application.cpp b/src/core/application.cpp index 84c39b5a..4435f6de 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -101,6 +101,7 @@ #include "radios/radioservices.h" #include "radios/radiobackend.h" +#include "networkremote/networkremote.h" using std::make_shared; using namespace std::chrono_literals; @@ -201,8 +202,13 @@ class ApplicationImpl { moodbar_loader_([app]() { return new MoodbarLoader(app); }), moodbar_controller_([app]() { return new MoodbarController(app); }), #endif - lastfm_import_([app]() { return new LastFMImport(app->network()); }) - {} + lastfm_import_([app]() { return new LastFMImport(app->network()); }), + network_remote_([app]() { + NetworkRemote *remote = new NetworkRemote(app); + app->MoveToNewThread(remote); + return remote; + }) +{} Lazy tag_reader_client_; Lazy database_; @@ -228,6 +234,7 @@ class ApplicationImpl { Lazy moodbar_controller_; #endif Lazy lastfm_import_; + Lazy network_remote_; }; @@ -237,6 +244,7 @@ Application::Application(QObject *parent) device_finders()->Init(); collection()->Init(); tag_reader_client(); + network_remote()->Init(); QObject::connect(&*database(), &Database::Error, this, &Application::ErrorAdded); @@ -286,7 +294,8 @@ void Application::Exit() { << &*device_manager() #endif << &*internet_services() - << &*radio_services()->radio_backend(); + << &*radio_services()->radio_backend() + << &*network_remote(); QObject::connect(&*tag_reader_client(), &TagReaderClient::ExitFinished, this, &Application::ExitReceived); tag_reader_client()->ExitAsync(); @@ -355,7 +364,9 @@ SharedPtr Application::internet_services() const { return p_-> SharedPtr Application::radio_services() const { return p_->radio_services_.ptr(); } SharedPtr Application::scrobbler() const { return p_->scrobbler_.ptr(); } SharedPtr Application::lastfm_import() const { return p_->lastfm_import_.ptr(); } +SharedPtr Application::network_remote() const { return p_->network_remote_.ptr();} #ifdef HAVE_MOODBAR SharedPtr Application::moodbar_controller() const { return p_->moodbar_controller_.ptr(); } SharedPtr Application::moodbar_loader() const { return p_->moodbar_loader_.ptr(); } + #endif diff --git a/src/core/application.h b/src/core/application.h index 3e31e8ca..613b0b01 100644 --- a/src/core/application.h +++ b/src/core/application.h @@ -64,6 +64,7 @@ class RadioServices; class MoodbarController; class MoodbarLoader; #endif +class NetworkRemote; class Application : public QObject { Q_OBJECT @@ -106,6 +107,7 @@ class Application : public QObject { #endif SharedPtr lastfm_import() const; + SharedPtr network_remote() const; void Exit(); diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index d1b8a77c..64df2b7d 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -1,7 +1,58 @@ -#include "networkremote.h" -NetworkRemote::NetworkRemote(QObject *parent) - : QObject{parent} +#include +#include + +#include "networkremote/networkremote.h" +#include "core/logging.h" + +class TcpServer; + +const char *NetworkRemote::kSettingsGroup = "Remote"; + +NetworkRemote::NetworkRemote(Application* app, QObject *parent) + : QObject(parent), + app_(app), + original_thread_(nullptr) +{ + setObjectName("Network Remote"); + original_thread_ = thread(); +} + +NetworkRemote::~NetworkRemote() +{ +} + +void NetworkRemote::Init() +{ + LoadSettings(); + if (use_remote_){ + server_->StartServer(ipAddr_,remote_port_); + } + +} + +void NetworkRemote::LoadSettings() +{ + QSettings s; + s.beginGroup(NetworkRemote::kSettingsGroup); + use_remote_ = s.value("useRemote").toBool(); + local_only_ = s.value("localOnly").toBool(); + remote_port_ = s.value("remotePort").toInt(); + ipAddr_.setAddress(s.value("ipAddress").toString()); + s.endGroup(); +} + +void NetworkRemote::start() +{ + +} + +void NetworkRemote::stop() +{ + +} + +void NetworkRemote::newConnection() { } diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index 11c1f39e..623388a1 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -2,15 +2,40 @@ #define NETWORKREMOTE_H #include +#include +#include +#include +#include "tcpserver.h" + +class Application; +class QThread; class NetworkRemote : public QObject { Q_OBJECT public: - explicit NetworkRemote(QObject *parent = nullptr); + static const char* kSettingsGroup; + explicit NetworkRemote(Application* app, QObject *parent = nullptr); + ~NetworkRemote() override; + void Init(); + void LoadSettings(); + +public slots: + void start(); + void stop(); + void newConnection(); signals: +private: + Application *app_; + static NetworkRemote *sInstance; + bool use_remote_; + bool local_only_; + int remote_port_; + QHostAddress ipAddr_; + TcpServer *server_ = new TcpServer(); + QThread *original_thread_; }; #endif // NETWORKREMOTE_H diff --git a/src/networkremote/remoteclient.cpp b/src/networkremote/remoteclient.cpp new file mode 100644 index 00000000..b6cd0f82 --- /dev/null +++ b/src/networkremote/remoteclient.cpp @@ -0,0 +1,7 @@ +#include "remoteclient.h" + +RemoteClient::RemoteClient(QObject *parent) + : QObject{parent} +{ + +} diff --git a/src/networkremote/remoteclient.h b/src/networkremote/remoteclient.h new file mode 100644 index 00000000..3890e71a --- /dev/null +++ b/src/networkremote/remoteclient.h @@ -0,0 +1,16 @@ +#ifndef REMOTECLIENT_H +#define REMOTECLIENT_H + +#include + +class RemoteClient : public QObject +{ + Q_OBJECT +public: + explicit RemoteClient(QObject *parent = nullptr); + +signals: + +}; + +#endif // REMOTECLIENT_H diff --git a/src/networkremote/tcpserver.cpp b/src/networkremote/tcpserver.cpp index 8181bef6..2a5b8073 100644 --- a/src/networkremote/tcpserver.cpp +++ b/src/networkremote/tcpserver.cpp @@ -1,34 +1,38 @@ #include "tcpserver.h" +#include "core/logging.h" TcpServer::TcpServer(QObject *parent) - : QTcpServer{parent} + : QObject{parent} { - + server_ = new QTcpServer(this); + connect(server_, SIGNAL(newConnection()),this,SLOT(newConnection())); } TcpServer::~TcpServer() { - } -void TcpServer::SetupServer() +void TcpServer::StartServer(QHostAddress ipAddr, int port) { + bool ok = false; + ok = server_->listen(ipAddr, port); + if (ok){ + qLog(Debug) << "Server Started"; + } } -void TcpServer::StartServer() +void TcpServer::NewConnection() { - -} - -void TcpServer::AcceptConnections() -{ - + //QTcpSocket *socket = server_->nextPendingConnection(); + socket_ = server_->nextPendingConnection(); + qLog(Debug) << "New Socket"; + qLog(Debug) << socket_->currentReadChannel(); } void TcpServer::StopServer() { - + server_->close(); } void TcpServer::CreateRemoteClient() @@ -36,3 +40,8 @@ void TcpServer::CreateRemoteClient() } +bool TcpServer::ServerUp() +{ + return server_->isListening(); +} + diff --git a/src/networkremote/tcpserver.h b/src/networkremote/tcpserver.h index 89abc285..ab29ba74 100644 --- a/src/networkremote/tcpserver.h +++ b/src/networkremote/tcpserver.h @@ -1,12 +1,13 @@ #ifndef TCPSERVER_H #define TCPSERVER_H -#include "core/shared_ptr.h" #include +#include +#include #include #include -class TcpServer : public QTcpServer +class TcpServer : public QObject { Q_OBJECT public: @@ -15,20 +16,20 @@ public: explicit TcpServer(QObject *parent = nullptr); ~TcpServer(); -signals: + bool ServerUp(); public slots: - void SetupServer(); - void StartServer(); - void AcceptConnections(); + void NewConnection(); + void StartServer(QHostAddress ipAddr, int port); void StopServer(); void CreateRemoteClient(); + +signals: + private: - SharedPtr server_; - bool use_remote_; - bool use_local_only_; - qint16 port_; + QTcpServer *server_; + QTcpSocket *socket_; }; diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp index 79875838..72056d12 100644 --- a/src/settings/networkremotesettingspage.cpp +++ b/src/settings/networkremotesettingspage.cpp @@ -5,7 +5,7 @@ #include "core/iconloader.h" #include "qpushbutton.h" #include "settings/settingsdialog.h" -#include "networkremotesettingspage.h" +#include "settings/networkremotesettingspage.h" #include "ui_networkremotesettingspage.h" const char *NetworkRemoteSettingsPage::kSettingsGroup = "Remote"; @@ -30,6 +30,7 @@ void NetworkRemoteSettingsPage::Load() ui_->portSelected->setRange(5050, 65535); ui_->ip_address->setText("0.0.0.0"); + s.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); if (s.contains("useRemote")){ ui_->useRemoteClient->setChecked(s.value("useRemote", false).toBool()); @@ -49,6 +50,7 @@ void NetworkRemoteSettingsPage::Load() s.setValue("useRemote", false); s.setValue("localOnly",false); s.setValue("remotePort",5050); + s.setValue("ipAddress","0.0.0.0"); } s.endGroup(); DisplayIP(); @@ -62,25 +64,26 @@ void NetworkRemoteSettingsPage::Save() s.setValue("useRemote",ui_->useRemoteClient->isChecked()); s.setValue("localOnly",ui_->localConnectionsOnly->isChecked()); s.setValue("remotePort",int(ui_->portSelected->value())); + s.setValue("ipAddress",ipAddr_); s.endGroup(); } void NetworkRemoteSettingsPage::DisplayIP() { - qLog(Debug) << "Display IP Code"; - QString ipAddresses; + bool found = false; QList hostList = QNetworkInterface::allAddresses(); for (const QHostAddress &address : hostList) { - if (address.protocol() == QAbstractSocket::IPv4Protocol && address.isLoopback() == false){ - if (!ipAddresses.isEmpty()){ - ipAddresses.append(", "); -} - ipAddresses = ipAddresses.append(address.toString()); - } + if (address.protocol() == QAbstractSocket::IPv4Protocol && address.isLoopback() == false && !found){ + // NOTE: this code currently only takes the first ip address it finds + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + qInfo("Warning: The code only pickst the first IPv4 address"); + found = true; + ipAddr_ = address.toString(); + } } - ui_->ip_address->setText(ipAddresses); + ui_->ip_address->setText(ipAddr_); } void NetworkRemoteSettingsPage::RemoteButtonClicked() diff --git a/src/settings/networkremotesettingspage.h b/src/settings/networkremotesettingspage.h index d877ce54..de798208 100644 --- a/src/settings/networkremotesettingspage.h +++ b/src/settings/networkremotesettingspage.h @@ -26,6 +26,7 @@ private: Ui_NetworkRemoteSettingsPage *ui_; QSettings s; void DisplayIP(); + QString ipAddr_; private slots: void RemoteButtonClicked(); From b38d20a3a7d39ce1ed08ba08a1c73748736c87c2 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Fri, 19 Jan 2024 09:01:17 +1100 Subject: [PATCH 07/22] Messages Stage1 --- src/CMakeLists.txt | 2 +- src/networkremote/networkremote.cpp | 15 ++++++++++----- src/networkremote/networkremote.h | 2 +- src/networkremote/tcpserver.cpp | 11 +++++------ src/networkremote/tcpserver.h | 3 +-- src/settings/networkremotesettingspage.cpp | 4 ++-- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 02044f0e..6e58de93 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -294,6 +294,7 @@ set(SOURCES networkremote/networkremote.cpp networkremote/tcpserver.cpp + networkremote/remoteclient.cpp ) @@ -534,7 +535,6 @@ set(HEADERS networkremote/networkremote.h networkremote/tcpserver.h - networkremote/remoteclient.cpp networkremote/remoteclient.h ) diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index 64df2b7d..4afd8a1f 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -26,9 +26,11 @@ void NetworkRemote::Init() { LoadSettings(); if (use_remote_){ - server_->StartServer(ipAddr_,remote_port_); + start(); + } + else { + stop(); } - } void NetworkRemote::LoadSettings() @@ -44,15 +46,18 @@ void NetworkRemote::LoadSettings() void NetworkRemote::start() { - + server_->StartServer(ipAddr_,remote_port_); } void NetworkRemote::stop() { - + if (server_->ServerUp()){ + server_->StopServer(); + } } -void NetworkRemote::newConnection() +void NetworkRemote::useRemoteClicked() { } + diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index 623388a1..c31f0e17 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -23,7 +23,7 @@ public: public slots: void start(); void stop(); - void newConnection(); + void useRemoteClicked(); signals: diff --git a/src/networkremote/tcpserver.cpp b/src/networkremote/tcpserver.cpp index 2a5b8073..8876c8b9 100644 --- a/src/networkremote/tcpserver.cpp +++ b/src/networkremote/tcpserver.cpp @@ -5,7 +5,7 @@ TcpServer::TcpServer(QObject *parent) : QObject{parent} { server_ = new QTcpServer(this); - connect(server_, SIGNAL(newConnection()),this,SLOT(newConnection())); + connect(server_,&QTcpServer::newConnection, this, &TcpServer::NewTcpConnection); } TcpServer::~TcpServer() @@ -15,24 +15,23 @@ TcpServer::~TcpServer() void TcpServer::StartServer(QHostAddress ipAddr, int port) { bool ok = false; - ok = server_->listen(ipAddr, port); if (ok){ - qLog(Debug) << "Server Started"; + qLog(Debug) << "TCP Server Started ----------------------"; } } -void TcpServer::NewConnection() +void TcpServer::NewTcpConnection() { //QTcpSocket *socket = server_->nextPendingConnection(); socket_ = server_->nextPendingConnection(); - qLog(Debug) << "New Socket"; - qLog(Debug) << socket_->currentReadChannel(); + qLog(Debug) << "New Socket -------------------"; } void TcpServer::StopServer() { server_->close(); + qLog(Debug) << "TCP Server Stopped ----------------------"; } void TcpServer::CreateRemoteClient() diff --git a/src/networkremote/tcpserver.h b/src/networkremote/tcpserver.h index ab29ba74..8f516642 100644 --- a/src/networkremote/tcpserver.h +++ b/src/networkremote/tcpserver.h @@ -19,7 +19,7 @@ public: bool ServerUp(); public slots: - void NewConnection(); + void NewTcpConnection(); void StartServer(QHostAddress ipAddr, int port); void StopServer(); void CreateRemoteClient(); @@ -30,7 +30,6 @@ signals: private: QTcpServer *server_; QTcpSocket *socket_; - }; #endif // TCPSERVER_H diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp index 72056d12..a2ce5182 100644 --- a/src/settings/networkremotesettingspage.cpp +++ b/src/settings/networkremotesettingspage.cpp @@ -7,6 +7,7 @@ #include "settings/settingsdialog.h" #include "settings/networkremotesettingspage.h" #include "ui_networkremotesettingspage.h" +#include "networkremote/networkremote.h" const char *NetworkRemoteSettingsPage::kSettingsGroup = "Remote"; @@ -17,7 +18,7 @@ NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog *dialog, QWi ui_->setupUi(this); setWindowIcon(IconLoader::Load("network-remote", true, 0,32)); - QObject::connect(ui_->useRemoteClient,&QPushButton::clicked, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); + connect(ui_->useRemoteClient,&QPushButton::clicked, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); } NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() @@ -30,7 +31,6 @@ void NetworkRemoteSettingsPage::Load() ui_->portSelected->setRange(5050, 65535); ui_->ip_address->setText("0.0.0.0"); - s.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); if (s.contains("useRemote")){ ui_->useRemoteClient->setChecked(s.value("useRemote", false).toBool()); From fcb11f04055af7cfa84c908c2c30ddb86c19e3a4 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Thu, 1 Feb 2024 12:00:21 +1100 Subject: [PATCH 08/22] Gui comms works. Sort of --- CMakeLists.txt | 1 + src/CMakeLists.txt | 2 + src/core/application.cpp | 8 +- src/core/application.h | 4 + src/networkremote/CMakeLists.txt | 23 ++++++ src/networkremote/networkremote.cpp | 31 ++++---- src/networkremote/networkremote.h | 11 +-- src/networkremote/networkremotehelper.cpp | 35 +++++++++ src/networkremote/networkremotehelper.h | 28 +++++++ src/networkremote/proto/CMakeLists.txt | 7 ++ src/networkremote/proto/RemoteMessages.proto | 77 ++++++++++++++++++++ src/settings/networkremotesettingspage.cpp | 32 ++++++-- src/settings/networkremotesettingspage.h | 7 ++ 13 files changed, 233 insertions(+), 33 deletions(-) create mode 100644 src/networkremote/CMakeLists.txt create mode 100644 src/networkremote/networkremotehelper.cpp create mode 100644 src/networkremote/networkremotehelper.h create mode 100644 src/networkremote/proto/CMakeLists.txt create mode 100644 src/networkremote/proto/RemoteMessages.proto diff --git a/CMakeLists.txt b/CMakeLists.txt index 98259455..344c89f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -529,6 +529,7 @@ add_subdirectory(dist) add_subdirectory(ext/libstrawberry-common) add_subdirectory(ext/libstrawberry-tagreader) add_subdirectory(ext/strawberry-tagreader) +add_subdirectory(src/networkremote) if(HAVE_MOODBAR) add_subdirectory(ext/gstmoodbar) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6e58de93..761d4bdf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -295,6 +295,7 @@ set(SOURCES networkremote/networkremote.cpp networkremote/tcpserver.cpp networkremote/remoteclient.cpp + networkremote/networkremotehelper.cpp ) @@ -536,6 +537,7 @@ set(HEADERS networkremote/networkremote.h networkremote/tcpserver.h networkremote/remoteclient.h + networkremote/networkremotehelper.h ) diff --git a/src/core/application.cpp b/src/core/application.cpp index 4435f6de..4bcc7d35 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -101,7 +101,9 @@ #include "radios/radioservices.h" #include "radios/radiobackend.h" + #include "networkremote/networkremote.h" +#include "networkremote/networkremotehelper.h" using std::make_shared; using namespace std::chrono_literals; @@ -207,7 +209,8 @@ class ApplicationImpl { NetworkRemote *remote = new NetworkRemote(app); app->MoveToNewThread(remote); return remote; - }) + }), + network_remote_helper_([app](){ return new NetworkRemoteHelper(app); }) {} Lazy tag_reader_client_; @@ -235,6 +238,7 @@ class ApplicationImpl { #endif Lazy lastfm_import_; Lazy network_remote_; + Lazy network_remote_helper_; }; @@ -245,6 +249,7 @@ Application::Application(QObject *parent) collection()->Init(); tag_reader_client(); network_remote()->Init(); + network_remote_helper(); QObject::connect(&*database(), &Database::Error, this, &Application::ErrorAdded); @@ -365,6 +370,7 @@ SharedPtr Application::radio_services() const { return p_->radio_ SharedPtr Application::scrobbler() const { return p_->scrobbler_.ptr(); } SharedPtr Application::lastfm_import() const { return p_->lastfm_import_.ptr(); } SharedPtr Application::network_remote() const { return p_->network_remote_.ptr();} +SharedPtr Application::network_remote_helper() const { return p_->network_remote_helper_.ptr();} #ifdef HAVE_MOODBAR SharedPtr Application::moodbar_controller() const { return p_->moodbar_controller_.ptr(); } SharedPtr Application::moodbar_loader() const { return p_->moodbar_loader_.ptr(); } diff --git a/src/core/application.h b/src/core/application.h index 613b0b01..92f8fb8d 100644 --- a/src/core/application.h +++ b/src/core/application.h @@ -64,7 +64,9 @@ class RadioServices; class MoodbarController; class MoodbarLoader; #endif + class NetworkRemote; +class NetworkRemoteHelper; class Application : public QObject { Q_OBJECT @@ -107,7 +109,9 @@ class Application : public QObject { #endif SharedPtr lastfm_import() const; + SharedPtr network_remote() const; + SharedPtr network_remote_helper() const; void Exit(); diff --git a/src/networkremote/CMakeLists.txt b/src/networkremote/CMakeLists.txt new file mode 100644 index 00000000..81664af2 --- /dev/null +++ b/src/networkremote/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.14) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +#find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) +#find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) + +add_subdirectory(proto) + +#target_link_libraries(MyProtoBuffTest Qt${QT_VERSION_MAJOR}::Core) +#target_include_directories(MyProtoBuffTest PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") + + +#include(GNUInstallDirs) +#install(TARGETS MyProtoBuffTest +# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index 4afd8a1f..c5f8ffc2 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -5,6 +5,7 @@ #include "networkremote/networkremote.h" #include "core/logging.h" + class TcpServer; const char *NetworkRemote::kSettingsGroup = "Remote"; @@ -20,20 +21,10 @@ NetworkRemote::NetworkRemote(Application* app, QObject *parent) NetworkRemote::~NetworkRemote() { + stopTcpServer(); } void NetworkRemote::Init() -{ - LoadSettings(); - if (use_remote_){ - start(); - } - else { - stop(); - } -} - -void NetworkRemote::LoadSettings() { QSettings s; s.beginGroup(NetworkRemote::kSettingsGroup); @@ -42,22 +33,26 @@ void NetworkRemote::LoadSettings() remote_port_ = s.value("remotePort").toInt(); ipAddr_.setAddress(s.value("ipAddress").toString()); s.endGroup(); + + if (use_remote_){ + startTcpServer(); + } + else { + stopTcpServer(); + } } -void NetworkRemote::start() +void NetworkRemote::startTcpServer() { server_->StartServer(ipAddr_,remote_port_); + qLog(Debug) << "TcpServer started on IP " << ipAddr_<< " and port" << remote_port_; } -void NetworkRemote::stop() +void NetworkRemote::stopTcpServer() { if (server_->ServerUp()){ + qLog(Debug) << "TcpServer stopped "; server_->StopServer(); } } -void NetworkRemote::useRemoteClicked() -{ - -} - diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index c31f0e17..2338afb0 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -17,19 +17,14 @@ public: static const char* kSettingsGroup; explicit NetworkRemote(Application* app, QObject *parent = nullptr); ~NetworkRemote() override; - void Init(); - void LoadSettings(); public slots: - void start(); - void stop(); - void useRemoteClicked(); - -signals: + void Init(); + void startTcpServer(); + void stopTcpServer(); private: Application *app_; - static NetworkRemote *sInstance; bool use_remote_; bool local_only_; int remote_port_; diff --git a/src/networkremote/networkremotehelper.cpp b/src/networkremote/networkremotehelper.cpp new file mode 100644 index 00000000..9cf46b8d --- /dev/null +++ b/src/networkremote/networkremotehelper.cpp @@ -0,0 +1,35 @@ +#include "networkremote/networkremotehelper.h" + +#include "core/application.h" +#include "core/logging.h" +#include "networkremote/networkremote.h" + +NetworkRemoteHelper* NetworkRemoteHelper::sInstance = nullptr; + +NetworkRemoteHelper::NetworkRemoteHelper(Application* app, QObject* parent) + : QObject(parent), + app_(app) +{ + app_ = app; + sInstance = this; + + QObject::connect(this,&NetworkRemoteHelper::ReloadSettingsSig, &*app->network_remote(), &NetworkRemote::Init,Qt::QueuedConnection); +} + +NetworkRemoteHelper::~NetworkRemoteHelper() +{} + +void NetworkRemoteHelper::ReloadSettings() +{ + qLog(Debug) << "NetworkRemoteHelper called ----------------------"; + emit ReloadSettingsSig(); +} + +NetworkRemoteHelper* NetworkRemoteHelper::Instance() { + if (!sInstance) { + // Error + return nullptr; + } + return sInstance; +} + diff --git a/src/networkremote/networkremotehelper.h b/src/networkremote/networkremotehelper.h new file mode 100644 index 00000000..1c32ffee --- /dev/null +++ b/src/networkremote/networkremotehelper.h @@ -0,0 +1,28 @@ +#ifndef NETWORKREMOTEHELPER_H +#define NETWORKREMOTEHELPER_H + +#include + +#include "networkremote.h" + +class Application; + +class NetworkRemoteHelper : public QObject { + Q_OBJECT + public: + static NetworkRemoteHelper* Instance(); + + NetworkRemoteHelper(Application* app, QObject *parent = nullptr); + ~NetworkRemoteHelper(); + + void ReloadSettings(); + + signals: + void ReloadSettingsSig(); + + private: + static NetworkRemoteHelper* sInstance; + Application* app_; +}; + +#endif // NETWORKREMOTEHELPER_H diff --git a/src/networkremote/proto/CMakeLists.txt b/src/networkremote/proto/CMakeLists.txt new file mode 100644 index 00000000..a887ffd8 --- /dev/null +++ b/src/networkremote/proto/CMakeLists.txt @@ -0,0 +1,7 @@ +INCLUDE(FindProtobuf) +FIND_PACKAGE(Protobuf REQUIRED) +protobuf_generate_cpp(PROTO_SRC PROTO_HEADER RemoteMessages.proto) +ADD_LIBRARY(proto ${PROTO_HEADER} ${PROTO_SRC}) + +target_include_directories(proto PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + diff --git a/src/networkremote/proto/RemoteMessages.proto b/src/networkremote/proto/RemoteMessages.proto new file mode 100644 index 00000000..03e9d6a0 --- /dev/null +++ b/src/networkremote/proto/RemoteMessages.proto @@ -0,0 +1,77 @@ +syntax = "proto3"; + +package network.remote; + +enum MsgType { + UNKNOWN = 0; + + // Client messages + CONNECT = 1; + DISCONNECT = 2; + NEXT = 3; + PREVIOUS = 4; + PAUSE = 5; + STOP = 6; + + // Server messages + INFO = 7; +} + +message SongMetadata{ + enum Type { + UNKNOWN = 0; + ASF = 1; + FLAC = 2; + MP4 = 3; + MPC = 4; + MPEG = 5; + OGGFLAC = 6; + OGGSPEEX = 7; + OGGVORBIS = 8; + AIFF = 9; + WAV = 10; + TRUEAUDIO = 11; + CDDA = 12; + OGGOPUS = 13; + WAVPACK = 14; + SPC = 15; + VGM = 16; + APE = 17; + STREAM = 99; +} + int32 id = 1; + string title = 2; + string album = 3; + string artist = 4; + string albumartist = 5; + int32 track = 6; + string stryear = 7; + string genre = 8; + int32 playcount = 9; + string strlength = 10; +} +message RequestSongMetadata { + SongMetadata song_metadata = 1; +} + +message ResponseSongMetadata { + SongMetadata song_metadata = 1; +} + +message RequestNextTrack { + bool next = 1; +} + +message RequestPreviousTrack { + bool previous = 1; +} + +message Message { + int32 version = 1; + MsgType type = 2; + RequestSongMetadata request_song_Metadata = 3; + ResponseSongMetadata response_song_metadata = 4; + RequestNextTrack request_next_track = 5; + RequestPreviousTrack request_previous_track = 6; +} + diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp index a2ce5182..a816f5ad 100644 --- a/src/settings/networkremotesettingspage.cpp +++ b/src/settings/networkremotesettingspage.cpp @@ -3,11 +3,10 @@ #include #include "core/iconloader.h" -#include "qpushbutton.h" #include "settings/settingsdialog.h" #include "settings/networkremotesettingspage.h" #include "ui_networkremotesettingspage.h" -#include "networkremote/networkremote.h" +#include "networkremote/networkremotehelper.h" const char *NetworkRemoteSettingsPage::kSettingsGroup = "Remote"; @@ -18,7 +17,9 @@ NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog *dialog, QWi ui_->setupUi(this); setWindowIcon(IconLoader::Load("network-remote", true, 0,32)); - connect(ui_->useRemoteClient,&QPushButton::clicked, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); + QObject::connect(ui_->useRemoteClient,&QCheckBox::stateChanged, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); + QObject::connect(ui_->localConnectionsOnly, &QCheckBox::stateChanged, this, &NetworkRemoteSettingsPage::LocalConnectButtonClicked); + QObject::connect(ui_->portSelected, &QSpinBox::valueChanged, this, &NetworkRemoteSettingsPage::PortChanged); } NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() @@ -68,6 +69,16 @@ void NetworkRemoteSettingsPage::Save() s.endGroup(); } +void NetworkRemoteSettingsPage::Refresh() +{ + Save(); + Load(); + if (NetworkRemoteHelper::Instance()) { + qInfo() << "Helper Instance is up"; + NetworkRemoteHelper::Instance()->ReloadSettings(); + } +} + void NetworkRemoteSettingsPage::DisplayIP() { bool found = false; @@ -78,7 +89,7 @@ void NetworkRemoteSettingsPage::DisplayIP() if (address.protocol() == QAbstractSocket::IPv4Protocol && address.isLoopback() == false && !found){ // NOTE: this code currently only takes the first ip address it finds // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - qInfo("Warning: The code only pickst the first IPv4 address"); + // qInfo("Warning: The code only picks the first IPv4 address"); found = true; ipAddr_ = address.toString(); } @@ -88,7 +99,16 @@ void NetworkRemoteSettingsPage::DisplayIP() void NetworkRemoteSettingsPage::RemoteButtonClicked() { - Save(); - Load(); + Refresh(); +} + +void NetworkRemoteSettingsPage::LocalConnectButtonClicked() +{ + Refresh(); +} + +void NetworkRemoteSettingsPage::PortChanged() +{ + Refresh(); } diff --git a/src/settings/networkremotesettingspage.h b/src/settings/networkremotesettingspage.h index de798208..444520c6 100644 --- a/src/settings/networkremotesettingspage.h +++ b/src/settings/networkremotesettingspage.h @@ -8,6 +8,7 @@ class SettingsDialog; class Ui_NetworkRemoteSettingsPage; +class NetworkRemote; class NetworkRemoteSettingsPage : public SettingsPage { @@ -21,6 +22,10 @@ public: void Load() override; void Save() override; + void Refresh(); + +signals: + void remoteSettingsChanged(); private: Ui_NetworkRemoteSettingsPage *ui_; @@ -30,6 +35,8 @@ private: private slots: void RemoteButtonClicked(); + void LocalConnectButtonClicked(); + void PortChanged(); }; #endif // NETWORKREMOTESETTINGSPAGE_H From 1e313f529a527e4673f5eb5addce64d918a56fdf Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Sat, 3 Feb 2024 12:24:59 +1100 Subject: [PATCH 09/22] Settings updates work --- src/CMakeLists.txt | 3 - src/core/application.cpp | 7 +-- src/core/application.h | 2 - src/networkremote/networkremote.cpp | 66 +++++++++++++++++++--- src/networkremote/networkremote.h | 5 ++ src/networkremote/networkremotehelper.cpp | 35 ------------ src/networkremote/networkremotehelper.h | 28 --------- src/settings/networkremotesettingspage.cpp | 57 +++++++++++-------- src/settings/networkremotesettingspage.h | 3 +- 9 files changed, 98 insertions(+), 108 deletions(-) delete mode 100644 src/networkremote/networkremotehelper.cpp delete mode 100644 src/networkremote/networkremotehelper.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 761d4bdf..d3007226 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -295,8 +295,6 @@ set(SOURCES networkremote/networkremote.cpp networkremote/tcpserver.cpp networkremote/remoteclient.cpp - networkremote/networkremotehelper.cpp - ) set(HEADERS @@ -537,7 +535,6 @@ set(HEADERS networkremote/networkremote.h networkremote/tcpserver.h networkremote/remoteclient.h - networkremote/networkremotehelper.h ) diff --git a/src/core/application.cpp b/src/core/application.cpp index 4bcc7d35..fece4829 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -103,7 +103,6 @@ #include "radios/radiobackend.h" #include "networkremote/networkremote.h" -#include "networkremote/networkremotehelper.h" using std::make_shared; using namespace std::chrono_literals; @@ -209,8 +208,7 @@ class ApplicationImpl { NetworkRemote *remote = new NetworkRemote(app); app->MoveToNewThread(remote); return remote; - }), - network_remote_helper_([app](){ return new NetworkRemoteHelper(app); }) + }) {} Lazy tag_reader_client_; @@ -238,7 +236,6 @@ class ApplicationImpl { #endif Lazy lastfm_import_; Lazy network_remote_; - Lazy network_remote_helper_; }; @@ -249,7 +246,6 @@ Application::Application(QObject *parent) collection()->Init(); tag_reader_client(); network_remote()->Init(); - network_remote_helper(); QObject::connect(&*database(), &Database::Error, this, &Application::ErrorAdded); @@ -370,7 +366,6 @@ SharedPtr Application::radio_services() const { return p_->radio_ SharedPtr Application::scrobbler() const { return p_->scrobbler_.ptr(); } SharedPtr Application::lastfm_import() const { return p_->lastfm_import_.ptr(); } SharedPtr Application::network_remote() const { return p_->network_remote_.ptr();} -SharedPtr Application::network_remote_helper() const { return p_->network_remote_helper_.ptr();} #ifdef HAVE_MOODBAR SharedPtr Application::moodbar_controller() const { return p_->moodbar_controller_.ptr(); } SharedPtr Application::moodbar_loader() const { return p_->moodbar_loader_.ptr(); } diff --git a/src/core/application.h b/src/core/application.h index 92f8fb8d..a0e96ed0 100644 --- a/src/core/application.h +++ b/src/core/application.h @@ -66,7 +66,6 @@ class MoodbarLoader; #endif class NetworkRemote; -class NetworkRemoteHelper; class Application : public QObject { Q_OBJECT @@ -111,7 +110,6 @@ class Application : public QObject { SharedPtr lastfm_import() const; SharedPtr network_remote() const; - SharedPtr network_remote_helper() const; void Exit(); diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index c5f8ffc2..a90571c2 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -1,5 +1,5 @@ -#include + #include #include "networkremote/networkremote.h" @@ -8,6 +8,8 @@ class TcpServer; + +NetworkRemote* NetworkRemote::sInstance = nullptr; const char *NetworkRemote::kSettingsGroup = "Remote"; NetworkRemote::NetworkRemote(Application* app, QObject *parent) @@ -17,6 +19,7 @@ NetworkRemote::NetworkRemote(Application* app, QObject *parent) { setObjectName("Network Remote"); original_thread_ = thread(); + sInstance = this; } NetworkRemote::~NetworkRemote() @@ -26,13 +29,24 @@ NetworkRemote::~NetworkRemote() void NetworkRemote::Init() { - QSettings s; - s.beginGroup(NetworkRemote::kSettingsGroup); - use_remote_ = s.value("useRemote").toBool(); - local_only_ = s.value("localOnly").toBool(); - remote_port_ = s.value("remotePort").toInt(); - ipAddr_.setAddress(s.value("ipAddress").toString()); - s.endGroup(); + s_.beginGroup(NetworkRemote::kSettingsGroup); + use_remote_ = s_.value("useRemote").toBool(); + local_only_ = s_.value("localOnly").toBool(); + remote_port_ = s_.value("remotePort").toInt(); + ipAddr_.setAddress(s_.value("ipAddress").toString()); + + bool aa = s_.value("useRemote").toBool(); + bool bb = s_.value("localOnly").toBool(); + int cc = s_.value("remotePort").toInt(); + QString dd =s_.value("ipAddress").toString(); + qLog(Debug) << "Settings " << s_.fileName(); + qLog(Debug) << "Keys are " << s_.allKeys(); + qLog(Debug) << "aa = " << aa; + qLog(Debug) << "bb = " << bb; + qLog(Debug) << "cc = " << cc; + qLog(Debug) << "dd = " << dd; + + s_.endGroup(); if (use_remote_){ startTcpServer(); @@ -42,6 +56,33 @@ void NetworkRemote::Init() } } +void NetworkRemote::Update() +{ + s_.beginGroup(NetworkRemote::kSettingsGroup); + bool aa = s_.value("useRemote").toBool(); + bool bb = s_.value("localOnly").toBool(); + int cc = s_.value("remotePort").toInt(); + QString dd =s_.value("ipAddress").toString(); + + if (remote_port_ != s_.value("useRemote").toBool()){ + qLog(Debug) << "use_remote_ changed"; + } + if (use_remote_ != s_.value("remotePort").toInt()){ + qLog(Debug) << "remote_port_ changed"; + } + if (ipAddr_.toString() != s_.value("ipAddress").toString()){ + qLog(Debug) << "IP addres changed"; + } +/* + use_remote_ = s.value("useRemote").toBool(); + local_only_ = s.value("localOnly").toBool(); + remote_port_ = s.value("remotePort").toInt(); + ipAddr_.setAddress(s.value("ipAddress").toString()); +*/ + s_.endGroup(); + +} + void NetworkRemote::startTcpServer() { server_->StartServer(ipAddr_,remote_port_); @@ -56,3 +97,12 @@ void NetworkRemote::stopTcpServer() } } +NetworkRemote* NetworkRemote::Instance() { + if (!sInstance) { + // Error + return nullptr; + } + qLog(Debug) << "NetworkRemote instance is up "; + return sInstance; +} + diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index 2338afb0..821fe086 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "tcpserver.h" class Application; @@ -16,21 +17,25 @@ class NetworkRemote : public QObject public: static const char* kSettingsGroup; explicit NetworkRemote(Application* app, QObject *parent = nullptr); + static NetworkRemote* Instance(); ~NetworkRemote() override; public slots: void Init(); + void Update(); void startTcpServer(); void stopTcpServer(); private: Application *app_; + QSettings s_; bool use_remote_; bool local_only_; int remote_port_; QHostAddress ipAddr_; TcpServer *server_ = new TcpServer(); QThread *original_thread_; + static NetworkRemote* sInstance; }; #endif // NETWORKREMOTE_H diff --git a/src/networkremote/networkremotehelper.cpp b/src/networkremote/networkremotehelper.cpp deleted file mode 100644 index 9cf46b8d..00000000 --- a/src/networkremote/networkremotehelper.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "networkremote/networkremotehelper.h" - -#include "core/application.h" -#include "core/logging.h" -#include "networkremote/networkremote.h" - -NetworkRemoteHelper* NetworkRemoteHelper::sInstance = nullptr; - -NetworkRemoteHelper::NetworkRemoteHelper(Application* app, QObject* parent) - : QObject(parent), - app_(app) -{ - app_ = app; - sInstance = this; - - QObject::connect(this,&NetworkRemoteHelper::ReloadSettingsSig, &*app->network_remote(), &NetworkRemote::Init,Qt::QueuedConnection); -} - -NetworkRemoteHelper::~NetworkRemoteHelper() -{} - -void NetworkRemoteHelper::ReloadSettings() -{ - qLog(Debug) << "NetworkRemoteHelper called ----------------------"; - emit ReloadSettingsSig(); -} - -NetworkRemoteHelper* NetworkRemoteHelper::Instance() { - if (!sInstance) { - // Error - return nullptr; - } - return sInstance; -} - diff --git a/src/networkremote/networkremotehelper.h b/src/networkremote/networkremotehelper.h deleted file mode 100644 index 1c32ffee..00000000 --- a/src/networkremote/networkremotehelper.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef NETWORKREMOTEHELPER_H -#define NETWORKREMOTEHELPER_H - -#include - -#include "networkremote.h" - -class Application; - -class NetworkRemoteHelper : public QObject { - Q_OBJECT - public: - static NetworkRemoteHelper* Instance(); - - NetworkRemoteHelper(Application* app, QObject *parent = nullptr); - ~NetworkRemoteHelper(); - - void ReloadSettings(); - - signals: - void ReloadSettingsSig(); - - private: - static NetworkRemoteHelper* sInstance; - Application* app_; -}; - -#endif // NETWORKREMOTEHELPER_H diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp index a816f5ad..145f4d56 100644 --- a/src/settings/networkremotesettingspage.cpp +++ b/src/settings/networkremotesettingspage.cpp @@ -3,10 +3,10 @@ #include #include "core/iconloader.h" +#include "networkremote/networkremote.h" #include "settings/settingsdialog.h" #include "settings/networkremotesettingspage.h" #include "ui_networkremotesettingspage.h" -#include "networkremote/networkremotehelper.h" const char *NetworkRemoteSettingsPage::kSettingsGroup = "Remote"; @@ -14,12 +14,13 @@ NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog *dialog, QWi SettingsPage(dialog,parent), ui_(new Ui_NetworkRemoteSettingsPage) { + ui_->setupUi(this); setWindowIcon(IconLoader::Load("network-remote", true, 0,32)); - QObject::connect(ui_->useRemoteClient,&QCheckBox::stateChanged, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); - QObject::connect(ui_->localConnectionsOnly, &QCheckBox::stateChanged, this, &NetworkRemoteSettingsPage::LocalConnectButtonClicked); - QObject::connect(ui_->portSelected, &QSpinBox::valueChanged, this, &NetworkRemoteSettingsPage::PortChanged); + QObject::connect(ui_->useRemoteClient,&QAbstractButton::clicked, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); + QObject::connect(ui_->localConnectionsOnly, &QAbstractButton::clicked, this, &NetworkRemoteSettingsPage::LocalConnectButtonClicked); + QObject::connect(ui_->portSelected, &QAbstractSpinBox::editingFinished, this, &NetworkRemoteSettingsPage::PortChanged); } NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() @@ -32,14 +33,16 @@ void NetworkRemoteSettingsPage::Load() ui_->portSelected->setRange(5050, 65535); ui_->ip_address->setText("0.0.0.0"); - s.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); - if (s.contains("useRemote")){ - ui_->useRemoteClient->setChecked(s.value("useRemote", false).toBool()); - if (s.value("useRemote").toBool()){ + s_.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); + + if (s_.contains("useRemote")){ + ui_->useRemoteClient->setCheckable(true); + ui_->useRemoteClient->setChecked(s_.value("useRemote", false).toBool()); + if (s_.value("useRemote").toBool()){ ui_->localConnectionsOnly->setCheckable(true); + ui_->localConnectionsOnly->setChecked(s_.value("localOnly", false).toBool()); ui_->portSelected->setReadOnly(false); - ui_->localConnectionsOnly->setChecked(s.value("localOnly", true).toBool()); - ui_->portSelected->setValue(s.value("remotePort", 5050).toInt()); + ui_->portSelected->setValue(s_.value("remotePort", 5050).toInt()); } else { ui_->localConnectionsOnly->setCheckable(false); @@ -48,34 +51,40 @@ void NetworkRemoteSettingsPage::Load() } else{ qLog(Debug) << "First time run the Network Remote"; - s.setValue("useRemote", false); - s.setValue("localOnly",false); - s.setValue("remotePort",5050); - s.setValue("ipAddress","0.0.0.0"); + s_.setValue("useRemote", false); + s_.setValue("localOnly",false); + s_.setValue("remotePort",5050); + s_.setValue("ipAddress","0.0.0.0"); } - s.endGroup(); + s_.endGroup(); + DisplayIP(); + qInfo("Loaded QSettings ++++++++++++++++"); Init(ui_->layout_networkremotesettingspage->parentWidget()); } void NetworkRemoteSettingsPage::Save() { - s.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); - s.setValue("useRemote",ui_->useRemoteClient->isChecked()); - s.setValue("localOnly",ui_->localConnectionsOnly->isChecked()); - s.setValue("remotePort",int(ui_->portSelected->value())); - s.setValue("ipAddress",ipAddr_); - s.endGroup(); + s_.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); + s_.setValue("useRemote",ui_->useRemoteClient->isChecked()); + s_.setValue("localOnly",ui_->localConnectionsOnly->isChecked()); + s_.setValue("remotePort",int(ui_->portSelected->value())); + s_.setValue("ipAddress",ipAddr_); + s_.endGroup(); + + qInfo("Saving QSettings ++++++++++++++++"); } void NetworkRemoteSettingsPage::Refresh() { + s_.sync(); Save(); Load(); - if (NetworkRemoteHelper::Instance()) { - qInfo() << "Helper Instance is up"; - NetworkRemoteHelper::Instance()->ReloadSettings(); + + if (NetworkRemote::Instance()) { + qInfo() << "NetworkRemote Instance is up"; + NetworkRemote::Instance()->Update(); } } diff --git a/src/settings/networkremotesettingspage.h b/src/settings/networkremotesettingspage.h index 444520c6..b588b801 100644 --- a/src/settings/networkremotesettingspage.h +++ b/src/settings/networkremotesettingspage.h @@ -19,7 +19,6 @@ public: ~NetworkRemoteSettingsPage() override; static const char *kSettingsGroup; - void Load() override; void Save() override; void Refresh(); @@ -29,7 +28,7 @@ signals: private: Ui_NetworkRemoteSettingsPage *ui_; - QSettings s; + QSettings s_; void DisplayIP(); QString ipAddr_; From 33a34010dbec6d72a6ea83f52e2c953a07e00353 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Sun, 4 Feb 2024 16:43:57 +1100 Subject: [PATCH 10/22] New Settings Class --- src/CMakeLists.txt | 3 +- src/networkremote/networkremote.cpp | 49 ++-------- src/networkremote/networkremote.h | 5 +- src/networkremote/remotesettings.cpp | 104 +++++++++++++++++++++ src/networkremote/remotesettings.h | 33 +++++++ src/settings/networkremotesettingspage.cpp | 75 +++++---------- src/settings/networkremotesettingspage.h | 8 +- 7 files changed, 179 insertions(+), 98 deletions(-) create mode 100644 src/networkremote/remotesettings.cpp create mode 100644 src/networkremote/remotesettings.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d3007226..651e62f0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -295,6 +295,7 @@ set(SOURCES networkremote/networkremote.cpp networkremote/tcpserver.cpp networkremote/remoteclient.cpp + networkremote/remotesettings.cpp ) set(HEADERS @@ -535,7 +536,7 @@ set(HEADERS networkremote/networkremote.h networkremote/tcpserver.h networkremote/remoteclient.h - + networkremote/remotesettings.h ) set(UI diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index a90571c2..a7f08db0 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -29,24 +29,10 @@ NetworkRemote::~NetworkRemote() void NetworkRemote::Init() { - s_.beginGroup(NetworkRemote::kSettingsGroup); - use_remote_ = s_.value("useRemote").toBool(); - local_only_ = s_.value("localOnly").toBool(); - remote_port_ = s_.value("remotePort").toInt(); - ipAddr_.setAddress(s_.value("ipAddress").toString()); - - bool aa = s_.value("useRemote").toBool(); - bool bb = s_.value("localOnly").toBool(); - int cc = s_.value("remotePort").toInt(); - QString dd =s_.value("ipAddress").toString(); - qLog(Debug) << "Settings " << s_.fileName(); - qLog(Debug) << "Keys are " << s_.allKeys(); - qLog(Debug) << "aa = " << aa; - qLog(Debug) << "bb = " << bb; - qLog(Debug) << "cc = " << cc; - qLog(Debug) << "dd = " << dd; - - s_.endGroup(); + use_remote_ = s_->UserRemote(); + local_only_ = s_->LocalOnly(); + remote_port_ = s_->GetPort(); + ipAddr_.setAddress(s_->GetIpAddress()); if (use_remote_){ startTcpServer(); @@ -54,33 +40,14 @@ void NetworkRemote::Init() else { stopTcpServer(); } + qLog(Debug) << "NetworkRemote Init() "; } void NetworkRemote::Update() { - s_.beginGroup(NetworkRemote::kSettingsGroup); - bool aa = s_.value("useRemote").toBool(); - bool bb = s_.value("localOnly").toBool(); - int cc = s_.value("remotePort").toInt(); - QString dd =s_.value("ipAddress").toString(); - - if (remote_port_ != s_.value("useRemote").toBool()){ - qLog(Debug) << "use_remote_ changed"; - } - if (use_remote_ != s_.value("remotePort").toInt()){ - qLog(Debug) << "remote_port_ changed"; - } - if (ipAddr_.toString() != s_.value("ipAddress").toString()){ - qLog(Debug) << "IP addres changed"; - } -/* - use_remote_ = s.value("useRemote").toBool(); - local_only_ = s.value("localOnly").toBool(); - remote_port_ = s.value("remotePort").toInt(); - ipAddr_.setAddress(s.value("ipAddress").toString()); -*/ - s_.endGroup(); - + //s_->Save(); + //stopTcpServer(); + qLog(Debug) << "NetworkRemote Update() "; } void NetworkRemote::startTcpServer() diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index 821fe086..896ad15f 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -6,7 +6,9 @@ #include #include #include + #include "tcpserver.h" +#include "networkremote/remotesettings.h" class Application; class QThread; @@ -28,7 +30,6 @@ public slots: private: Application *app_; - QSettings s_; bool use_remote_; bool local_only_; int remote_port_; @@ -36,6 +37,8 @@ private: TcpServer *server_ = new TcpServer(); QThread *original_thread_; static NetworkRemote* sInstance; + RemoteSettings *s_ = new RemoteSettings; + }; #endif // NETWORKREMOTE_H diff --git a/src/networkremote/remotesettings.cpp b/src/networkremote/remotesettings.cpp new file mode 100644 index 00000000..aca15427 --- /dev/null +++ b/src/networkremote/remotesettings.cpp @@ -0,0 +1,104 @@ +#include +#include + +#include "remotesettings.h" +#include "core/logging.h" + + +const char *RemoteSettings::kSettingsGroup = "NetworkRemote"; + +RemoteSettings::RemoteSettings(QObject *parent) + : QObject{parent} +{ +} + +RemoteSettings::~RemoteSettings() +{} + +void RemoteSettings::Load() +{ + SetIpAdress(); + s_.beginGroup(RemoteSettings::kSettingsGroup); + if (!s_.contains("useRemote")){ + qLog(Debug) << "First time run the Network Remote"; + s_.setValue("useRemote", false); + s_.setValue("localOnly",false); + s_.setValue("remotePort",5050); + s_.setValue("ipAddress",ipAddr_); + } + else { + use_remote_ = s_.value("useRemote").toBool(); + local_only_ = s_.value("localOnly").toBool(); + remote_port_ = s_.value("remotePort").toInt(); + s_.setValue("ipAddress",ipAddr_); + } + s_.endGroup(); + qInfo("QSettings Loaded ++++++++++++++++"); +} + +void RemoteSettings::Save() +{ + s_.beginGroup(RemoteSettings::kSettingsGroup); + s_.setValue("useRemote",use_remote_); + s_.setValue("localOnly",local_only_); + s_.setValue("remotePort",remote_port_); + s_.setValue("ipAddress",ipAddr_); + s_.endGroup(); + s_.sync(); + qInfo("Saving QSettings ++++++++++++++++"); +} + +bool RemoteSettings::UserRemote() +{ + return use_remote_; +} + +bool RemoteSettings::LocalOnly() +{ + return local_only_; +} + +QString RemoteSettings::GetIpAddress() +{ + return ipAddr_; +} + +int RemoteSettings::GetPort() +{ + return remote_port_; +} + +void RemoteSettings::SetUseRemote(bool useRemote) +{ + use_remote_ = useRemote; + Save(); +} + +void RemoteSettings::SetLocalOnly(bool localOnly) +{ + local_only_ = localOnly; + Save(); +} + +void RemoteSettings::SetIpAdress() +{ + bool found = false; + QList hostList = QNetworkInterface::allAddresses(); + + for (const QHostAddress &address : hostList) + { + if (address.protocol() == QAbstractSocket::IPv4Protocol && address.isLoopback() == false && !found){ + // NOTE: this code currently only takes the first ip address it finds + // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + qInfo("Warning: The code only picks the first IPv4 address"); + found = true; + ipAddr_ = address.toString(); + } + } +} + +void RemoteSettings::SetPort(int port) +{ + remote_port_ = port; + Save(); +} diff --git a/src/networkremote/remotesettings.h b/src/networkremote/remotesettings.h new file mode 100644 index 00000000..bee4287a --- /dev/null +++ b/src/networkremote/remotesettings.h @@ -0,0 +1,33 @@ +#ifndef REMOTESETTINGS_H +#define REMOTESETTINGS_H + +#include +#include + +class RemoteSettings : public QObject +{ + Q_OBJECT +public: + static const char *kSettingsGroup; + explicit RemoteSettings(QObject *parent = nullptr); + ~RemoteSettings(); + void Load(); + void Save(); + bool UserRemote(); + bool LocalOnly(); + QString GetIpAddress(); + int GetPort(); + void SetUseRemote(bool); + void SetLocalOnly(bool); + void SetIpAdress (); + void SetPort(int); + +private: + QSettings s_; + bool use_remote_ = false; + bool local_only_ = false; + int remote_port_ = 5050; + QString ipAddr_ = "0.0.0.0"; +}; + +#endif // REMOTESETTINGS_H diff --git a/src/settings/networkremotesettingspage.cpp b/src/settings/networkremotesettingspage.cpp index 145f4d56..5300ca9c 100644 --- a/src/settings/networkremotesettingspage.cpp +++ b/src/settings/networkremotesettingspage.cpp @@ -8,8 +8,6 @@ #include "settings/networkremotesettingspage.h" #include "ui_networkremotesettingspage.h" -const char *NetworkRemoteSettingsPage::kSettingsGroup = "Remote"; - NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog *dialog, QWidget *parent) : SettingsPage(dialog,parent), ui_(new Ui_NetworkRemoteSettingsPage) @@ -17,7 +15,6 @@ NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog *dialog, QWi ui_->setupUi(this); setWindowIcon(IconLoader::Load("network-remote", true, 0,32)); - QObject::connect(ui_->useRemoteClient,&QAbstractButton::clicked, this, &NetworkRemoteSettingsPage::RemoteButtonClicked); QObject::connect(ui_->localConnectionsOnly, &QAbstractButton::clicked, this, &NetworkRemoteSettingsPage::LocalConnectButtonClicked); QObject::connect(ui_->portSelected, &QAbstractSpinBox::editingFinished, this, &NetworkRemoteSettingsPage::PortChanged); @@ -32,56 +29,34 @@ void NetworkRemoteSettingsPage::Load() { ui_->portSelected->setRange(5050, 65535); ui_->ip_address->setText("0.0.0.0"); + s_->Load(); - s_.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); - - if (s_.contains("useRemote")){ - ui_->useRemoteClient->setCheckable(true); - ui_->useRemoteClient->setChecked(s_.value("useRemote", false).toBool()); - if (s_.value("useRemote").toBool()){ - ui_->localConnectionsOnly->setCheckable(true); - ui_->localConnectionsOnly->setChecked(s_.value("localOnly", false).toBool()); - ui_->portSelected->setReadOnly(false); - ui_->portSelected->setValue(s_.value("remotePort", 5050).toInt()); - } - else { - ui_->localConnectionsOnly->setCheckable(false); - ui_->portSelected->setReadOnly(true); - } + ui_->useRemoteClient->setCheckable(true); + ui_->useRemoteClient->setChecked(s_->UserRemote()); + if (s_->UserRemote()){ + ui_->localConnectionsOnly->setCheckable(true); + ui_->localConnectionsOnly->setChecked(s_->LocalOnly()); + ui_->portSelected->setReadOnly(false); + ui_->portSelected->setValue(s_->GetPort()); } else{ - qLog(Debug) << "First time run the Network Remote"; - s_.setValue("useRemote", false); - s_.setValue("localOnly",false); - s_.setValue("remotePort",5050); - s_.setValue("ipAddress","0.0.0.0"); + ui_->localConnectionsOnly->setCheckable(false); + ui_->portSelected->setReadOnly(true); } - s_.endGroup(); DisplayIP(); - qInfo("Loaded QSettings ++++++++++++++++"); + qInfo("SettingsPage Loaded QSettings ++++++++++++++++"); Init(ui_->layout_networkremotesettingspage->parentWidget()); } void NetworkRemoteSettingsPage::Save() { - s_.beginGroup(NetworkRemoteSettingsPage::kSettingsGroup); - s_.setValue("useRemote",ui_->useRemoteClient->isChecked()); - s_.setValue("localOnly",ui_->localConnectionsOnly->isChecked()); - s_.setValue("remotePort",int(ui_->portSelected->value())); - s_.setValue("ipAddress",ipAddr_); - s_.endGroup(); - qInfo("Saving QSettings ++++++++++++++++"); } void NetworkRemoteSettingsPage::Refresh() { - s_.sync(); - Save(); - Load(); - if (NetworkRemote::Instance()) { qInfo() << "NetworkRemote Instance is up"; NetworkRemote::Instance()->Update(); @@ -90,34 +65,34 @@ void NetworkRemoteSettingsPage::Refresh() void NetworkRemoteSettingsPage::DisplayIP() { - bool found = false; - QList hostList = QNetworkInterface::allAddresses(); - - for (const QHostAddress &address : hostList) - { - if (address.protocol() == QAbstractSocket::IPv4Protocol && address.isLoopback() == false && !found){ - // NOTE: this code currently only takes the first ip address it finds - // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // qInfo("Warning: The code only picks the first IPv4 address"); - found = true; - ipAddr_ = address.toString(); - } - } - ui_->ip_address->setText(ipAddr_); + ui_->ip_address->setText(s_->GetIpAddress()); } void NetworkRemoteSettingsPage::RemoteButtonClicked() { + s_->SetUseRemote(ui_->useRemoteClient->isChecked()); + ui_->useRemoteClient->setChecked(s_->UserRemote()); + if (ui_->useRemoteClient->isChecked()){ + ui_->localConnectionsOnly->setCheckable(true); + ui_->portSelected->setReadOnly(false); + } + else{ + ui_->localConnectionsOnly->setCheckable(false); + ui_->portSelected->setReadOnly(true); + } Refresh(); } + void NetworkRemoteSettingsPage::LocalConnectButtonClicked() { + s_->SetLocalOnly(ui_->localConnectionsOnly->isChecked()); Refresh(); } void NetworkRemoteSettingsPage::PortChanged() { + s_->SetPort(ui_->portSelected->value()); Refresh(); } diff --git a/src/settings/networkremotesettingspage.h b/src/settings/networkremotesettingspage.h index b588b801..c6226461 100644 --- a/src/settings/networkremotesettingspage.h +++ b/src/settings/networkremotesettingspage.h @@ -5,6 +5,7 @@ #include #include "settingspage.h" +#include "networkremote/remotesettings.h" class SettingsDialog; class Ui_NetworkRemoteSettingsPage; @@ -17,8 +18,6 @@ class NetworkRemoteSettingsPage : public SettingsPage public: explicit NetworkRemoteSettingsPage(SettingsDialog *dialog, QWidget *parent = nullptr); ~NetworkRemoteSettingsPage() override; - - static const char *kSettingsGroup; void Load() override; void Save() override; void Refresh(); @@ -28,14 +27,13 @@ signals: private: Ui_NetworkRemoteSettingsPage *ui_; - QSettings s_; - void DisplayIP(); - QString ipAddr_; + RemoteSettings *s_ = new RemoteSettings; private slots: void RemoteButtonClicked(); void LocalConnectButtonClicked(); void PortChanged(); + void DisplayIP(); }; #endif // NETWORKREMOTESETTINGSPAGE_H From 5376ed6a3479c4230e40e949dcf01d3e92d2da57 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Mon, 5 Feb 2024 10:26:03 +1100 Subject: [PATCH 11/22] New Settings Class V2 --- src/networkremote/networkremote.cpp | 28 ++++++++++++++++++++-------- src/networkremote/networkremote.h | 1 + 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index a7f08db0..e9e515b9 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -29,11 +29,7 @@ NetworkRemote::~NetworkRemote() void NetworkRemote::Init() { - use_remote_ = s_->UserRemote(); - local_only_ = s_->LocalOnly(); - remote_port_ = s_->GetPort(); - ipAddr_.setAddress(s_->GetIpAddress()); - + LoadSettings(); if (use_remote_){ startTcpServer(); } @@ -45,9 +41,25 @@ void NetworkRemote::Init() void NetworkRemote::Update() { - //s_->Save(); - //stopTcpServer(); - qLog(Debug) << "NetworkRemote Update() "; + LoadSettings(); + if (use_remote_){ + stopTcpServer(); + startTcpServer(); + } + else { + stopTcpServer(); + } + + qLog(Debug) << "NetworkRemote Updated ==== "; +} + +void NetworkRemote::LoadSettings() +{ + s_->Load(); + use_remote_ = s_->UserRemote(); + local_only_ = s_->LocalOnly(); + remote_port_ = s_->GetPort(); + ipAddr_.setAddress(s_->GetIpAddress()); } void NetworkRemote::startTcpServer() diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index 896ad15f..380322d4 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -25,6 +25,7 @@ public: public slots: void Init(); void Update(); + void LoadSettings(); void startTcpServer(); void stopTcpServer(); From 09847eeffd783cbcfaee814527aa67210c4c02f7 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Mon, 12 Feb 2024 09:20:30 +1100 Subject: [PATCH 12/22] client V1 --- src/CMakeLists.txt | 10 +++- src/networkremote/client.cpp | 26 ++++++++ src/networkremote/client.h | 30 ++++++++++ src/networkremote/clientmanager.cpp | 62 ++++++++++++++++++++ src/networkremote/clientmanager.h | 32 ++++++++++ src/networkremote/incomingmsg.cpp | 7 +++ src/networkremote/incomingmsg.h | 16 +++++ src/networkremote/networkremote.cpp | 7 +-- src/networkremote/networkremote.h | 2 +- src/networkremote/outgoingmsg.cpp | 7 +++ src/networkremote/outgoingmsg.h | 16 +++++ src/networkremote/proto/RemoteMessages.proto | 2 +- src/networkremote/remoteclient.cpp | 7 --- src/networkremote/remoteclient.h | 16 ----- src/networkremote/tcpserver.cpp | 14 ++--- src/networkremote/tcpserver.h | 9 ++- 16 files changed, 222 insertions(+), 41 deletions(-) create mode 100644 src/networkremote/client.cpp create mode 100644 src/networkremote/client.h create mode 100644 src/networkremote/clientmanager.cpp create mode 100644 src/networkremote/clientmanager.h create mode 100644 src/networkremote/incomingmsg.cpp create mode 100644 src/networkremote/incomingmsg.h create mode 100644 src/networkremote/outgoingmsg.cpp create mode 100644 src/networkremote/outgoingmsg.h delete mode 100644 src/networkremote/remoteclient.cpp delete mode 100644 src/networkremote/remoteclient.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 651e62f0..fcf84184 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -294,8 +294,11 @@ set(SOURCES networkremote/networkremote.cpp networkremote/tcpserver.cpp - networkremote/remoteclient.cpp networkremote/remotesettings.cpp + networkremote/client.cpp + networkremote/clientmanager.cpp + networkremote/incomingmsg.cpp + networkremote/outgoingmsg.cpp ) set(HEADERS @@ -535,8 +538,11 @@ set(HEADERS networkremote/networkremote.h networkremote/tcpserver.h - networkremote/remoteclient.h networkremote/remotesettings.h + networkremote/client.h + networkremote/clientmanager.h + networkremote/incomingmsg.h + networkremote/outgoingmsg.h ) set(UI diff --git a/src/networkremote/client.cpp b/src/networkremote/client.cpp new file mode 100644 index 00000000..16951829 --- /dev/null +++ b/src/networkremote/client.cpp @@ -0,0 +1,26 @@ +#include "client.h" + +Client::Client(Application *app, QObject *parent) + : QObject{parent}, + app_(app), + msgReceived_(new IncomingMsg), + newMsg_(new OutgoingMsg) +{ + +} + +Client::~Client() +{ + +} + +void Client::Init(QTcpSocket *socket) +{ + socket_ = socket; + // socket_->setSocketDescriptor(socket_, 3, ReadWrite) +} + +QTcpSocket* Client::GetSocket() +{ + return socket_; +} diff --git a/src/networkremote/client.h b/src/networkremote/client.h new file mode 100644 index 00000000..000f2c18 --- /dev/null +++ b/src/networkremote/client.h @@ -0,0 +1,30 @@ +#ifndef CLIENT_H +#define CLIENT_H + +#include +#include + +#include "incomingmsg.h" +#include "outgoingmsg.h" + +class Application; + +class Client : public QObject +{ + Q_OBJECT +public: + explicit Client(Application *app, QObject *parent = nullptr); + ~Client(); + void Init(QTcpSocket*); + QTcpSocket* GetSocket(); + +signals: + +private: + Application *app_; + QTcpSocket *socket_; + IncomingMsg *msgReceived_; + OutgoingMsg *newMsg_; +}; + +#endif // CLIENT_H diff --git a/src/networkremote/clientmanager.cpp b/src/networkremote/clientmanager.cpp new file mode 100644 index 00000000..d46b5b1d --- /dev/null +++ b/src/networkremote/clientmanager.cpp @@ -0,0 +1,62 @@ +#include "clientmanager.h" +#include "core/logging.h" + +ClientManager::ClientManager(Application *app, QObject *parent) + : QObject{parent}, + app_(app) +{ + clients_ = new QVector; +} + +ClientManager::~ClientManager() +{} + +void ClientManager::AddClient(QTcpSocket *socket) +{ + qLog(Debug) << "New Client connection +++++++++++++++"; + socket_ = socket; + QObject::connect(socket_, &QAbstractSocket::errorOccurred, this, &ClientManager::Error); + QObject::connect(socket_, &QAbstractSocket::stateChanged, this, &ClientManager::StateChanged); + + client_ = new Client(app_); + client_->Init(socket_); + clients_->append(client_); + qLog(Debug) << "There are now +++++++++++++++" << clients_->count() << "clients connected"; +} + +void ClientManager::RemoveClient() +{ + socket_->close(); + //int pos = clients_->indexOf(client_->so); + //clients_->removeAll(pos); + qLog(Debug) << "There are now +++++++++++++++" << clients_->count() << "clients connected"; +} + +void ClientManager::Ready() +{ + qLog(Debug) << "Socket Ready"; +} + +void ClientManager::Error(QAbstractSocket::SocketError socketError) +{ + switch (socketError) { + case QAbstractSocket::RemoteHostClosedError: + qLog(Debug) << "Remote Host closed"; + RemoveClient(); + break; + case QAbstractSocket::HostNotFoundError: + qLog(Debug) << "The host was not found. Please check the host name and port settings."; + break; + case QAbstractSocket::ConnectionRefusedError: + qLog(Debug) << "The connection was refused by the peer. "; + break; + default: + qLog(Debug) << "The following error occurred: %1." << socket_->errorString(); + } + +} + +void ClientManager::StateChanged() +{ + qLog(Debug) << "State Changed"; +} diff --git a/src/networkremote/clientmanager.h b/src/networkremote/clientmanager.h new file mode 100644 index 00000000..3dc66740 --- /dev/null +++ b/src/networkremote/clientmanager.h @@ -0,0 +1,32 @@ +#ifndef CLIENTMANAGER_H +#define CLIENTMANAGER_H + +#include +#include +#include +#include "networkremote/client.h" + +class Application; + +class ClientManager : public QObject +{ + Q_OBJECT +public: + explicit ClientManager(Application *app, QObject *parent = nullptr); + ~ClientManager(); + void AddClient(QTcpSocket *socket); + void RemoveClient(); + +private slots: + void Ready(); + void Error(QAbstractSocket::SocketError); + void StateChanged(); + +private: + Application *app_; + QVector *clients_; + Client *client_ = nullptr; + QTcpSocket *socket_ = nullptr; +}; + +#endif // CLIENTMANAGER_H diff --git a/src/networkremote/incomingmsg.cpp b/src/networkremote/incomingmsg.cpp new file mode 100644 index 00000000..11360a55 --- /dev/null +++ b/src/networkremote/incomingmsg.cpp @@ -0,0 +1,7 @@ +#include "incomingmsg.h" + +IncomingMsg::IncomingMsg(QObject *parent) + : QObject{parent} +{ + +} diff --git a/src/networkremote/incomingmsg.h b/src/networkremote/incomingmsg.h new file mode 100644 index 00000000..731e34dc --- /dev/null +++ b/src/networkremote/incomingmsg.h @@ -0,0 +1,16 @@ +#ifndef INCOMINGMSG_H +#define INCOMINGMSG_H + +#include + +class IncomingMsg : public QObject +{ + Q_OBJECT +public: + explicit IncomingMsg(QObject *parent = nullptr); + +signals: + +}; + +#endif // INCOMINGMSG_H diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index e9e515b9..f594ddbf 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -5,9 +5,7 @@ #include "networkremote/networkremote.h" #include "core/logging.h" - -class TcpServer; - +//class TcpServer; NetworkRemote* NetworkRemote::sInstance = nullptr; const char *NetworkRemote::kSettingsGroup = "Remote"; @@ -17,9 +15,10 @@ NetworkRemote::NetworkRemote(Application* app, QObject *parent) app_(app), original_thread_(nullptr) { - setObjectName("Network Remote"); + setObjectName("Strawberry Remote"); original_thread_ = thread(); sInstance = this; + server_ = new TcpServer(app_); } NetworkRemote::~NetworkRemote() diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index 380322d4..1f86152a 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -35,7 +35,7 @@ private: bool local_only_; int remote_port_; QHostAddress ipAddr_; - TcpServer *server_ = new TcpServer(); + TcpServer *server_; QThread *original_thread_; static NetworkRemote* sInstance; RemoteSettings *s_ = new RemoteSettings; diff --git a/src/networkremote/outgoingmsg.cpp b/src/networkremote/outgoingmsg.cpp new file mode 100644 index 00000000..6d54a0b0 --- /dev/null +++ b/src/networkremote/outgoingmsg.cpp @@ -0,0 +1,7 @@ +#include "outgoingmsg.h" + +OutgoingMsg::OutgoingMsg(QObject *parent) + : QObject{parent} +{ + +} diff --git a/src/networkremote/outgoingmsg.h b/src/networkremote/outgoingmsg.h new file mode 100644 index 00000000..f8f684f5 --- /dev/null +++ b/src/networkremote/outgoingmsg.h @@ -0,0 +1,16 @@ +#ifndef OUTGOINGMSG_H +#define OUTGOINGMSG_H + +#include + +class OutgoingMsg : public QObject +{ + Q_OBJECT +public: + explicit OutgoingMsg(QObject *parent = nullptr); + +signals: + +}; + +#endif // OUTGOINGMSG_H diff --git a/src/networkremote/proto/RemoteMessages.proto b/src/networkremote/proto/RemoteMessages.proto index 03e9d6a0..2e1a97a8 100644 --- a/src/networkremote/proto/RemoteMessages.proto +++ b/src/networkremote/proto/RemoteMessages.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package network.remote; +package spb.remote; enum MsgType { UNKNOWN = 0; diff --git a/src/networkremote/remoteclient.cpp b/src/networkremote/remoteclient.cpp deleted file mode 100644 index b6cd0f82..00000000 --- a/src/networkremote/remoteclient.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "remoteclient.h" - -RemoteClient::RemoteClient(QObject *parent) - : QObject{parent} -{ - -} diff --git a/src/networkremote/remoteclient.h b/src/networkremote/remoteclient.h deleted file mode 100644 index 3890e71a..00000000 --- a/src/networkremote/remoteclient.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef REMOTECLIENT_H -#define REMOTECLIENT_H - -#include - -class RemoteClient : public QObject -{ - Q_OBJECT -public: - explicit RemoteClient(QObject *parent = nullptr); - -signals: - -}; - -#endif // REMOTECLIENT_H diff --git a/src/networkremote/tcpserver.cpp b/src/networkremote/tcpserver.cpp index 8876c8b9..e5668105 100644 --- a/src/networkremote/tcpserver.cpp +++ b/src/networkremote/tcpserver.cpp @@ -1,10 +1,14 @@ #include "tcpserver.h" #include "core/logging.h" +#include "networkremote/clientmanager.h" -TcpServer::TcpServer(QObject *parent) - : QObject{parent} + +TcpServer::TcpServer(Application* app, QObject *parent) + : QObject{parent}, + app_(app) { server_ = new QTcpServer(this); + clientMgr_ = new ClientManager(app_); connect(server_,&QTcpServer::newConnection, this, &TcpServer::NewTcpConnection); } @@ -23,8 +27,8 @@ void TcpServer::StartServer(QHostAddress ipAddr, int port) void TcpServer::NewTcpConnection() { - //QTcpSocket *socket = server_->nextPendingConnection(); socket_ = server_->nextPendingConnection(); + clientMgr_->AddClient(socket_); qLog(Debug) << "New Socket -------------------"; } @@ -34,10 +38,6 @@ void TcpServer::StopServer() qLog(Debug) << "TCP Server Stopped ----------------------"; } -void TcpServer::CreateRemoteClient() -{ - -} bool TcpServer::ServerUp() { diff --git a/src/networkremote/tcpserver.h b/src/networkremote/tcpserver.h index 8f516642..2bc8c96a 100644 --- a/src/networkremote/tcpserver.h +++ b/src/networkremote/tcpserver.h @@ -6,6 +6,9 @@ #include #include #include +#include "networkremote/clientmanager.h" + +class Application; class TcpServer : public QObject { @@ -13,7 +16,7 @@ class TcpServer : public QObject public: static const char *kSettingsGroup; - explicit TcpServer(QObject *parent = nullptr); + explicit TcpServer(Application* app, QObject *parent = nullptr); ~TcpServer(); bool ServerUp(); @@ -22,14 +25,14 @@ public slots: void NewTcpConnection(); void StartServer(QHostAddress ipAddr, int port); void StopServer(); - void CreateRemoteClient(); - signals: private: + Application *app_; QTcpServer *server_; QTcpSocket *socket_; + ClientManager *clientMgr_; }; #endif // TCPSERVER_H From d4fb61d644405ef288e6bba1b6c4f026e68a3304 Mon Sep 17 00:00:00 2001 From: Poldi Date: Sat, 17 Feb 2024 16:30:02 +1100 Subject: [PATCH 13/22] Add proxy --- src/networkremote/tcpserver.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/networkremote/tcpserver.cpp b/src/networkremote/tcpserver.cpp index e5668105..86f3c85e 100644 --- a/src/networkremote/tcpserver.cpp +++ b/src/networkremote/tcpserver.cpp @@ -1,6 +1,7 @@ #include "tcpserver.h" #include "core/logging.h" #include "networkremote/clientmanager.h" +#include TcpServer::TcpServer(Application* app, QObject *parent) @@ -19,6 +20,7 @@ TcpServer::~TcpServer() void TcpServer::StartServer(QHostAddress ipAddr, int port) { bool ok = false; + server_->setProxy(QNetworkProxy::NoProxy); ok = server_->listen(ipAddr, port); if (ok){ qLog(Debug) << "TCP Server Started ----------------------"; From fe7e4635a609a94e5233fa8d94ff34a377d16803 Mon Sep 17 00:00:00 2001 From: Poldi Date: Sun, 18 Feb 2024 12:30:13 +1100 Subject: [PATCH 14/22] Client Add/delet now works --- src/networkremote/clientmanager.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/networkremote/clientmanager.cpp b/src/networkremote/clientmanager.cpp index d46b5b1d..1c457b7d 100644 --- a/src/networkremote/clientmanager.cpp +++ b/src/networkremote/clientmanager.cpp @@ -21,14 +21,18 @@ void ClientManager::AddClient(QTcpSocket *socket) client_ = new Client(app_); client_->Init(socket_); clients_->append(client_); + qLog(Debug) << "Socket State is " << socket_->state();; qLog(Debug) << "There are now +++++++++++++++" << clients_->count() << "clients connected"; } void ClientManager::RemoveClient() { + for (Client* client : *clients_) { + if (client->GetSocket() == socket_){ + clients_->removeAt(clients_->indexOf(client)); + } + } socket_->close(); - //int pos = clients_->indexOf(client_->so); - //clients_->removeAll(pos); qLog(Debug) << "There are now +++++++++++++++" << clients_->count() << "clients connected"; } @@ -42,7 +46,7 @@ void ClientManager::Error(QAbstractSocket::SocketError socketError) switch (socketError) { case QAbstractSocket::RemoteHostClosedError: qLog(Debug) << "Remote Host closed"; - RemoveClient(); + //RemoveClient(); break; case QAbstractSocket::HostNotFoundError: qLog(Debug) << "The host was not found. Please check the host name and port settings."; @@ -58,5 +62,9 @@ void ClientManager::Error(QAbstractSocket::SocketError socketError) void ClientManager::StateChanged() { + qLog(Debug) << socket_->state(); qLog(Debug) << "State Changed"; + if (socket_->state() == QAbstractSocket::UnconnectedState){ + RemoveClient(); + } } From 2315da78580b20f7999e06d1d812ecba4452ec70 Mon Sep 17 00:00:00 2001 From: Poldi Date: Mon, 26 Feb 2024 15:39:58 +1100 Subject: [PATCH 15/22] Server V1 ok --- src/networkremote/networkremote.cpp | 2 +- src/networkremote/tcpserver.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index f594ddbf..ce448e7b 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -64,7 +64,7 @@ void NetworkRemote::LoadSettings() void NetworkRemote::startTcpServer() { server_->StartServer(ipAddr_,remote_port_); - qLog(Debug) << "TcpServer started on IP " << ipAddr_<< " and port" << remote_port_; + //qLog(Debug) << "TcpServer started on IP " << ipAddr_<< " and port" << remote_port_; } void NetworkRemote::stopTcpServer() diff --git a/src/networkremote/tcpserver.cpp b/src/networkremote/tcpserver.cpp index 86f3c85e..37e0b840 100644 --- a/src/networkremote/tcpserver.cpp +++ b/src/networkremote/tcpserver.cpp @@ -23,7 +23,7 @@ void TcpServer::StartServer(QHostAddress ipAddr, int port) server_->setProxy(QNetworkProxy::NoProxy); ok = server_->listen(ipAddr, port); if (ok){ - qLog(Debug) << "TCP Server Started ----------------------"; + qLog(Debug) << "TCP Server Started on --- " << ipAddr.toString() << " and port -- " << port; } } From 59e6714edc4c29fbf6566486e97d085250262542 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Tue, 27 Feb 2024 10:21:20 +1100 Subject: [PATCH 16/22] Compiles with proto --- src/CMakeLists.txt | 1 + src/networkremote/CMakeLists.txt | 39 +++++---- src/networkremote/RemoteMessages.proto | 86 ++++++++++++++++++++ src/networkremote/client.cpp | 5 +- src/networkremote/client.h | 1 + src/networkremote/incomingmsg.cpp | 18 +++- src/networkremote/incomingmsg.h | 12 ++- src/networkremote/proto/CMakeLists.txt | 7 -- src/networkremote/proto/RemoteMessages.proto | 77 ------------------ 9 files changed, 142 insertions(+), 104 deletions(-) create mode 100644 src/networkremote/RemoteMessages.proto delete mode 100644 src/networkremote/proto/CMakeLists.txt delete mode 100644 src/networkremote/proto/RemoteMessages.proto diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fcf84184..89e8d1e7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1128,6 +1128,7 @@ target_link_libraries(strawberry_lib PUBLIC ${SINGLEAPPLICATION_LIBRARIES} libstrawberry-common libstrawberry-tagreader + lib-networkremote ) if(HAVE_DBUS) diff --git a/src/networkremote/CMakeLists.txt b/src/networkremote/CMakeLists.txt index 81664af2..700fa222 100644 --- a/src/networkremote/CMakeLists.txt +++ b/src/networkremote/CMakeLists.txt @@ -1,23 +1,32 @@ cmake_minimum_required(VERSION 3.14) -set(CMAKE_AUTOUIC ON) -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) +set(SOURCES RemoteMessages.proto) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) +link_directories( + ${GLIB_LIBRARY_DIRS} + ${PROTOBUF_LIBRARY_DIRS} +) -#find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) -#find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) +add_library(lib-networkremote OBJECT ${PROTO_SOURCES} ${SOURCES}) -add_subdirectory(proto) +target_include_directories(lib-networkremote SYSTEM PRIVATE + ${GLIB_INCLUDE_DIRS} + ${PROTOBUF_INCLUDE_DIRS} +) -#target_link_libraries(MyProtoBuffTest Qt${QT_VERSION_MAJOR}::Core) -#target_include_directories(MyProtoBuffTest PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") +target_include_directories(lib-networkremote PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_BINARY_DIR}/src +) +target_link_libraries(lib-networkremote PRIVATE + ${GLIB_LIBRARIES} + ${Protobuf_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Network + Qt${QT_VERSION_MAJOR}::Gui +) -#include(GNUInstallDirs) -#install(TARGETS MyProtoBuffTest -# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} -# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - +protobuf_generate(TARGET lib-networkremote) diff --git a/src/networkremote/RemoteMessages.proto b/src/networkremote/RemoteMessages.proto new file mode 100644 index 00000000..6428c054 --- /dev/null +++ b/src/networkremote/RemoteMessages.proto @@ -0,0 +1,86 @@ +syntax = "proto3"; + +option optimize_for = LITE_RUNTIME; + +package nw.remote; + +enum MsgType { + MSG_TYPE_UNSPECIFIED = 0; + + // Client messages + MSG_TYPE_CONNECT = 1; + MSG_TYPE_DISCONNECT = 2; + MSG_TYPE_PLAY = 3; + MSG_TYPE_NEXT = 4; + MSG_TYPE_PREVIOUS = 5; + MSG_TYPE_PAUSE = 6; + MSG_TYPE_STOP = 7; + +} + +message RequestConnect { + bool send_current_song = 1; +} + +enum ReasonDisconnect { + REASON_DISCONNECT_SERVER_SHUTDOWN = 0; + REASON_DISCONNECT_CLIENT_SHUTDOWN = 1; +} + +message RequestDisconnect { + ReasonDisconnect reason_disconnect = 1; +} + +message SongMetadata{ + uint32 id = 1; + string title = 2; + string album = 3; + string artist = 4; + string albumartist = 5; + uint32 track = 6; + string stryear = 7; + string genre = 8; + uint32 playcount = 9; + string songlength = 10; +} +message RequestSongMetadata { + SongMetadata song_metadata = 1; +} + +message ResponseSongMetadata { + SongMetadata song_metadata = 1; +} + +message RequestNextTrack { + bool next = 1; +} + +message RequestPreviousTrack { + bool previous = 1; +} + +message RequestPlay { + bool play = 1; +} + +message RequestPause { + bool pause = 1; +} + +message RequestStop { + bool stop = 1; +} +message Message { + uint32 version = 1; + MsgType type = 2; + RequestSongMetadata request_song_metadata = 3; + ResponseSongMetadata response_song_metadata = 4; + RequestNextTrack request_next_track = 5; + RequestPreviousTrack request_previous_track = 6; + RequestPlay request_play = 7; + RequestPause request_pause = 8; + RequestStop request_stop = 9; + RequestConnect request_connect = 10; + RequestDisconnect request_disconnect = 11; +} + diff --git a/src/networkremote/client.cpp b/src/networkremote/client.cpp index 16951829..95088e8b 100644 --- a/src/networkremote/client.cpp +++ b/src/networkremote/client.cpp @@ -6,21 +6,20 @@ Client::Client(Application *app, QObject *parent) msgReceived_(new IncomingMsg), newMsg_(new OutgoingMsg) { - } Client::~Client() { - } void Client::Init(QTcpSocket *socket) { socket_ = socket; - // socket_->setSocketDescriptor(socket_, 3, ReadWrite) + msgReceived_->Init(socket_); } QTcpSocket* Client::GetSocket() { return socket_; } + diff --git a/src/networkremote/client.h b/src/networkremote/client.h index 000f2c18..d4814bec 100644 --- a/src/networkremote/client.h +++ b/src/networkremote/client.h @@ -20,6 +20,7 @@ public: signals: + private: Application *app_; QTcpSocket *socket_; diff --git a/src/networkremote/incomingmsg.cpp b/src/networkremote/incomingmsg.cpp index 11360a55..5b3d510f 100644 --- a/src/networkremote/incomingmsg.cpp +++ b/src/networkremote/incomingmsg.cpp @@ -1,7 +1,23 @@ #include "incomingmsg.h" +#include "core/logging.h" IncomingMsg::IncomingMsg(QObject *parent) - : QObject{parent} + : QObject{parent}, + msg_(new nw::remote::Message) +{ +} + +void IncomingMsg::Init(QTcpSocket *socket) +{ + QObject::connect(socket, &QAbstractSocket::readyRead, this, &IncomingMsg::ReadyRead); +} + +void IncomingMsg::ProcessMsg() { } + +void IncomingMsg::ReadyRead() +{ + qLog(Debug) << "NetworkRemote Init() "; +} diff --git a/src/networkremote/incomingmsg.h b/src/networkremote/incomingmsg.h index 731e34dc..0ac6849e 100644 --- a/src/networkremote/incomingmsg.h +++ b/src/networkremote/incomingmsg.h @@ -2,15 +2,25 @@ #define INCOMINGMSG_H #include +#include +#include "networkremote/RemoteMessages.pb.h" class IncomingMsg : public QObject { Q_OBJECT public: - explicit IncomingMsg(QObject *parent = nullptr); + explicit IncomingMsg(QObject *parent = nullptr); + void Init(QTcpSocket*); + void ProcessMsg(); + +private slots: + void ReadyRead(); signals: +private: + nw::remote::Message *msg_; + }; #endif // INCOMINGMSG_H diff --git a/src/networkremote/proto/CMakeLists.txt b/src/networkremote/proto/CMakeLists.txt deleted file mode 100644 index a887ffd8..00000000 --- a/src/networkremote/proto/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -INCLUDE(FindProtobuf) -FIND_PACKAGE(Protobuf REQUIRED) -protobuf_generate_cpp(PROTO_SRC PROTO_HEADER RemoteMessages.proto) -ADD_LIBRARY(proto ${PROTO_HEADER} ${PROTO_SRC}) - -target_include_directories(proto PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) - diff --git a/src/networkremote/proto/RemoteMessages.proto b/src/networkremote/proto/RemoteMessages.proto deleted file mode 100644 index 2e1a97a8..00000000 --- a/src/networkremote/proto/RemoteMessages.proto +++ /dev/null @@ -1,77 +0,0 @@ -syntax = "proto3"; - -package spb.remote; - -enum MsgType { - UNKNOWN = 0; - - // Client messages - CONNECT = 1; - DISCONNECT = 2; - NEXT = 3; - PREVIOUS = 4; - PAUSE = 5; - STOP = 6; - - // Server messages - INFO = 7; -} - -message SongMetadata{ - enum Type { - UNKNOWN = 0; - ASF = 1; - FLAC = 2; - MP4 = 3; - MPC = 4; - MPEG = 5; - OGGFLAC = 6; - OGGSPEEX = 7; - OGGVORBIS = 8; - AIFF = 9; - WAV = 10; - TRUEAUDIO = 11; - CDDA = 12; - OGGOPUS = 13; - WAVPACK = 14; - SPC = 15; - VGM = 16; - APE = 17; - STREAM = 99; -} - int32 id = 1; - string title = 2; - string album = 3; - string artist = 4; - string albumartist = 5; - int32 track = 6; - string stryear = 7; - string genre = 8; - int32 playcount = 9; - string strlength = 10; -} -message RequestSongMetadata { - SongMetadata song_metadata = 1; -} - -message ResponseSongMetadata { - SongMetadata song_metadata = 1; -} - -message RequestNextTrack { - bool next = 1; -} - -message RequestPreviousTrack { - bool previous = 1; -} - -message Message { - int32 version = 1; - MsgType type = 2; - RequestSongMetadata request_song_Metadata = 3; - ResponseSongMetadata response_song_metadata = 4; - RequestNextTrack request_next_track = 5; - RequestPreviousTrack request_previous_track = 6; -} - From 7cebff9a03015164de4d4ab6e0908f1d7eab45ab Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:55:48 +1100 Subject: [PATCH 17/22] First Outgoing Msg --- src/networkremote/client.cpp | 13 +++++++++-- src/networkremote/client.h | 7 +++++- src/networkremote/clientmanager.cpp | 5 +++++ src/networkremote/incomingmsg.cpp | 22 ++++++++++++++----- src/networkremote/incomingmsg.h | 14 ++++++++++-- src/networkremote/networkremote.cpp | 7 ++++-- src/networkremote/networkremote.h | 2 ++ src/networkremote/outgoingmsg.cpp | 34 ++++++++++++++++++++++++++--- src/networkremote/outgoingmsg.h | 20 ++++++++++++++++- 9 files changed, 108 insertions(+), 16 deletions(-) diff --git a/src/networkremote/client.cpp b/src/networkremote/client.cpp index 95088e8b..a03c2449 100644 --- a/src/networkremote/client.cpp +++ b/src/networkremote/client.cpp @@ -3,18 +3,22 @@ Client::Client(Application *app, QObject *parent) : QObject{parent}, app_(app), - msgReceived_(new IncomingMsg), - newMsg_(new OutgoingMsg) + msgReceived_(new IncomingMsg(app)), + newMsg_(new OutgoingMsg(app)) { } Client::~Client() { + msgReceived_->deleteLater(); + newMsg_->deleteLater(); } void Client::Init(QTcpSocket *socket) { socket_ = socket; + QObject::connect(msgReceived_,&IncomingMsg::InMsgParsed,this, &Client::Respond); + msgReceived_->Init(socket_); } @@ -23,3 +27,8 @@ QTcpSocket* Client::GetSocket() return socket_; } +void Client::Respond() +{ + newMsg_->ProcessMsg(socket_, msgReceived_->GetMsgType()); +} + diff --git a/src/networkremote/client.h b/src/networkremote/client.h index d4814bec..4c84261e 100644 --- a/src/networkremote/client.h +++ b/src/networkremote/client.h @@ -6,6 +6,7 @@ #include "incomingmsg.h" #include "outgoingmsg.h" +#include "core/player.h" class Application; @@ -18,8 +19,12 @@ public: void Init(QTcpSocket*); QTcpSocket* GetSocket(); -signals: +public slots: + void Respond(); +signals: + void ReceiveMsg(); + void PrepareResponse(); private: Application *app_; diff --git a/src/networkremote/clientmanager.cpp b/src/networkremote/clientmanager.cpp index 1c457b7d..8589fc73 100644 --- a/src/networkremote/clientmanager.cpp +++ b/src/networkremote/clientmanager.cpp @@ -1,6 +1,8 @@ #include "clientmanager.h" +#include "core/application.h" #include "core/logging.h" + ClientManager::ClientManager(Application *app, QObject *parent) : QObject{parent}, app_(app) @@ -21,6 +23,7 @@ void ClientManager::AddClient(QTcpSocket *socket) client_ = new Client(app_); client_->Init(socket_); clients_->append(client_); + qLog(Debug) << "Socket State is " << socket_->state();; qLog(Debug) << "There are now +++++++++++++++" << clients_->count() << "clients connected"; } @@ -30,9 +33,11 @@ void ClientManager::RemoveClient() for (Client* client : *clients_) { if (client->GetSocket() == socket_){ clients_->removeAt(clients_->indexOf(client)); + client->deleteLater(); } } socket_->close(); + qLog(Debug) << "There are now +++++++++++++++" << clients_->count() << "clients connected"; } diff --git a/src/networkremote/incomingmsg.cpp b/src/networkremote/incomingmsg.cpp index 5b3d510f..6a6bde31 100644 --- a/src/networkremote/incomingmsg.cpp +++ b/src/networkremote/incomingmsg.cpp @@ -1,23 +1,35 @@ #include "incomingmsg.h" #include "core/logging.h" +#include "core/player.h" -IncomingMsg::IncomingMsg(QObject *parent) +IncomingMsg::IncomingMsg(Application *app, QObject *parent) : QObject{parent}, - msg_(new nw::remote::Message) + msg_(new nw::remote::Message), + app_(app) { } void IncomingMsg::Init(QTcpSocket *socket) { - QObject::connect(socket, &QAbstractSocket::readyRead, this, &IncomingMsg::ReadyRead); + socket_ = socket; + QObject::connect(socket_, &QAbstractSocket::readyRead, this, &IncomingMsg::ReadyRead); } -void IncomingMsg::ProcessMsg() +void IncomingMsg::SetMsgType() { + msgString_ = msgStream_.toStdString(); + msg_->ParseFromString(msgString_); + emit InMsgParsed(); +} +qint32 IncomingMsg::GetMsgType() +{ + return msg_->type(); } void IncomingMsg::ReadyRead() { - qLog(Debug) << "NetworkRemote Init() "; + qLog(Debug) << "Ready To Read"; + msgStream_ = socket_->readAll(); + if (msgStream_.length() > 0) SetMsgType(); } diff --git a/src/networkremote/incomingmsg.h b/src/networkremote/incomingmsg.h index 0ac6849e..ad1db810 100644 --- a/src/networkremote/incomingmsg.h +++ b/src/networkremote/incomingmsg.h @@ -4,23 +4,33 @@ #include #include #include "networkremote/RemoteMessages.pb.h" +#include "core/application.h" +#include "playlist/playlistitem.h" class IncomingMsg : public QObject { Q_OBJECT public: - explicit IncomingMsg(QObject *parent = nullptr); + explicit IncomingMsg(Application *app, QObject *parent = nullptr); void Init(QTcpSocket*); - void ProcessMsg(); + void SetMsgType(); + qint32 GetMsgType(); private slots: void ReadyRead(); signals: + void InMsgParsed(); private: nw::remote::Message *msg_; + QTcpSocket *socket_; + long bytesIn_; + QByteArray msgStream_; + std::string msgString_; + Application *app_; + qint32 msgType_; }; #endif // INCOMINGMSG_H diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index ce448e7b..7e238d17 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -3,9 +3,10 @@ #include #include "networkremote/networkremote.h" +#include "core/application.h" #include "core/logging.h" +#include "core/player.h" -//class TcpServer; NetworkRemote* NetworkRemote::sInstance = nullptr; const char *NetworkRemote::kSettingsGroup = "Remote"; @@ -35,6 +36,7 @@ void NetworkRemote::Init() else { stopTcpServer(); } + qLog(Debug) << "NetworkRemote Init() "; } @@ -64,7 +66,7 @@ void NetworkRemote::LoadSettings() void NetworkRemote::startTcpServer() { server_->StartServer(ipAddr_,remote_port_); - //qLog(Debug) << "TcpServer started on IP " << ipAddr_<< " and port" << remote_port_; + } void NetworkRemote::stopTcpServer() @@ -80,6 +82,7 @@ NetworkRemote* NetworkRemote::Instance() { // Error return nullptr; } + qLog(Debug) << "NetworkRemote instance is up "; return sInstance; } diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index 1f86152a..60739dd3 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -9,6 +9,8 @@ #include "tcpserver.h" #include "networkremote/remotesettings.h" +#include "playlist/playlist.h" +#include "playlist/playlistitem.h" class Application; class QThread; diff --git a/src/networkremote/outgoingmsg.cpp b/src/networkremote/outgoingmsg.cpp index 6d54a0b0..d9f0e3e6 100644 --- a/src/networkremote/outgoingmsg.cpp +++ b/src/networkremote/outgoingmsg.cpp @@ -1,7 +1,35 @@ #include "outgoingmsg.h" +#include "core/player.h" +#include "core/logging.h" +#include "playlist/playlistmanager.h" -OutgoingMsg::OutgoingMsg(QObject *parent) - : QObject{parent} +OutgoingMsg::OutgoingMsg(Application *app, QObject *parent) + : QObject{parent}, + app_(app) { - +} + +OutgoingMsg::~OutgoingMsg() +{ +} + +void OutgoingMsg::ProcessMsg(QTcpSocket * socket, qint32 msgType) +{ + socket_ = socket; + msgType_ = msgType; + + switch (msgType_) { + case nw::remote::MSG_TYPE_CONNECT: + SendCurrentTrackInfo(); + break; + default: + break; +} +} + +void OutgoingMsg::SendCurrentTrackInfo() +{ + currentItem_ = app_->playlist_manager()->active()->current_item(); + + qLog(Debug) << "Current item " << ¤tItem_->Metadata().albumartist(); } diff --git a/src/networkremote/outgoingmsg.h b/src/networkremote/outgoingmsg.h index f8f684f5..e3c2d04d 100644 --- a/src/networkremote/outgoingmsg.h +++ b/src/networkremote/outgoingmsg.h @@ -2,15 +2,33 @@ #define OUTGOINGMSG_H #include +#include "core/application.h" +#include "playlist/playlistitem.h" +#include "qtcpsocket.h" +#include "networkremote/RemoteMessages.pb.h" class OutgoingMsg : public QObject { Q_OBJECT public: - explicit OutgoingMsg(QObject *parent = nullptr); + explicit OutgoingMsg(Application *app, QObject *parent = nullptr); + ~OutgoingMsg() ; + void ProcessMsg(QTcpSocket*, qint32); + void SendCurrentTrackInfo(); + +private slots: + signals: +private: + + Application *app_; + PlaylistItemPtr currentItem_; + QTcpSocket *socket_; + qint32 msgType_; + QByteArray msgStream_; + }; #endif // OUTGOINGMSG_H From 711316c5dbfd564088156a1c7de9f94ecebfeaf7 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Mon, 4 Mar 2024 17:15:59 +1100 Subject: [PATCH 18/22] First Server message ok --- src/networkremote/RemoteMessages.proto | 19 +++++++--- src/networkremote/outgoingmsg.cpp | 49 +++++++++++++++++++++++--- src/networkremote/outgoingmsg.h | 11 +++++- 3 files changed, 69 insertions(+), 10 deletions(-) diff --git a/src/networkremote/RemoteMessages.proto b/src/networkremote/RemoteMessages.proto index 6428c054..fc8d0e91 100644 --- a/src/networkremote/RemoteMessages.proto +++ b/src/networkremote/RemoteMessages.proto @@ -10,14 +10,22 @@ enum MsgType { // Client messages MSG_TYPE_CONNECT = 1; MSG_TYPE_DISCONNECT = 2; - MSG_TYPE_PLAY = 3; - MSG_TYPE_NEXT = 4; - MSG_TYPE_PREVIOUS = 5; - MSG_TYPE_PAUSE = 6; - MSG_TYPE_STOP = 7; + MSG_TYPE_REQUEST_SONG_INFO = 3; + MSG_TYPE_PLAY = 4; + MSG_TYPE_NEXT = 5; + MSG_TYPE_PREVIOUS = 6; + MSG_TYPE_PAUSE = 7; + MSG_TYPE_STOP = 8; + + // Server messages + MSG_TYPE_CONNECT_OK = 9; } +enum PlayerState{ + PLAYER_STATUS_UNSPECIFIED = 0; + PLAYER_STATUS_PLAYING = 1; +} message RequestConnect { bool send_current_song = 1; } @@ -49,6 +57,7 @@ message RequestSongMetadata { message ResponseSongMetadata { SongMetadata song_metadata = 1; + PlayerState player_state = 2; } message RequestNextTrack { diff --git a/src/networkremote/outgoingmsg.cpp b/src/networkremote/outgoingmsg.cpp index d9f0e3e6..2bc520f8 100644 --- a/src/networkremote/outgoingmsg.cpp +++ b/src/networkremote/outgoingmsg.cpp @@ -5,7 +5,11 @@ OutgoingMsg::OutgoingMsg(Application *app, QObject *parent) : QObject{parent}, - app_(app) + app_(app), + msg_(new nw::remote::Message), + song_(new nw::remote::SongMetadata), + responeSong_(new nw::remote::ResponseSongMetadata), + player_(app_->player()) { } @@ -17,19 +21,56 @@ void OutgoingMsg::ProcessMsg(QTcpSocket * socket, qint32 msgType) { socket_ = socket; msgType_ = msgType; + msg_->Clear(); switch (msgType_) { case nw::remote::MSG_TYPE_CONNECT: SendCurrentTrackInfo(); break; default: + qLog(Debug) << "Unknow Message Type " << msgType_; break; -} + } + SendMsg(); } void OutgoingMsg::SendCurrentTrackInfo() { - currentItem_ = app_->playlist_manager()->active()->current_item(); + msg_->Clear(); + song_->Clear(); + responeSong_->Clear(); + + playerState_ = player_->engine()->state(); + playlist_ = app_->playlist_manager()->current(); + + + if (playerState_ == EngineBase::State::Playing){ + Song currentSong = playlist_->current_item_metadata(); + song_->mutable_title()->assign(currentSong.PrettyTitle().toStdString()); + song_->mutable_album()->assign(currentSong.album().toStdString()); + song_->mutable_artist()->assign(currentSong.artist().toStdString()); + song_->mutable_albumartist()->assign(currentSong.albumartist().toStdString()); + song_->set_track(currentSong.track()); + song_->mutable_stryear()->assign(currentSong.PrettyYear().toStdString()); + song_->mutable_genre()->assign(currentSong.genre().toStdString()); + song_->set_playcount(currentSong.playcount()); + song_->mutable_songlength()->assign(currentSong.PrettyLength().toStdString()); + + msg_->set_type(nw::remote::MSG_TYPE_PLAY); + msg_->mutable_response_song_metadata()->set_player_state(nw::remote::PLAYER_STATUS_PLAYING); + qLog(Debug) << "Current Title with Artist " << currentSong.PrettyTitleWithArtist(); + } + else { + /* NOTE: TODO + * I couldn't figure out how to get the song data if the song wasn't playing + * + * */ + msg_->set_type(nw::remote::MSG_TYPE_UNSPECIFIED); + msg_->mutable_response_song_metadata()->set_player_state(nw::remote::PLAYER_STATUS_UNSPECIFIED); + } +} + +void OutgoingMsg::SendMsg() +{ - qLog(Debug) << "Current item " << ¤tItem_->Metadata().albumartist(); } diff --git a/src/networkremote/outgoingmsg.h b/src/networkremote/outgoingmsg.h index e3c2d04d..e971359d 100644 --- a/src/networkremote/outgoingmsg.h +++ b/src/networkremote/outgoingmsg.h @@ -3,6 +3,7 @@ #include #include "core/application.h" +#include "playlist/playlist.h" #include "playlist/playlistitem.h" #include "qtcpsocket.h" #include "networkremote/RemoteMessages.pb.h" @@ -15,6 +16,7 @@ public: ~OutgoingMsg() ; void ProcessMsg(QTcpSocket*, qint32); void SendCurrentTrackInfo(); + void SendMsg(); private slots: @@ -25,10 +27,17 @@ private: Application *app_; PlaylistItemPtr currentItem_; + Playlist *playlist_; QTcpSocket *socket_; qint32 msgType_; QByteArray msgStream_; - + nw::remote::Message *msg_; + long bytesOut_; + std::string msgString_; + nw::remote::SongMetadata *song_; + nw::remote::ResponseSongMetadata *responeSong_; + EngineBase::State playerState_; + SharedPtr player_ ; }; #endif // OUTGOINGMSG_H From 809027f26d2d743b2af128758f126e5ce31e8b16 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Fri, 8 Mar 2024 14:18:29 +1100 Subject: [PATCH 19/22] Sound Info sent --- src/networkremote/RemoteMessages.proto | 56 +++++++++++++++----------- src/networkremote/client.cpp | 14 +++---- src/networkremote/client.h | 4 +- src/networkremote/outgoingmsg.cpp | 33 ++++++++++++++- src/networkremote/outgoingmsg.h | 3 +- 5 files changed, 74 insertions(+), 36 deletions(-) diff --git a/src/networkremote/RemoteMessages.proto b/src/networkremote/RemoteMessages.proto index fc8d0e91..3bc8427d 100644 --- a/src/networkremote/RemoteMessages.proto +++ b/src/networkremote/RemoteMessages.proto @@ -7,27 +7,32 @@ package nw.remote; enum MsgType { MSG_TYPE_UNSPECIFIED = 0; - // Client messages - MSG_TYPE_CONNECT = 1; - MSG_TYPE_DISCONNECT = 2; - MSG_TYPE_REQUEST_SONG_INFO = 3; - MSG_TYPE_PLAY = 4; - MSG_TYPE_NEXT = 5; - MSG_TYPE_PREVIOUS = 6; - MSG_TYPE_PAUSE = 7; - MSG_TYPE_STOP = 8; + // Client message + MSG_TYPE_REQUEST_SONG_INFO = 1; + MSG_TYPE_PLAY = 2; + MSG_TYPE_NEXT = 3; + MSG_TYPE_PREVIOUS = 4; + MSG_TYPE_PAUSE = 5; + MSG_TYPE_STOP = 6; // Server messages - MSG_TYPE_CONNECT_OK = 9; + MSG_TYPE_REPLY_SONG_INFO = 7; + MSG_TYPE_ENGINE_STATE_CHANGE = 8; + // Bidirectional messages + MSG_TYPE_DISCONNECT = 9; } enum PlayerState{ PLAYER_STATUS_UNSPECIFIED = 0; PLAYER_STATUS_PLAYING = 1; } -message RequestConnect { - bool send_current_song = 1; + +enum EngineState { + ENGINE_STATE_EMPTY = 0; + ENGINE_STATE_IDELE = 1; + ENGINE_STATE_PLAYING = 2; + ENGINE_STATE_PAUSED = 3; } enum ReasonDisconnect { @@ -52,7 +57,7 @@ message SongMetadata{ string songlength = 10; } message RequestSongMetadata { - SongMetadata song_metadata = 1; + bool send = 1; } message ResponseSongMetadata { @@ -79,17 +84,20 @@ message RequestPause { message RequestStop { bool stop = 1; } + +message EngineStateChange { + EngineState state = 1; +} message Message { - uint32 version = 1; - MsgType type = 2; - RequestSongMetadata request_song_metadata = 3; - ResponseSongMetadata response_song_metadata = 4; - RequestNextTrack request_next_track = 5; - RequestPreviousTrack request_previous_track = 6; - RequestPlay request_play = 7; - RequestPause request_pause = 8; - RequestStop request_stop = 9; - RequestConnect request_connect = 10; - RequestDisconnect request_disconnect = 11; + MsgType type = 1; + RequestSongMetadata request_song_metadata = 2; + ResponseSongMetadata response_song_metadata = 3; + RequestNextTrack request_next_track = 4; + RequestPreviousTrack request_previous_track = 5; + RequestPlay request_play = 6; + RequestPause request_pause = 7; + RequestStop request_stop = 8; + EngineStateChange engine_state_change = 9; + RequestDisconnect request_disconnect = 10; } diff --git a/src/networkremote/client.cpp b/src/networkremote/client.cpp index a03c2449..02790b60 100644 --- a/src/networkremote/client.cpp +++ b/src/networkremote/client.cpp @@ -3,23 +3,23 @@ Client::Client(Application *app, QObject *parent) : QObject{parent}, app_(app), - msgReceived_(new IncomingMsg(app)), - newMsg_(new OutgoingMsg(app)) + incomingMsg_(new IncomingMsg(app)), + outgoingMsg_(new OutgoingMsg(app)) { } Client::~Client() { - msgReceived_->deleteLater(); - newMsg_->deleteLater(); + incomingMsg_->deleteLater(); + outgoingMsg_->deleteLater(); } void Client::Init(QTcpSocket *socket) { socket_ = socket; - QObject::connect(msgReceived_,&IncomingMsg::InMsgParsed,this, &Client::Respond); + QObject::connect(incomingMsg_,&IncomingMsg::InMsgParsed,this, &Client::Respond); - msgReceived_->Init(socket_); + incomingMsg_->Init(socket_); } QTcpSocket* Client::GetSocket() @@ -29,6 +29,6 @@ QTcpSocket* Client::GetSocket() void Client::Respond() { - newMsg_->ProcessMsg(socket_, msgReceived_->GetMsgType()); + outgoingMsg_->ProcessMsg(socket_, incomingMsg_->GetMsgType()); } diff --git a/src/networkremote/client.h b/src/networkremote/client.h index 4c84261e..a2860fb0 100644 --- a/src/networkremote/client.h +++ b/src/networkremote/client.h @@ -29,8 +29,8 @@ signals: private: Application *app_; QTcpSocket *socket_; - IncomingMsg *msgReceived_; - OutgoingMsg *newMsg_; + IncomingMsg *incomingMsg_; + OutgoingMsg *outgoingMsg_; }; #endif // CLIENT_H diff --git a/src/networkremote/outgoingmsg.cpp b/src/networkremote/outgoingmsg.cpp index 2bc520f8..c096d6a0 100644 --- a/src/networkremote/outgoingmsg.cpp +++ b/src/networkremote/outgoingmsg.cpp @@ -11,6 +11,9 @@ OutgoingMsg::OutgoingMsg(Application *app, QObject *parent) responeSong_(new nw::remote::ResponseSongMetadata), player_(app_->player()) { + //QObject::connect(&*app_->player(), &Player::TrackSkipped, this, &MainWindow::TrackSkipped); + //QObject::connect(&*app_->player(), &Player::EngineChanged, this, &OutgoingMsg::EngineChanged); + QObject::connect(&*app_->player()->engine(), &EngineBase::StateChanged, this, &OutgoingMsg::EngineChanged); } OutgoingMsg::~OutgoingMsg() @@ -24,7 +27,7 @@ void OutgoingMsg::ProcessMsg(QTcpSocket * socket, qint32 msgType) msg_->Clear(); switch (msgType_) { - case nw::remote::MSG_TYPE_CONNECT: + case nw::remote::MSG_TYPE_REQUEST_SONG_INFO: SendCurrentTrackInfo(); break; default: @@ -56,8 +59,10 @@ void OutgoingMsg::SendCurrentTrackInfo() song_->set_playcount(currentSong.playcount()); song_->mutable_songlength()->assign(currentSong.PrettyLength().toStdString()); - msg_->set_type(nw::remote::MSG_TYPE_PLAY); + msg_->set_type(nw::remote::MSG_TYPE_REPLY_SONG_INFO); msg_->mutable_response_song_metadata()->set_player_state(nw::remote::PLAYER_STATUS_PLAYING); + msg_->mutable_response_song_metadata()->set_allocated_song_metadata(song_); + qLog(Debug) << "Current Title with Artist " << currentSong.PrettyTitleWithArtist(); } else { @@ -68,9 +73,33 @@ void OutgoingMsg::SendCurrentTrackInfo() msg_->set_type(nw::remote::MSG_TYPE_UNSPECIFIED); msg_->mutable_response_song_metadata()->set_player_state(nw::remote::PLAYER_STATUS_UNSPECIFIED); } + SendMsg(); } void OutgoingMsg::SendMsg() { + std::string msgOut; + msg_->SerializeToString(&msgOut); + + + bytesOut_ = msg_->ByteSizeLong(); + + if(socket_->isWritable()) + { + + socket_->write(QByteArray::fromStdString(msgOut)); + qInfo() << socket_->bytesToWrite() << " bytes written to socket " << socket_->socketDescriptor(); + statusOk_ = true; + msg_->Clear(); + } + else + { + statusOk_ = false; + } +} + +void OutgoingMsg::EngineChanged() +{ + qInfo("Engine has changed"); } diff --git a/src/networkremote/outgoingmsg.h b/src/networkremote/outgoingmsg.h index e971359d..e22f62c1 100644 --- a/src/networkremote/outgoingmsg.h +++ b/src/networkremote/outgoingmsg.h @@ -19,7 +19,7 @@ public: void SendMsg(); private slots: - + void EngineChanged(); signals: @@ -38,6 +38,7 @@ private: nw::remote::ResponseSongMetadata *responeSong_; EngineBase::State playerState_; SharedPtr player_ ; + bool statusOk_; }; #endif // OUTGOINGMSG_H From c00a3433eb7e6c7972cc40166742c1c4fc1bd83d Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:40:25 +1100 Subject: [PATCH 20/22] Works but only once --- src/networkremote/RemoteMessages.proto | 44 +++++++++++++++++++++----- src/networkremote/client.cpp | 44 +++++++++++++++++++++++--- src/networkremote/client.h | 5 +++ src/networkremote/outgoingmsg.cpp | 27 +++------------- src/networkremote/outgoingmsg.h | 7 ++-- 5 files changed, 88 insertions(+), 39 deletions(-) diff --git a/src/networkremote/RemoteMessages.proto b/src/networkremote/RemoteMessages.proto index 3bc8427d..6b753fdb 100644 --- a/src/networkremote/RemoteMessages.proto +++ b/src/networkremote/RemoteMessages.proto @@ -9,18 +9,26 @@ enum MsgType { // Client message MSG_TYPE_REQUEST_SONG_INFO = 1; - MSG_TYPE_PLAY = 2; - MSG_TYPE_NEXT = 3; - MSG_TYPE_PREVIOUS = 4; - MSG_TYPE_PAUSE = 5; - MSG_TYPE_STOP = 6; + MSG_TYPE_REQUEST_PLAY = 2; + MSG_TYPE_REQUEST_NEXT = 3; + MSG_TYPE_REQUEST_PREVIOUS = 4; + MSG_TYPE_REQUEST_PAUSE = 5; + MSG_TYPE_REQUEST_STOP = 6; + MSG_TYPE_REQUEST_FINISH = 7; + // Server messages - MSG_TYPE_REPLY_SONG_INFO = 7; - MSG_TYPE_ENGINE_STATE_CHANGE = 8; + MSG_TYPE_REPLY_SONG_INFO = 8; + MSG_TYPE_REPLY_PLAY = 9; + MSG_TYPE_REPLY_NEXT = 10; + MSG_TYPE_REPLY_PREVIOUS = 11; + MSG_TYPE_REPLY_PAUSE = 12; + MSG_TYPE_REPLY_STOP = 13; + MSG_TYPE_REPLY_FINISH = 14; + MSG_TYPE_ENGINE_STATE_CHANGE = 15; // Bidirectional messages - MSG_TYPE_DISCONNECT = 9; + MSG_TYPE_DISCONNECT = 16; } enum PlayerState{ @@ -69,18 +77,34 @@ message RequestNextTrack { bool next = 1; } +message ResponseNextTrack { + bool next = 1; +} + message RequestPreviousTrack { bool previous = 1; } +message ResponsePreviousTrack { + bool previous = 1; +} + message RequestPlay { bool play = 1; } +message ResponsePlay { + bool play = 1; +} + message RequestPause { bool pause = 1; } +message ResponsePause { + bool pause = 1; +} + message RequestStop { bool stop = 1; } @@ -99,5 +123,9 @@ message Message { RequestStop request_stop = 8; EngineStateChange engine_state_change = 9; RequestDisconnect request_disconnect = 10; + ResponseNextTrack response_next_track = 11; + ResponsePreviousTrack response_previous_track = 12; + ResponsePlay response_play = 13; + ResponsePause response_pause = 14; } diff --git a/src/networkremote/client.cpp b/src/networkremote/client.cpp index 02790b60..33d0c148 100644 --- a/src/networkremote/client.cpp +++ b/src/networkremote/client.cpp @@ -4,8 +4,10 @@ Client::Client(Application *app, QObject *parent) : QObject{parent}, app_(app), incomingMsg_(new IncomingMsg(app)), - outgoingMsg_(new OutgoingMsg(app)) + outgoingMsg_(new OutgoingMsg(app)), + player_(app_->player()) { + QObject::connect(&*app_->player()->engine(), &EngineBase::StateChanged, this, &Client::EngineChanged); } Client::~Client() @@ -17,9 +19,10 @@ Client::~Client() void Client::Init(QTcpSocket *socket) { socket_ = socket; - QObject::connect(incomingMsg_,&IncomingMsg::InMsgParsed,this, &Client::Respond); + QObject::connect(incomingMsg_,&IncomingMsg::InMsgParsed,this, &Client::ProcessIncoming); incomingMsg_->Init(socket_); + outgoingMsg_->Init(socket_, player_); } QTcpSocket* Client::GetSocket() @@ -27,8 +30,41 @@ QTcpSocket* Client::GetSocket() return socket_; } -void Client::Respond() +void Client::ProcessIncoming() { - outgoingMsg_->ProcessMsg(socket_, incomingMsg_->GetMsgType()); + msgType_ = incomingMsg_->GetMsgType(); + switch (msgType_) + { + case nw::remote::MSG_TYPE_REQUEST_SONG_INFO: + outgoingMsg_->SendCurrentTrackInfo(); + break; + case nw::remote::MSG_TYPE_REQUEST_PLAY: + break; + case nw::remote::MSG_TYPE_REQUEST_NEXT: + break; + case nw::remote::MSG_TYPE_REQUEST_PREVIOUS: + break; + case nw::remote::MSG_TYPE_REQUEST_PAUSE: + break; + case nw::remote::MSG_TYPE_REQUEST_STOP: + break; + case nw::remote::MSG_TYPE_REQUEST_FINISH: + break; + case nw::remote::MSG_TYPE_DISCONNECT: + break; + default: + qInfo("Unknown mwessage type"); + break; +} +} + +void Client::Respond() +{ + //outgoingMsg_->ProcessMsg(socket_, incomingMsg_->GetMsgType()); +} + +void Client::EngineChanged() +{ + qInfo("Engine has changed"); } diff --git a/src/networkremote/client.h b/src/networkremote/client.h index a2860fb0..26b8daa5 100644 --- a/src/networkremote/client.h +++ b/src/networkremote/client.h @@ -7,6 +7,7 @@ #include "incomingmsg.h" #include "outgoingmsg.h" #include "core/player.h" +#include "networkremote/RemoteMessages.pb.h" class Application; @@ -18,9 +19,11 @@ public: ~Client(); void Init(QTcpSocket*); QTcpSocket* GetSocket(); + void ProcessIncoming(); public slots: void Respond(); + void EngineChanged(); signals: void ReceiveMsg(); @@ -31,6 +34,8 @@ private: QTcpSocket *socket_; IncomingMsg *incomingMsg_; OutgoingMsg *outgoingMsg_; + qint32 msgType_; + SharedPtr player_; }; #endif // CLIENT_H diff --git a/src/networkremote/outgoingmsg.cpp b/src/networkremote/outgoingmsg.cpp index c096d6a0..dc193ec3 100644 --- a/src/networkremote/outgoingmsg.cpp +++ b/src/networkremote/outgoingmsg.cpp @@ -8,41 +8,26 @@ OutgoingMsg::OutgoingMsg(Application *app, QObject *parent) app_(app), msg_(new nw::remote::Message), song_(new nw::remote::SongMetadata), - responeSong_(new nw::remote::ResponseSongMetadata), - player_(app_->player()) + responeSong_(new nw::remote::ResponseSongMetadata) { - //QObject::connect(&*app_->player(), &Player::TrackSkipped, this, &MainWindow::TrackSkipped); - //QObject::connect(&*app_->player(), &Player::EngineChanged, this, &OutgoingMsg::EngineChanged); - QObject::connect(&*app_->player()->engine(), &EngineBase::StateChanged, this, &OutgoingMsg::EngineChanged); } OutgoingMsg::~OutgoingMsg() { } -void OutgoingMsg::ProcessMsg(QTcpSocket * socket, qint32 msgType) +void OutgoingMsg::Init(QTcpSocket *socket, SharedPtr player) { socket_ = socket; - msgType_ = msgType; - msg_->Clear(); - - switch (msgType_) { - case nw::remote::MSG_TYPE_REQUEST_SONG_INFO: - SendCurrentTrackInfo(); - break; - default: - qLog(Debug) << "Unknow Message Type " << msgType_; - break; - } - SendMsg(); + player_ = player; } + void OutgoingMsg::SendCurrentTrackInfo() { msg_->Clear(); song_->Clear(); responeSong_->Clear(); - playerState_ = player_->engine()->state(); playlist_ = app_->playlist_manager()->current(); @@ -99,7 +84,3 @@ void OutgoingMsg::SendMsg() } } -void OutgoingMsg::EngineChanged() -{ - qInfo("Engine has changed"); -} diff --git a/src/networkremote/outgoingmsg.h b/src/networkremote/outgoingmsg.h index e22f62c1..6d6b9729 100644 --- a/src/networkremote/outgoingmsg.h +++ b/src/networkremote/outgoingmsg.h @@ -13,18 +13,16 @@ class OutgoingMsg : public QObject Q_OBJECT public: explicit OutgoingMsg(Application *app, QObject *parent = nullptr); - ~OutgoingMsg() ; - void ProcessMsg(QTcpSocket*, qint32); + ~OutgoingMsg(); + void Init(QTcpSocket*, SharedPtr); void SendCurrentTrackInfo(); void SendMsg(); private slots: - void EngineChanged(); signals: private: - Application *app_; PlaylistItemPtr currentItem_; Playlist *playlist_; @@ -39,6 +37,7 @@ private: EngineBase::State playerState_; SharedPtr player_ ; bool statusOk_; + }; #endif // OUTGOINGMSG_H From 4785e5fe2e185793185e33ef34ea5c561e3f5131 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Tue, 12 Mar 2024 16:25:59 +1100 Subject: [PATCH 21/22] All works V1 --- src/networkremote/client.cpp | 9 +++++++++ src/networkremote/incomingmsg.cpp | 2 +- src/networkremote/outgoingmsg.cpp | 4 +--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/networkremote/client.cpp b/src/networkremote/client.cpp index 33d0c148..a47faa2a 100644 --- a/src/networkremote/client.cpp +++ b/src/networkremote/client.cpp @@ -39,16 +39,25 @@ void Client::ProcessIncoming() outgoingMsg_->SendCurrentTrackInfo(); break; case nw::remote::MSG_TYPE_REQUEST_PLAY: + player_->Play(); + // In case the player was paused when the client started send the song info again + outgoingMsg_->SendCurrentTrackInfo(); break; case nw::remote::MSG_TYPE_REQUEST_NEXT: + player_->Next(); + outgoingMsg_->SendCurrentTrackInfo(); break; case nw::remote::MSG_TYPE_REQUEST_PREVIOUS: + player_->Previous(); + outgoingMsg_->SendCurrentTrackInfo(); break; case nw::remote::MSG_TYPE_REQUEST_PAUSE: + player_->Pause(); break; case nw::remote::MSG_TYPE_REQUEST_STOP: break; case nw::remote::MSG_TYPE_REQUEST_FINISH: + player_->Stop(); break; case nw::remote::MSG_TYPE_DISCONNECT: break; diff --git a/src/networkremote/incomingmsg.cpp b/src/networkremote/incomingmsg.cpp index 6a6bde31..71418327 100644 --- a/src/networkremote/incomingmsg.cpp +++ b/src/networkremote/incomingmsg.cpp @@ -12,7 +12,7 @@ IncomingMsg::IncomingMsg(Application *app, QObject *parent) void IncomingMsg::Init(QTcpSocket *socket) { socket_ = socket; - QObject::connect(socket_, &QAbstractSocket::readyRead, this, &IncomingMsg::ReadyRead); + QObject::connect(socket_, &QIODevice::readyRead, this, &IncomingMsg::ReadyRead); } void IncomingMsg::SetMsgType() diff --git a/src/networkremote/outgoingmsg.cpp b/src/networkremote/outgoingmsg.cpp index dc193ec3..252ea0fb 100644 --- a/src/networkremote/outgoingmsg.cpp +++ b/src/networkremote/outgoingmsg.cpp @@ -7,7 +7,6 @@ OutgoingMsg::OutgoingMsg(Application *app, QObject *parent) : QObject{parent}, app_(app), msg_(new nw::remote::Message), - song_(new nw::remote::SongMetadata), responeSong_(new nw::remote::ResponseSongMetadata) { } @@ -26,12 +25,11 @@ void OutgoingMsg::Init(QTcpSocket *socket, SharedPtr player) void OutgoingMsg::SendCurrentTrackInfo() { msg_->Clear(); - song_->Clear(); + song_ = new nw::remote::SongMetadata; responeSong_->Clear(); playerState_ = player_->engine()->state(); playlist_ = app_->playlist_manager()->current(); - if (playerState_ == EngineBase::State::Playing){ Song currentSong = playlist_->current_item_metadata(); song_->mutable_title()->assign(currentSong.PrettyTitle().toStdString()); From 6c8be50fbb14ef01b9c86bd51f51e876884ff195 Mon Sep 17 00:00:00 2001 From: Poldi <43848359+poldi171254@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:13:01 +1100 Subject: [PATCH 22/22] Pull Request V1 --- src/networkremote/client.cpp | 15 ++----------- src/networkremote/client.h | 7 ++---- src/networkremote/clientmanager.cpp | 3 +-- src/networkremote/incomingmsg.h | 2 -- src/networkremote/networkremote.cpp | 5 ----- src/networkremote/networkremote.h | 2 -- src/networkremote/outgoingmsg.cpp | 33 ++++++++++++++-------------- src/networkremote/outgoingmsg.h | 5 ----- src/networkremote/remotesettings.cpp | 4 +--- 9 files changed, 23 insertions(+), 53 deletions(-) diff --git a/src/networkremote/client.cpp b/src/networkremote/client.cpp index a47faa2a..214c5c8c 100644 --- a/src/networkremote/client.cpp +++ b/src/networkremote/client.cpp @@ -7,7 +7,6 @@ Client::Client(Application *app, QObject *parent) outgoingMsg_(new OutgoingMsg(app)), player_(app_->player()) { - QObject::connect(&*app_->player()->engine(), &EngineBase::StateChanged, this, &Client::EngineChanged); } Client::~Client() @@ -57,23 +56,13 @@ void Client::ProcessIncoming() case nw::remote::MSG_TYPE_REQUEST_STOP: break; case nw::remote::MSG_TYPE_REQUEST_FINISH: - player_->Stop(); + emit ClientIsLeaving(); break; case nw::remote::MSG_TYPE_DISCONNECT: break; default: qInfo("Unknown mwessage type"); break; -} -} - -void Client::Respond() -{ - //outgoingMsg_->ProcessMsg(socket_, incomingMsg_->GetMsgType()); -} - -void Client::EngineChanged() -{ - qInfo("Engine has changed"); + } } diff --git a/src/networkremote/client.h b/src/networkremote/client.h index 26b8daa5..3107f945 100644 --- a/src/networkremote/client.h +++ b/src/networkremote/client.h @@ -7,7 +7,7 @@ #include "incomingmsg.h" #include "outgoingmsg.h" #include "core/player.h" -#include "networkremote/RemoteMessages.pb.h" + class Application; @@ -21,13 +21,10 @@ public: QTcpSocket* GetSocket(); void ProcessIncoming(); -public slots: - void Respond(); - void EngineChanged(); - signals: void ReceiveMsg(); void PrepareResponse(); + void ClientIsLeaving(); private: Application *app_; diff --git a/src/networkremote/clientmanager.cpp b/src/networkremote/clientmanager.cpp index 8589fc73..ce253b2c 100644 --- a/src/networkremote/clientmanager.cpp +++ b/src/networkremote/clientmanager.cpp @@ -23,6 +23,7 @@ void ClientManager::AddClient(QTcpSocket *socket) client_ = new Client(app_); client_->Init(socket_); clients_->append(client_); + QObject::connect(client_, &Client::ClientIsLeaving, this, &ClientManager::RemoveClient); qLog(Debug) << "Socket State is " << socket_->state();; qLog(Debug) << "There are now +++++++++++++++" << clients_->count() << "clients connected"; @@ -51,7 +52,6 @@ void ClientManager::Error(QAbstractSocket::SocketError socketError) switch (socketError) { case QAbstractSocket::RemoteHostClosedError: qLog(Debug) << "Remote Host closed"; - //RemoveClient(); break; case QAbstractSocket::HostNotFoundError: qLog(Debug) << "The host was not found. Please check the host name and port settings."; @@ -62,7 +62,6 @@ void ClientManager::Error(QAbstractSocket::SocketError socketError) default: qLog(Debug) << "The following error occurred: %1." << socket_->errorString(); } - } void ClientManager::StateChanged() diff --git a/src/networkremote/incomingmsg.h b/src/networkremote/incomingmsg.h index ad1db810..04121d6c 100644 --- a/src/networkremote/incomingmsg.h +++ b/src/networkremote/incomingmsg.h @@ -5,7 +5,6 @@ #include #include "networkremote/RemoteMessages.pb.h" #include "core/application.h" -#include "playlist/playlistitem.h" class IncomingMsg : public QObject { @@ -29,7 +28,6 @@ private: QByteArray msgStream_; std::string msgString_; Application *app_; - qint32 msgType_; }; diff --git a/src/networkremote/networkremote.cpp b/src/networkremote/networkremote.cpp index 7e238d17..0c0d937a 100644 --- a/src/networkremote/networkremote.cpp +++ b/src/networkremote/networkremote.cpp @@ -1,5 +1,3 @@ - - #include #include "networkremote/networkremote.h" @@ -36,7 +34,6 @@ void NetworkRemote::Init() else { stopTcpServer(); } - qLog(Debug) << "NetworkRemote Init() "; } @@ -50,7 +47,6 @@ void NetworkRemote::Update() else { stopTcpServer(); } - qLog(Debug) << "NetworkRemote Updated ==== "; } @@ -66,7 +62,6 @@ void NetworkRemote::LoadSettings() void NetworkRemote::startTcpServer() { server_->StartServer(ipAddr_,remote_port_); - } void NetworkRemote::stopTcpServer() diff --git a/src/networkremote/networkremote.h b/src/networkremote/networkremote.h index 60739dd3..1f86152a 100644 --- a/src/networkremote/networkremote.h +++ b/src/networkremote/networkremote.h @@ -9,8 +9,6 @@ #include "tcpserver.h" #include "networkremote/remotesettings.h" -#include "playlist/playlist.h" -#include "playlist/playlistitem.h" class Application; class QThread; diff --git a/src/networkremote/outgoingmsg.cpp b/src/networkremote/outgoingmsg.cpp index 252ea0fb..289f4faa 100644 --- a/src/networkremote/outgoingmsg.cpp +++ b/src/networkremote/outgoingmsg.cpp @@ -1,6 +1,5 @@ #include "outgoingmsg.h" #include "core/player.h" -#include "core/logging.h" #include "playlist/playlistmanager.h" OutgoingMsg::OutgoingMsg(Application *app, QObject *parent) @@ -27,26 +26,28 @@ void OutgoingMsg::SendCurrentTrackInfo() msg_->Clear(); song_ = new nw::remote::SongMetadata; responeSong_->Clear(); - playerState_ = player_->engine()->state(); - playlist_ = app_->playlist_manager()->current(); - if (playerState_ == EngineBase::State::Playing){ - Song currentSong = playlist_->current_item_metadata(); - song_->mutable_title()->assign(currentSong.PrettyTitle().toStdString()); - song_->mutable_album()->assign(currentSong.album().toStdString()); - song_->mutable_artist()->assign(currentSong.artist().toStdString()); - song_->mutable_albumartist()->assign(currentSong.albumartist().toStdString()); - song_->set_track(currentSong.track()); - song_->mutable_stryear()->assign(currentSong.PrettyYear().toStdString()); - song_->mutable_genre()->assign(currentSong.genre().toStdString()); - song_->set_playcount(currentSong.playcount()); - song_->mutable_songlength()->assign(currentSong.PrettyLength().toStdString()); + //PlaylistItemPtr current_item() const; + currentItem_ = app_->playlist_manager()->active()->current_item(); + + //PlaylistItemPtr prt = player_->GetCurrentItem(); + + + //if (playerState_ == EngineBase::State::Playing){ + if (currentItem_ != NULL){ + song_->mutable_title()->assign(currentItem_->Metadata().PrettyTitle().toStdString()); + song_->mutable_album()->assign(currentItem_->Metadata().album().toStdString()); + song_->mutable_artist()->assign(currentItem_->Metadata().artist().toStdString()); + song_->mutable_albumartist()->assign(currentItem_->Metadata().albumartist().toStdString()); + song_->set_track(currentItem_->Metadata().track()); + song_->mutable_stryear()->assign(currentItem_->Metadata().PrettyYear().toStdString()); + song_->mutable_genre()->assign(currentItem_->Metadata().genre().toStdString()); + song_->set_playcount(currentItem_->Metadata().playcount()); + song_->mutable_songlength()->assign(currentItem_->Metadata().PrettyLength().toStdString()); msg_->set_type(nw::remote::MSG_TYPE_REPLY_SONG_INFO); msg_->mutable_response_song_metadata()->set_player_state(nw::remote::PLAYER_STATUS_PLAYING); msg_->mutable_response_song_metadata()->set_allocated_song_metadata(song_); - - qLog(Debug) << "Current Title with Artist " << currentSong.PrettyTitleWithArtist(); } else { /* NOTE: TODO diff --git a/src/networkremote/outgoingmsg.h b/src/networkremote/outgoingmsg.h index 6d6b9729..1a343f42 100644 --- a/src/networkremote/outgoingmsg.h +++ b/src/networkremote/outgoingmsg.h @@ -18,10 +18,6 @@ public: void SendCurrentTrackInfo(); void SendMsg(); -private slots: - -signals: - private: Application *app_; PlaylistItemPtr currentItem_; @@ -34,7 +30,6 @@ private: std::string msgString_; nw::remote::SongMetadata *song_; nw::remote::ResponseSongMetadata *responeSong_; - EngineBase::State playerState_; SharedPtr player_ ; bool statusOk_; diff --git a/src/networkremote/remotesettings.cpp b/src/networkremote/remotesettings.cpp index aca15427..ad5c3ae4 100644 --- a/src/networkremote/remotesettings.cpp +++ b/src/networkremote/remotesettings.cpp @@ -4,13 +4,11 @@ #include "remotesettings.h" #include "core/logging.h" - const char *RemoteSettings::kSettingsGroup = "NetworkRemote"; RemoteSettings::RemoteSettings(QObject *parent) : QObject{parent} -{ -} +{} RemoteSettings::~RemoteSettings() {}