Skip to content

Commit f0b517b

Browse files
committed
feat: Implement DBus IPC API
1 parent 95e7d9a commit f0b517b

18 files changed

+678
-121
lines changed

src/MainWindow.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "interface/TrayIcon.h"
2929
#include "utils/Common.h"
3030
#include "utils/dbus/ClientProxy.h"
31+
#include "utils/dbus/IpcHandler.h"
3132
#include "utils/dbus/ServerAdaptor.h"
3233
#include "utils/DebuggerUtils.h"
3334
#include "utils/Log.h"
@@ -94,6 +95,7 @@ MainWindow::MainWindow(bool statupInTray,
9495
_styleHelper = new StyleHelper(this);
9596
_eelEditor = new EELEditor(this);
9697
_trayIcon = new TrayIcon(this);
98+
_ipcHandler = new IpcHandler(_audioService, this);
9799

98100
_appMgrFragment = new FragmentHost<AppManagerFragment*>(new AppManagerFragment(_audioService->appManager(), this), WAF::BottomSide, this);
99101
_statusFragment = new FragmentHost<StatusFragment*>(new StatusFragment(this), WAF::BottomSide, this);
@@ -424,9 +426,8 @@ MainWindow::MainWindow(bool statupInTray,
424426
MainWindow::~MainWindow()
425427
{
426428
if(_audioService != nullptr)
427-
{
428429
delete _audioService;
429-
}
430+
delete _ipcHandler;
430431
delete ui;
431432
}
432433

@@ -779,15 +780,15 @@ void MainWindow::applyConfig()
779780
DspConfig::instance().set(DspConfig::master_postgain, QVariant(ui->postgain->valueA()));
780781

781782
DspConfig::instance().set(DspConfig::ddc_enable, QVariant(ui->ddc_enable->isChecked()));
782-
DspConfig::instance().set(DspConfig::ddc_file, QVariant("\"" + _currentVdc + "\""));
783+
DspConfig::instance().set(DspConfig::ddc_file, QVariant(_currentVdc));
783784

784785
DspConfig::instance().set(DspConfig::liveprog_enable, QVariant(ui->liveprog->isActive()));
785-
DspConfig::instance().set(DspConfig::liveprog_file, QVariant("\"" + ui->liveprog->currentLiveprog() + "\""));
786+
DspConfig::instance().set(DspConfig::liveprog_file, QVariant(ui->liveprog->currentLiveprog()));
786787

787788
DspConfig::instance().set(DspConfig::convolver_enable, QVariant(ui->conv_enable->isChecked()));
788789
DspConfig::instance().set(DspConfig::convolver_optimization_mode,QVariant(ui->conv_ir_opt->currentIndex()));
789-
DspConfig::instance().set(DspConfig::convolver_file, QVariant("\"" + _currentImpulseResponse + "\""));
790-
DspConfig::instance().set(DspConfig::convolver_waveform_edit, QVariant("\"" + _currentConvWaveformEdit + "\""));
790+
DspConfig::instance().set(DspConfig::convolver_file, QVariant(_currentImpulseResponse));
791+
DspConfig::instance().set(DspConfig::convolver_waveform_edit, QVariant(_currentConvWaveformEdit));
791792

792793
DspConfig::instance().set(DspConfig::compression_enable, QVariant(ui->enable_comp->isChecked()));
793794
DspConfig::instance().set(DspConfig::compression_maxatk, QVariant(ui->comp_maxattack->valueA()));
@@ -816,13 +817,13 @@ void MainWindow::applyConfig()
816817
counter++;
817818
}
818819

819-
DspConfig::instance().set(DspConfig::tone_eq, QVariant("\"" + rawEqString + "\""));
820+
DspConfig::instance().set(DspConfig::tone_eq, QVariant(rawEqString));
820821
}
821822
else
822823
{
823824
QString rawEqString;
824825
ui->eq_dyn_widget->storeCsv(rawEqString);
825-
DspConfig::instance().set(DspConfig::tone_eq, QVariant("\"" + rawEqString + "\""));
826+
DspConfig::instance().set(DspConfig::tone_eq, QVariant(rawEqString));
826827
}
827828

828829
DspConfig::instance().set(DspConfig::bass_enable, QVariant(ui->bassboost->isChecked()));
@@ -858,7 +859,7 @@ void MainWindow::applyConfig()
858859
DspConfig::instance().set(DspConfig::graphiceq_enable, QVariant(ui->graphicEq->chk_enable->isChecked()));
859860
QString streq;
860861
ui->graphicEq->store(streq);
861-
DspConfig::instance().set(DspConfig::graphiceq_param, QVariant("\"" + streq + "\""));
862+
DspConfig::instance().set(DspConfig::graphiceq_param, QVariant(streq));
862863

863864
DspConfig::instance().commit();
864865
DspConfig::instance().save();

src/MainWindow.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class QVBoxLayout;
4545
class AudioManager;
4646
class SingleInstanceMonitor;
4747
class StatusFragment;
48+
class IpcHandler;
4849

4950
using namespace std;
5051
namespace Ui
@@ -123,6 +124,7 @@ private slots:
123124
FragmentHost<PresetFragment*>* _presetFragment = nullptr;
124125

125126
IAudioService* _audioService = nullptr;
127+
IpcHandler* _ipcHandler = nullptr;
126128

127129
bool _blockApply = false;
128130

src/config/DspConfig.h

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,9 @@ class DspConfig :
133133
}
134134

135135
template<class T>
136-
T get(const Key &key, bool* exists = nullptr)
137-
{
138-
auto skey = QVariant::fromValue(key).toString();
139-
auto variant = _conf->getVariant(skey, true, exists);
136+
T get(const QString &key, bool* exists = nullptr)
137+
{
138+
auto variant = _conf->getVariant(key, true, exists);
140139

141140
if constexpr (std::is_same_v<T, QVariant>) {
142141
return (T)(variant);
@@ -161,6 +160,12 @@ class DspConfig :
161160
throw new std::exception;
162161
}
163162

163+
template<class T>
164+
T get(const Key &key, bool* exists = nullptr)
165+
{
166+
return get<T>(QVariant::fromValue(key).toString(), exists);
167+
}
168+
164169
Type type(const Key &key)
165170
{
166171
bool exists;

src/data/model/PresetListModel.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,8 @@ void PresetListModel::rescan()
5757

5858
endResetModel();
5959
}
60+
61+
QStringList PresetListModel::getList() const
62+
{
63+
return presets;
64+
}

src/data/model/PresetListModel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class PresetListModel : public QAbstractListModel
1414
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
1515

1616
void rescan();
17+
QStringList getList() const;
1718

1819
private:
1920

src/main.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,20 +81,21 @@ int main(int argc,
8181
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true);
8282
QApplication app(argc, argv);
8383

84+
QCommandLineOption tray(QStringList() << "t" << "tray", "Start minimized in systray (forced)");
85+
QCommandLineOption watch(QStringList() << "w" << "watch", "Watch audio.conf and apply changes made by external apps automatically");
86+
QCommandLineOption minst(QStringList() << "m" << "allow-multiple-instances", "Allow multiple instances of this app");
87+
QCommandLineOption spinlck(QStringList() << "d" << "spinlock-on-crash", "Wait for debugger in case of crash");
88+
QCommandLineOption silent(QStringList() << "s" << "silent", "Suppress log output");
89+
QCommandLineOption nocolor(QStringList() << "c" << "no-color", "Disable colored log output");
90+
8491
QCommandLineParser parser;
8592
parser.setApplicationDescription("JamesDSP for Linux");
8693
parser.addHelpOption();
87-
QCommandLineOption tray(QStringList() << "t" << "tray", "Start minimized in systray (forced)");
8894
parser.addOption(tray);
89-
QCommandLineOption watch(QStringList() << "w" << "watch", "Watch audio.conf and apply changes made by external apps automatically");
9095
parser.addOption(watch);
91-
QCommandLineOption minst(QStringList() << "m" << "allow-multiple-instances", "Allow multiple instances of this app");
9296
parser.addOption(minst);
93-
QCommandLineOption spinlck(QStringList() << "d" << "spinlock-on-crash", "Wait for debugger in case of crash");
9497
parser.addOption(spinlck);
95-
QCommandLineOption silent(QStringList() << "s" << "silent", "Suppress log output");
9698
parser.addOption(silent);
97-
QCommandLineOption nocolor(QStringList() << "c" << "no-color", "Disable colored log output");
9899
parser.addOption(nocolor);
99100
parser.process(app);
100101

@@ -139,7 +140,10 @@ int main(int argc,
139140

140141
// Check if another instance is already running and switch to it if that's the case
141142
auto *instanceMonitor = new SingleInstanceMonitor();
142-
auto scopeGuard = qScopeGuard([instanceMonitor]{ delete instanceMonitor; });
143+
auto scopeGuard = qScopeGuard([instanceMonitor]{
144+
delete instanceMonitor;
145+
});
146+
143147
if (!instanceMonitor->isServiceReady() && !parser.isSet(minst))
144148
{
145149
instanceMonitor->handover();

src/src.pro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ SOURCES += \
8686
utils/Log.cpp \
8787
utils/SingleInstanceMonitor.cpp \
8888
utils/dbus/ClientProxy.cpp \
89+
utils/dbus/IpcHandler.cpp \
8990
utils/dbus/ServerAdaptor.cpp \
9091
utils/OverlayMsgProxy.cpp \
9192
utils/StyleHelper.cpp
@@ -160,6 +161,7 @@ HEADERS += \
160161
utils/SingleInstanceMonitor.h \
161162
utils/VersionMacros.h \
162163
utils/dbus/ClientProxy.h \
164+
utils/dbus/IpcHandler.h \
163165
utils/dbus/ServerAdaptor.h \
164166
utils/FindBinary.h \
165167
utils/OverlayMsgProxy.h \

src/utils/SingleInstanceMonitor.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ SingleInstanceMonitor::SingleInstanceMonitor(QObject* parent) : QObject(parent)
99
QDBusConnection connection = QDBusConnection::sessionBus();
1010

1111
_dbusAdapter = new GuiAdaptor(this);
12-
_registered = connection.registerObject("/Gui", this) &&
13-
connection.registerService("me.timschneeberger.jdsp4linux.Gui");
12+
_registered = connection.registerObject("/jdsp4linux/gui", this) &&
13+
connection.registerService("me.timschneeberger.jdsp4linux");
1414

1515
}
1616

@@ -36,7 +36,7 @@ bool SingleInstanceMonitor::isServiceReady()
3636
bool SingleInstanceMonitor::handover()
3737
{
3838
Log::information("Attempting to switch to this instance...");
39-
auto m_dbInterface = new cf::thebone::jdsp4linux::Gui("me.timschneeberger.jdsp4linux.Gui", "/Gui",
39+
auto m_dbInterface = new me::timschneeberger::jdsp4linux::Gui("me.timschneeberger.jdsp4linux", "/jdsp4linux/gui",
4040
QDBusConnection::sessionBus(), this);
4141
if (!m_dbInterface->isValid())
4242
{

src/utils/VersionMacros.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77
#ifdef USE_PULSEAUDIO
88
#define APP_FLAVOR "(Pulseaudio flavor)"
9+
#define APP_FLAVOR_SHORT "Pulseaudio"
910
#else
1011
#define APP_FLAVOR "(Pipewire flavor)"
12+
#define APP_FLAVOR_SHORT "Pipewire"
1113
#endif
1214

1315
#define APP_VERSION_FULL STR(APP_VERSION) " " APP_FLAVOR

0 commit comments

Comments
 (0)