std::string CBaseEvent::VariantToLocalizedString(const CVariant& variant) { if (variant.isString()) return variant.asString(); if (variant.isInteger() && variant.asInteger() > 0) return g_localizeStrings.Get(static_cast<uint32_t>(variant.asInteger())); if (variant.isUnsignedInteger() && variant.asUnsignedInteger() > 0) return g_localizeStrings.Get(static_cast<uint32_t>(variant.asUnsignedInteger())); return ""; }
JSONRPC_STATUS CSettingsOperations::SetSettingValue(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result) { std::string settingId = parameterObject["setting"].asString(); CVariant value = parameterObject["value"]; SettingPtr setting = CServiceBroker::GetSettings().GetSetting(settingId); if (setting == NULL || !setting->IsVisible()) return InvalidParams; switch (setting->GetType()) { case SettingTypeBool: if (!value.isBoolean()) return InvalidParams; result = std::static_pointer_cast<CSettingBool>(setting)->SetValue(value.asBoolean()); break; case SettingTypeInteger: if (!value.isInteger() && !value.isUnsignedInteger()) return InvalidParams; result = std::static_pointer_cast<CSettingInt>(setting)->SetValue((int)value.asInteger()); break; case SettingTypeNumber: if (!value.isDouble()) return InvalidParams; result = std::static_pointer_cast<CSettingNumber>(setting)->SetValue(value.asDouble()); break; case SettingTypeString: if (!value.isString()) return InvalidParams; result = std::static_pointer_cast<CSettingString>(setting)->SetValue(value.asString()); break; case SettingTypeList: { if (!value.isArray()) return InvalidParams; std::vector<CVariant> values; for (CVariant::const_iterator_array itValue = value.begin_array(); itValue != value.end_array(); ++itValue) values.push_back(*itValue); result = CServiceBroker::GetSettings().SetList(settingId, values); break; } case SettingTypeNone: case SettingTypeAction: default: return InvalidParams; } return OK; }