summaryrefslogtreecommitdiff
path: root/src/model/pulsemodel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/model/pulsemodel.h')
-rw-r--r--src/model/pulsemodel.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/model/pulsemodel.h b/src/model/pulsemodel.h
new file mode 100644
index 0000000..b96f2b1
--- /dev/null
+++ b/src/model/pulsemodel.h
@@ -0,0 +1,58 @@
+#pragma once
+
+#include <tqobject.h>
+#include <tqptrlist.h>
+
+#include <pulse/pulseaudio.h>
+
+#include "audiodevice.h"
+
+class PulseDevice;
+
+class PulseModel : public TQObject
+{
+ TQ_OBJECT
+
+public:
+ explicit PulseModel( TQObject *parent = 0 );
+ ~PulseModel();
+
+ bool open();
+ void close();
+
+ TQPtrList<AudioDevice> devices( AudioDevice::Category cat ) const;
+
+protected:
+ void customEvent( TQCustomEvent *e );
+
+signals:
+ void deviceAdded( AudioDevice *dev );
+ void deviceRemoved( AudioDevice *dev );
+ void ready(); // emitted once initial enumeration is complete
+
+private:
+ static void contextStateCb( pa_context *c, void *userdata );
+ static void sinkInfoCb( pa_context *c, const pa_sink_info *info, int eol, void *userdata );
+ static void sourceInfoCb( pa_context *c, const pa_source_info *info, int eol, void *userdata );
+ static void sinkInputInfoCb( pa_context *c, const pa_sink_input_info *info, int eol, void *userdata );
+ static void sourceOutputInfoCb( pa_context *c, const pa_source_output_info *info, int eol, void *userdata );
+ static void subscribeCb( pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata );
+
+ void enumerateAll();
+ void addOrUpdateSink( const pa_sink_info *info );
+ void addOrUpdateSource( const pa_source_info *info );
+ void addOrUpdateSinkInput( const pa_sink_input_info *info );
+ void addOrUpdateSourceOutput( const pa_source_output_info *info );
+ void removeDevice( AudioDevice::Category cat, uint32_t paIndex );
+
+ pa_threaded_mainloop *m_mainloop;
+ pa_context *m_context;
+
+ // Keyed by PA index within each category — stable objects, updated in place.
+ TQPtrList<PulseDevice> m_sinks;
+ TQPtrList<PulseDevice> m_sources;
+ TQPtrList<PulseDevice> m_sinkInputs;
+ TQPtrList<PulseDevice> m_sourceOutputs;
+
+ PulseDevice *findDevice( TQPtrList<PulseDevice> &list, uint32_t paIndex );
+};