Commit 749fa82130033b983ffd30fadfe36b21d64ab86a
Committed by
Moritz Wirger
1 parent
83d48832
Use Factory function to create HueLights
Reduce complexity in Hue.cpp by using a separate factory function to identify the lights.
Showing
5 changed files
with
173 additions
and
52 deletions
hueplusplus/CMakeLists.txt
| ... | ... | @@ -5,6 +5,7 @@ set(hueplusplus_SOURCES |
| 5 | 5 | ${CMAKE_CURRENT_SOURCE_DIR}/ExtendedColorTemperatureStrategy.cpp |
| 6 | 6 | ${CMAKE_CURRENT_SOURCE_DIR}/Hue.cpp |
| 7 | 7 | ${CMAKE_CURRENT_SOURCE_DIR}/HueCommandAPI.cpp |
| 8 | + ${CMAKE_CURRENT_SOURCE_DIR}/HueDeviceTypes.cpp | |
| 8 | 9 | ${CMAKE_CURRENT_SOURCE_DIR}/HueException.cpp |
| 9 | 10 | ${CMAKE_CURRENT_SOURCE_DIR}/HueLight.cpp |
| 10 | 11 | ${CMAKE_CURRENT_SOURCE_DIR}/SimpleBrightnessStrategy.cpp | ... | ... |
hueplusplus/Hue.cpp
| ... | ... | @@ -31,6 +31,7 @@ |
| 31 | 31 | #include <stdexcept> |
| 32 | 32 | #include <thread> |
| 33 | 33 | |
| 34 | +#include "include/HueDeviceTypes.h" | |
| 34 | 35 | #include "include/ExtendedColorHueStrategy.h" |
| 35 | 36 | #include "include/ExtendedColorTemperatureStrategy.h" |
| 36 | 37 | #include "include/HueExceptionMacro.h" |
| ... | ... | @@ -237,58 +238,11 @@ HueLight& Hue::getLight(int id) |
| 237 | 238 | // std::cout << state["lights"][std::to_string(id)] << std::endl; |
| 238 | 239 | std::string type = state["lights"][std::to_string(id)]["modelid"].get<std::string>(); |
| 239 | 240 | // std::cout << type << std::endl; |
| 240 | - if (type == "LCT001" || type == "LCT002" || type == "LCT003" || type == "LCT007" || type == "LLM001") | |
| 241 | - { | |
| 242 | - // HueExtendedColorLight Gamut B | |
| 243 | - HueLight light = HueLight( | |
| 244 | - id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); | |
| 245 | - light.colorType = ColorType::GAMUT_B; | |
| 246 | - lights.emplace(id, light); | |
| 247 | - return lights.find(id)->second; | |
| 248 | - } | |
| 249 | - else if (type == "LCT010" || type == "LCT011" || type == "LCT012" || type == "LCT014" || type == "LCT015" | |
| 250 | - || type == "LCT016" || type == "LLC020" || type == "LST002") | |
| 251 | - { | |
| 252 | - // HueExtendedColorLight Gamut C | |
| 253 | - HueLight light = HueLight( | |
| 254 | - id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); | |
| 255 | - light.colorType = ColorType::GAMUT_C; | |
| 256 | - lights.emplace(id, light); | |
| 257 | - return lights.find(id)->second; | |
| 258 | - } | |
| 259 | - else if (type == "LST001" || type == "LLC005" || type == "LLC006" || type == "LLC007" || type == "LLC010" | |
| 260 | - || type == "LLC011" || type == "LLC012" || type == "LLC013" || type == "LLC014") | |
| 261 | - { | |
| 262 | - // HueColorLight Gamut A | |
| 263 | - HueLight light = HueLight(id, commands, simpleBrightnessStrategy, nullptr, simpleColorHueStrategy); | |
| 264 | - light.colorType = ColorType::GAMUT_A; | |
| 265 | - lights.emplace(id, light); | |
| 266 | - return lights.find(id)->second; | |
| 267 | - } | |
| 268 | - else if (type == "LWB004" || type == "LWB006" || type == "LWB007" || type == "LWB010" || type == "LWB014" | |
| 269 | - || type == "LDF001" || type == "LDF002" || type == "LDD001" || type == "LDD002" || type == "MWM001") | |
| 270 | - { | |
| 271 | - // HueDimmableLight No Color Type | |
| 272 | - HueLight light = HueLight(id, commands, simpleBrightnessStrategy, nullptr, nullptr); | |
| 273 | - light.colorType = ColorType::NONE; | |
| 274 | - lights.emplace(id, light); | |
| 275 | - return lights.find(id)->second; | |
| 276 | - } | |
| 277 | - else if (type == "LLM010" || type == "LLM011" || type == "LLM012" || type == "LTW001" || type == "LTW004" | |
| 278 | - || type == "LTW010" || type == "LTW011" || type == "LTW012" || type == "LTW013" || type == "LTW014" | |
| 279 | - || type == "LTW015" || type == "LTP001" || type == "LTP002" || type == "LTP003" || type == "LTP004" | |
| 280 | - || type == "LTP005" || type == "LTD003" || type == "LTF001" || type == "LTF002" || type == "LTC001" | |
| 281 | - || type == "LTC002" || type == "LTC003" || type == "LTC004" || type == "LTC011" || type == "LTC012" | |
| 282 | - || type == "LTD001" || type == "LTD002" || type == "LFF001" || type == "LTT001" || type == "LDT001") | |
| 283 | - { | |
| 284 | - // HueTemperatureLight | |
| 285 | - HueLight light = HueLight(id, commands, simpleBrightnessStrategy, simpleColorTemperatureStrategy, nullptr); | |
| 286 | - light.colorType = ColorType::TEMPERATURE; | |
| 287 | - lights.emplace(id, light); | |
| 288 | - return lights.find(id)->second; | |
| 289 | - } | |
| 290 | - std::cerr << "Could not determine HueLight type:" << type << "!\n"; | |
| 291 | - throw HueException(CURRENT_FILE_INFO, "Could not determine HueLight type!"); | |
| 241 | + auto light = MakeHueLight()(type, id, commands, simpleBrightnessStrategy, | |
| 242 | + extendedColorTemperatureStrategy, simpleColorTemperatureStrategy, extendedColorHueStrategy, | |
| 243 | + simpleColorHueStrategy); | |
| 244 | + lights.emplace(id, light); | |
| 245 | + return lights.find(id)->second; | |
| 292 | 246 | } |
| 293 | 247 | |
| 294 | 248 | bool Hue::removeLight(int id) | ... | ... |
hueplusplus/HueDeviceTypes.cpp
0 → 100644
| 1 | +/** | |
| 2 | + \file HueDeviceTypes.cpp | |
| 3 | + Copyright Notice\n | |
| 4 | + Copyright (C) 2017 Jan Rogall - developer\n | |
| 5 | + Copyright (C) 2017 Moritz Wirger - developer\n | |
| 6 | + | |
| 7 | + This file is part of hueplusplus. | |
| 8 | + | |
| 9 | + hueplusplus is free software: you can redistribute it and/or modify | |
| 10 | + it under the terms of the GNU Lesser General Public License as published by | |
| 11 | + the Free Software Foundation, either version 3 of the License, or | |
| 12 | + (at your option) any later version. | |
| 13 | + | |
| 14 | + hueplusplus is distributed in the hope that it will be useful, | |
| 15 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 16 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 17 | + GNU Lesser General Public License for more details. | |
| 18 | + | |
| 19 | + You should have received a copy of the GNU Lesser General Public License | |
| 20 | + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | +**/ | |
| 22 | + | |
| 23 | +#include <set> | |
| 24 | + | |
| 25 | +#include "include/HueDeviceTypes.h" | |
| 26 | +#include "include/HueExceptionMacro.h" | |
| 27 | + | |
| 28 | +const std::set<std::string> getGamutBTypes() | |
| 29 | +{ | |
| 30 | + static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTB_TYPES = { | |
| 31 | + "LCT001", "LCT002", "LCT003", "LCT007", "LLM001" | |
| 32 | + }; | |
| 33 | + return c_EXTENDEDCOLORLIGHT_GAMUTB_TYPES; | |
| 34 | +}; | |
| 35 | + | |
| 36 | + | |
| 37 | +const std::set<std::string> getGamutCTypes() | |
| 38 | +{ | |
| 39 | + static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTC_TYPES = { | |
| 40 | + "LCT010", "LCT011", "LCT012", "LCT014", | |
| 41 | + "LCT015", "LCT016", "LLC020", "LST002" | |
| 42 | + }; | |
| 43 | + return c_EXTENDEDCOLORLIGHT_GAMUTC_TYPES; | |
| 44 | +} | |
| 45 | + | |
| 46 | +const std::set<std::string> getGamutATypes() | |
| 47 | +{ | |
| 48 | + static const std::set<std::string> c_EXTENDEDCOLORLIGHT_GAMUTA_TYPES = { | |
| 49 | + "LST001", "LLC005" , "LLC006", "LLC007", | |
| 50 | + "LLC010", "LLC011", "LLC012", "LLC013", | |
| 51 | + "LLC014" | |
| 52 | + }; | |
| 53 | + return c_EXTENDEDCOLORLIGHT_GAMUTA_TYPES; | |
| 54 | +} | |
| 55 | + | |
| 56 | +const std::set<std::string> getNoColorTypes() | |
| 57 | +{ | |
| 58 | + static const std::set<std::string> c_DIMMABLELIGHT_NO_COLOR_TYPES = { | |
| 59 | + "LWB004", "LWB006", "LWB007", "LWB010", | |
| 60 | + "LWB014", "LDF001", "LDF002", "LDD001", | |
| 61 | + "LDD002", "MWM001" | |
| 62 | + }; | |
| 63 | + return c_DIMMABLELIGHT_NO_COLOR_TYPES; | |
| 64 | +} | |
| 65 | + | |
| 66 | +const std::set<std::string> getTemperatureLightTypes() | |
| 67 | +{ | |
| 68 | + static const std::set<std::string> c_TEMPERATURELIGHT_TYPES = { | |
| 69 | + "LLM010", "LLM011", "LLM012", "LTW001", "LTW004", | |
| 70 | + "LTW010", "LTW011", "LTW012", "LTW013", "LTW014", | |
| 71 | + "LTW015", "LTP001", "LTP002", "LTP003", "LTP004", | |
| 72 | + "LTP005", "LTD003", "LTF001", "LTF002", "LTC001", | |
| 73 | + "LTC002", "LTC003", "LTC004", "LTC011", "LTC012", | |
| 74 | + "LTD001", "LTD002", "LFF001", "LTT001", "LDT001" | |
| 75 | + }; | |
| 76 | + return c_TEMPERATURELIGHT_TYPES; | |
| 77 | +} | |
| 78 | + | |
| 79 | +auto MakeHueLight::operator()(std::string type, int id, HueCommandAPI commands, | |
| 80 | + std::shared_ptr<BrightnessStrategy> simpleBrightnessStrategy, | |
| 81 | + std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy, | |
| 82 | + std::shared_ptr<ColorTemperatureStrategy> simpleColorTemperatureStrategy, | |
| 83 | + std::shared_ptr<ColorHueStrategy> extendedColorHueStrategy, | |
| 84 | + std::shared_ptr<ColorHueStrategy> simpleColorHueStrategy) -> HueLight | |
| 85 | +{ | |
| 86 | + if (getGamutBTypes().count(type)) | |
| 87 | + { | |
| 88 | + auto light = HueLight(id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); | |
| 89 | + light.colorType = ColorType::GAMUT_B; | |
| 90 | + return light; | |
| 91 | + } | |
| 92 | + | |
| 93 | + else if (getGamutCTypes().count(type)) | |
| 94 | + { | |
| 95 | + auto light = HueLight(id, commands, simpleBrightnessStrategy, extendedColorTemperatureStrategy, extendedColorHueStrategy); | |
| 96 | + light.colorType = ColorType::GAMUT_C; | |
| 97 | + return light; | |
| 98 | + } | |
| 99 | + | |
| 100 | + else if (getGamutATypes().count(type)) | |
| 101 | + { | |
| 102 | + auto light = HueLight(id, commands, simpleBrightnessStrategy, nullptr, simpleColorHueStrategy); | |
| 103 | + light.colorType = ColorType::GAMUT_A; | |
| 104 | + return light; | |
| 105 | + } | |
| 106 | + | |
| 107 | + else if (getNoColorTypes().count(type)) | |
| 108 | + { | |
| 109 | + auto light = HueLight(id, commands, simpleBrightnessStrategy, nullptr, nullptr); | |
| 110 | + light.colorType = ColorType::NONE; | |
| 111 | + return light; | |
| 112 | + } | |
| 113 | + | |
| 114 | + else if (getTemperatureLightTypes().count(type)) | |
| 115 | + { | |
| 116 | + auto light = HueLight(id, commands, simpleBrightnessStrategy, simpleColorTemperatureStrategy, nullptr); | |
| 117 | + light.colorType = ColorType::TEMPERATURE; | |
| 118 | + return light; | |
| 119 | + } | |
| 120 | + std::cerr << "Could not determine HueLight type:" << type << "!\n"; | |
| 121 | + throw HueException(CURRENT_FILE_INFO, "Could not determine HueLight type!"); | |
| 122 | +} | ... | ... |
hueplusplus/include/HueDeviceTypes.h
0 → 100644
| 1 | +/** | |
| 2 | + \file HueDeviceTypes.h | |
| 3 | + Copyright Notice\n | |
| 4 | + Copyright (C) 2020 Jan Rogall - developer\n | |
| 5 | + Copyright (C) 2020 Moritz Wirger - developer\n | |
| 6 | + | |
| 7 | + This file is part of hueplusplus. | |
| 8 | + | |
| 9 | + hueplusplus is free software: you can redistribute it and/or modify | |
| 10 | + it under the terms of the GNU Lesser General Public License as published by | |
| 11 | + the Free Software Foundation, either version 3 of the License, or | |
| 12 | + (at your option) any later version. | |
| 13 | + | |
| 14 | + hueplusplus is distributed in the hope that it will be useful, | |
| 15 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 16 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 17 | + GNU Lesser General Public License for more details. | |
| 18 | + | |
| 19 | + You should have received a copy of the GNU Lesser General Public License | |
| 20 | + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>. | |
| 21 | +**/ | |
| 22 | + | |
| 23 | + | |
| 24 | +#ifndef _HUEDEVICETYPES_H | |
| 25 | +#define _HUEDEVICETYPES_H | |
| 26 | + | |
| 27 | +#include <memory> | |
| 28 | +#include <string> | |
| 29 | + | |
| 30 | +#include "HueLight.h" | |
| 31 | + | |
| 32 | +struct MakeHueLight { | |
| 33 | + auto operator()(std::string type, int id, HueCommandAPI commands, | |
| 34 | + std::shared_ptr<BrightnessStrategy> simpleBrightnessStrategy, | |
| 35 | + std::shared_ptr<ColorTemperatureStrategy> extendedColorTemperatureStrategy, | |
| 36 | + std::shared_ptr<ColorTemperatureStrategy> simpleColorTemperatureStrategy, | |
| 37 | + std::shared_ptr<ColorHueStrategy> extendedColorHueStrategy, | |
| 38 | + std::shared_ptr<ColorHueStrategy> simpleColorHueStrategy) -> HueLight; | |
| 39 | +}; | |
| 40 | + | |
| 41 | + | |
| 42 | +#endif | |
| 43 | + | ... | ... |
hueplusplus/include/HueLight.h