| 281 | } |
| 282 | |
| 283 | void SetSourceSetting(obs_source_t *source, const SourceSetting &setting, |
| 284 | const std::string &value) |
| 285 | { |
| 286 | auto id = setting.GetID(); |
| 287 | OBSDataAutoRelease data = obs_source_get_settings(source); |
| 288 | OBSDataAutoRelease dataWithDefaults = obs_data_get_defaults(data); |
| 289 | obs_data_apply(dataWithDefaults, data); |
| 290 | auto item = obs_data_item_byname(dataWithDefaults, id.c_str()); |
| 291 | auto type = obs_data_item_gettype(item); |
| 292 | switch (type) { |
| 293 | case OBS_DATA_NULL: |
| 294 | vblog(LOG_WARNING, |
| 295 | "could not set settings value, as the value does not (yet) exist!"); |
| 296 | break; |
| 297 | case OBS_DATA_STRING: |
| 298 | obs_data_set_string(data, id.c_str(), value.c_str()); |
| 299 | break; |
| 300 | case OBS_DATA_NUMBER: { |
| 301 | auto type = obs_data_item_numtype(item); |
| 302 | switch (type) { |
| 303 | case OBS_DATA_NUM_INVALID: |
| 304 | break; |
| 305 | case OBS_DATA_NUM_INT: { |
| 306 | auto intValue = GetInt(value); |
| 307 | if (intValue.has_value()) { |
| 308 | obs_data_set_int(data, id.c_str(), *intValue); |
| 309 | break; |
| 310 | } |
| 311 | |
| 312 | auto doubleValue = GetDouble(value); |
| 313 | if (doubleValue.has_value()) { |
| 314 | obs_data_set_int(data, id.c_str(), |
| 315 | *doubleValue); |
| 316 | } |
| 317 | |
| 318 | break; |
| 319 | } |
| 320 | case OBS_DATA_NUM_DOUBLE: { |
| 321 | auto numValue = GetDouble(value); |
| 322 | if (!numValue.has_value()) { |
| 323 | break; |
| 324 | } |
| 325 | |
| 326 | obs_data_set_double(data, id.c_str(), *numValue); |
| 327 | break; |
| 328 | } |
| 329 | } |
| 330 | break; |
| 331 | } |
| 332 | case OBS_DATA_BOOLEAN: |
| 333 | obs_data_set_bool(data, id.c_str(), value == "true"); |
| 334 | break; |
| 335 | case OBS_DATA_OBJECT: { |
| 336 | OBSDataAutoRelease json = |
| 337 | obs_data_create_from_json(value.c_str()); |
| 338 | if (!json) { |
| 339 | blog(LOG_WARNING, |
| 340 | "not setting invalid data object settings value! (%s)", |
no test coverage detected