VOICE-59: better fix for display human-friendly names for voice input and output devices

meow-7.2.2
Oz Linden 2018-04-15 09:41:47 -04:00
parent 73b44833a6
commit 4ab4bfb2c7
4 changed files with 34 additions and 49 deletions

View File

@ -38,8 +38,6 @@
// Library includes (after viewer)
#include "lluictrlfactory.h"
#include "llmemorystream.h"
#include "llsdserialize.h"
static LLPanelInjector<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
static const std::string DEFAULT_DEVICE("Default");
@ -234,25 +232,18 @@ void LLPanelVoiceDeviceSettings::refresh()
}
else if (LLVoiceClient::getInstance()->deviceSettingsUpdated())
{
LLVoiceDeviceList::const_iterator iter;
LLVoiceDeviceList::const_iterator device;
if(mCtrlInputDevices)
{
mCtrlInputDevices->removeall();
mCtrlInputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM);
for(iter=LLVoiceClient::getInstance()->getCaptureDevices().begin();
iter != LLVoiceClient::getInstance()->getCaptureDevices().end();
iter++)
for(device=LLVoiceClient::getInstance()->getCaptureDevices().begin();
device != LLVoiceClient::getInstance()->getCaptureDevices().end();
device++)
{
// the devices in the list are serialized as an LLSD map
// deserialize to separate the display and device names
std::string device_names(*iter);
size_t len = device_names.size();
LLMemoryStream device_stream((U8*)device_names.c_str(), len);
LLSD device = LLSDSerialize::fromNotation(device_stream, len);
mCtrlInputDevices->add(getLocalizedDeviceName(device["display"]), device["device"], ADD_BOTTOM);
mCtrlInputDevices->add(getLocalizedDeviceName(device->display_name), device->full_name, ADD_BOTTOM);
}
// Fix invalid input audio device preference.
@ -269,17 +260,11 @@ void LLPanelVoiceDeviceSettings::refresh()
mCtrlOutputDevices->removeall();
mCtrlOutputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM);
for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin();
iter != LLVoiceClient::getInstance()->getRenderDevices().end(); iter++)
for(device = LLVoiceClient::getInstance()->getRenderDevices().begin();
device != LLVoiceClient::getInstance()->getRenderDevices().end();
device++)
{
// the devices in the list are serialized as an LLSD map
// deserialize to separate the display and device names
std::string device_names(*iter);
size_t len = device_names.size();
LLMemoryStream device_stream((U8*)device_names.c_str(), len);
LLSD device = LLSDSerialize::fromNotation(device_stream, len);
mCtrlOutputDevices->add(getLocalizedDeviceName(device["display"]), device["display"], ADD_BOTTOM);
mCtrlOutputDevices->add(getLocalizedDeviceName(device->display_name), device->full_name, ADD_BOTTOM);
}
// Fix invalid output audio device preference.

View File

@ -40,8 +40,19 @@ class LLVOAvatar;
// devices
typedef std::vector<std::string> LLVoiceDeviceList;
class LLVoiceDevice
{
public:
std::string display_name; // friendly value for the user
std::string full_name; // internal value for selection
LLVoiceDevice(const std::string& display_name, const std::string& full_name)
:display_name(display_name)
,full_name(full_name)
{
};
};
typedef std::vector<LLVoiceDevice> LLVoiceDeviceList;
class LLVoiceClientParticipantObserver
{

View File

@ -48,7 +48,6 @@
#include "llviewercontrol.h"
#include "llappviewer.h" // for gDisconnected, gDisableVoice
#include "llprocess.h"
#include "llsdserialize.h"
// Viewer includes
#include "llmutelist.h" // to check for muted avatars
@ -2323,15 +2322,10 @@ void LLVivoxVoiceClient::clearCaptureDevices()
mCaptureDevices.clear();
}
void LLVivoxVoiceClient::addCaptureDevice(const std::string& display_name, const std::string& device_name)
void LLVivoxVoiceClient::addCaptureDevice(const LLVoiceDevice& device)
{
LL_DEBUGS("Voice") << "display: '" << display_name << "' device: '" << device_name << "'" << LL_ENDL;
LLSD device(LLSD::emptyMap());
device["display"]=display_name;
device["device"]=device_name;
std::ostringstream device_names;
LLSDSerialize::toNotation(device, device_names);
mCaptureDevices.push_back(device_names.str());
LL_DEBUGS("Voice") << "display: '" << device.display_name << "' device: '" << device.full_name << "'" << LL_ENDL;
mCaptureDevices.push_back(device);
}
LLVoiceDeviceList& LLVivoxVoiceClient::getCaptureDevices()
@ -2369,15 +2363,10 @@ void LLVivoxVoiceClient::clearRenderDevices()
mRenderDevices.clear();
}
void LLVivoxVoiceClient::addRenderDevice(const std::string& display_name, const std::string& device_name)
void LLVivoxVoiceClient::addRenderDevice(const LLVoiceDevice& device)
{
LL_DEBUGS("Voice") << "display: '" << display_name << "' device: '" << device_name << "'" << LL_ENDL;
LLSD device(LLSD::emptyMap());
device["display"]=display_name;
device["device"]=device_name;
std::ostringstream device_names;
LLSDSerialize::toNotation(device, device_names);
mRenderDevices.push_back(device_names.str());
LL_DEBUGS("Voice") << "display: '" << device.display_name << "' device: '" << device.full_name << "'" << LL_ENDL;
mRenderDevices.push_back(device);
}
LLVoiceDeviceList& LLVivoxVoiceClient::getRenderDevices()
@ -2525,13 +2514,13 @@ bool LLVivoxVoiceClient::deviceSettingsAvailable()
}
bool LLVivoxVoiceClient::deviceSettingsUpdated()
{
bool updated = mDevicesListUpdated;
if (mDevicesListUpdated)
{
// a hot swap event or a polling of the audio devices has been parsed since the last redraw of the input and output device panel.
mDevicesListUpdated = !mDevicesListUpdated; // toggle the setting
return true;
mDevicesListUpdated = false; // toggle the setting
}
return false;
return updated;
}
void LLVivoxVoiceClient::refreshDeviceLists(bool clearCurrentList)
@ -7026,11 +7015,11 @@ void LLVivoxProtocolParser::EndTag(const char *tag)
}
else if (!stricmp("CaptureDevice", tag))
{
LLVivoxVoiceClient::getInstance()->addCaptureDevice(displayNameString, deviceString);
LLVivoxVoiceClient::getInstance()->addCaptureDevice(LLVoiceDevice(displayNameString, deviceString));
}
else if (!stricmp("RenderDevice", tag))
{
LLVivoxVoiceClient::getInstance()->addRenderDevice(displayNameString, deviceString);
LLVivoxVoiceClient::getInstance()->addRenderDevice(LLVoiceDevice(displayNameString, deviceString));
}
else if (!stricmp("BlockMask", tag))
blockMask = string;

View File

@ -432,10 +432,10 @@ protected:
//----------------------------------
// devices
void clearCaptureDevices();
void addCaptureDevice(const std::string& display_name, const std::string& device_name);
void addCaptureDevice(const LLVoiceDevice& device);
void clearRenderDevices();
void setDevicesListUpdated(bool state);
void addRenderDevice(const std::string& display_name, const std::string& device_name);
void addRenderDevice(const LLVoiceDevice& device);
void buildSetAudioDevices(std::ostringstream &stream);
void getCaptureDevicesSendMessage();