Ref T739, functions to register devices (will be used by DBus/proxy)

This commit is contained in:
Klaus Basan
2019-10-10 20:11:04 +02:00
committed by Mat Sutcliffe
parent fdf4bf6b57
commit e109106102
4 changed files with 92 additions and 1 deletions

View File

@@ -30,7 +30,7 @@ namespace BlackMisc
{
switch (m)
{
case QAudio::AudioInput: return InputDevice;
case QAudio::AudioInput: return InputDevice;
case QAudio::AudioOutput: return OutputDevice;
default: break;
}

View File

@@ -55,6 +55,12 @@ namespace BlackMisc
//! Type
DeviceType getType() const { return m_type; }
//! Input device
bool isInputDevice() const { return this->getType() == InputDevice; }
//! Output device
bool isOutputDevice() const { return this->getType() == OutputDevice; }
//! Valid audio device object?
bool isValid() const { return !m_deviceName.isEmpty(); }

View File

@@ -59,6 +59,70 @@ namespace BlackMisc
return defaultDevice;
}
CAudioDeviceInfoList CAudioDeviceInfoList::findByHostName(const QString &hostName) const
{
if (hostName.isEmpty()) { return {}; }
CAudioDeviceInfoList devices;
for (const CAudioDeviceInfo &d : *this)
{
if (stringCompare(hostName, d.getHostName(), Qt::CaseInsensitive))
{
devices.push_back(d);
}
}
return devices;
}
CAudioDeviceInfo CAudioDeviceInfoList::findRegisteredDevice(const CAudioDeviceInfo &device) const
{
CAudioDeviceInfoList devices = device.isInputDevice() ? this->getInputDevices() : this->getOutputDevices();
if (devices.isEmpty()) { return {}; }
devices = devices.findByHostName(device.getHostName());
if (devices.isEmpty()) { return {}; }
return devices.findByName(device.getName());
}
void CAudioDeviceInfoList::registerDevice(const CAudioDeviceInfo &device)
{
if (!device.isValid()) { return; }
if (this->isRegisteredDevice(device)) { return; }
this->push_back(device);
}
void CAudioDeviceInfoList::registerDevices(const CAudioDeviceInfoList &devices)
{
for (const CAudioDeviceInfo &device : devices)
{
this->registerDevice(device);
}
}
void CAudioDeviceInfoList::unRegisterDevice(const CAudioDeviceInfo &device)
{
if (!device.isValid()) { return; }
const CAudioDeviceInfo registeredDevice = this->findRegisteredDevice(device);
if (registeredDevice.isValid())
{
this->remove(registeredDevice);
}
}
void CAudioDeviceInfoList::unRegisterDevices(const CAudioDeviceInfoList &devices)
{
for (const CAudioDeviceInfo &device : devices)
{
this->unRegisterDevice(device);
}
}
bool CAudioDeviceInfoList::isRegisteredDevice(const CAudioDeviceInfo &device) const
{
return this->findRegisteredDevice(device).isValid();
}
int CAudioDeviceInfoList::count(CAudioDeviceInfo::DeviceType type) const
{
return static_cast<int>(std::count_if(this->begin(), this->end(), [type](const CAudioDeviceInfo & device)

View File

@@ -51,6 +51,27 @@ namespace BlackMisc
//! Find by name
CAudioDeviceInfo findByNameOrDefault(const QString &name, const CAudioDeviceInfo defaultDevice, bool strict = false) const;
//! Find by host name
CAudioDeviceInfoList findByHostName(const QString &hostName) const;
//! Find registered device
CAudioDeviceInfo findRegisteredDevice(const CAudioDeviceInfo &device) const;
//! Register device
void registerDevice(const CAudioDeviceInfo &device);
//! Register devices
void registerDevices(const CAudioDeviceInfoList &devices);
//! Un-register device
void unRegisterDevice(const CAudioDeviceInfo &device);
//! Un-register devices
void unRegisterDevices(const CAudioDeviceInfoList &devices);
//! Is that a registered device?
bool isRegisteredDevice(const CAudioDeviceInfo &device) const;
//! Count (as of type)
int count(CAudioDeviceInfo::DeviceType type) const;