Commit 77148179cae3017cbd683cce61462620c7328b6c
Committed by
Moritz Wirger
1 parent
b4e3087b
Change parsing behavior for unknown light types:
No longer throw exception, instead set type to unknown. Add separate color types for other gamut.
Showing
4 changed files
with
22 additions
and
7 deletions
include/hueplusplus/Light.h
| @@ -49,7 +49,9 @@ enum class ColorType | @@ -49,7 +49,9 @@ enum class ColorType | ||
| 49 | TEMPERATURE, //!< light has color temperature control | 49 | TEMPERATURE, //!< light has color temperature control |
| 50 | GAMUT_A_TEMPERATURE, //!< light uses Gamut A and has color temperature control | 50 | GAMUT_A_TEMPERATURE, //!< light uses Gamut A and has color temperature control |
| 51 | GAMUT_B_TEMPERATURE, //!< light uses Gamut B and has color temperature control | 51 | GAMUT_B_TEMPERATURE, //!< light uses Gamut B and has color temperature control |
| 52 | - GAMUT_C_TEMPERATURE //!< light uses Gamut C and has color temperature control | 52 | + GAMUT_C_TEMPERATURE, //!< light uses Gamut C and has color temperature control |
| 53 | + GAMUT_OTHER, //!< light uses capabilities to specify a different gamut | ||
| 54 | + GAMUT_OTHER_TEMPERATURE //!< light uses capabilities to specify a different gamut and has color temperature control | ||
| 53 | }; | 55 | }; |
| 54 | 56 | ||
| 55 | //! \brief Class for Hue Light fixtures | 57 | //! \brief Class for Hue Light fixtures |
src/HueDeviceTypes.cpp
| @@ -136,7 +136,7 @@ ColorType LightFactory::getColorType(const nlohmann::json& lightState, bool hasC | @@ -136,7 +136,7 @@ ColorType LightFactory::getColorType(const nlohmann::json& lightState, bool hasC | ||
| 136 | else | 136 | else |
| 137 | { | 137 | { |
| 138 | // Only other type is "Other" which does not have an enum value | 138 | // Only other type is "Other" which does not have an enum value |
| 139 | - return ColorType::UNDEFINED; | 139 | + return hasCt ? ColorType::GAMUT_OTHER_TEMPERATURE : ColorType::GAMUT_OTHER; |
| 140 | } | 140 | } |
| 141 | } | 141 | } |
| 142 | else | 142 | else |
| @@ -155,8 +155,13 @@ ColorType LightFactory::getColorType(const nlohmann::json& lightState, bool hasC | @@ -155,8 +155,13 @@ ColorType LightFactory::getColorType(const nlohmann::json& lightState, bool hasC | ||
| 155 | { | 155 | { |
| 156 | return hasCt ? ColorType::GAMUT_C_TEMPERATURE : ColorType::GAMUT_C; | 156 | return hasCt ? ColorType::GAMUT_C_TEMPERATURE : ColorType::GAMUT_C; |
| 157 | } | 157 | } |
| 158 | - std::cerr << "Could not determine Light color type:" << modelid << "!\n"; | ||
| 159 | - throw HueException(CURRENT_FILE_INFO, "Could not determine Light color type!"); | 158 | + else |
| 159 | + { | ||
| 160 | + std::cerr << "Warning: Could not determine Light color type:" << modelid | ||
| 161 | + << "!\n" | ||
| 162 | + "Results may not be correct.\n"; | ||
| 163 | + return ColorType::UNDEFINED; | ||
| 164 | + } | ||
| 160 | } | 165 | } |
| 161 | } | 166 | } |
| 162 | } // namespace hueplusplus | 167 | } // namespace hueplusplus |
src/Light.cpp
| @@ -74,7 +74,9 @@ ColorGamut Light::getColorGamut() const | @@ -74,7 +74,9 @@ ColorGamut Light::getColorGamut() const | ||
| 74 | case ColorType::GAMUT_C: | 74 | case ColorType::GAMUT_C: |
| 75 | case ColorType::GAMUT_C_TEMPERATURE: | 75 | case ColorType::GAMUT_C_TEMPERATURE: |
| 76 | return gamut::gamutC; | 76 | return gamut::gamutC; |
| 77 | - default: { | 77 | + case ColorType::UNDEFINED: |
| 78 | + return gamut::maxGamut; | ||
| 79 | + default: { // GAMUT_OTHER, GAMUT_OTHER_TEMPERATURE | ||
| 78 | const nlohmann::json& capabilitiesGamut | 80 | const nlohmann::json& capabilitiesGamut |
| 79 | = utils::safeGetMember(state.getValue(), "capabilities", "control", "colorgamut"); | 81 | = utils::safeGetMember(state.getValue(), "capabilities", "control", "colorgamut"); |
| 80 | if (capabilitiesGamut.is_array() && capabilitiesGamut.size() == 3) | 82 | if (capabilitiesGamut.is_array() && capabilitiesGamut.size() == 3) |
test/test_LightFactory.cpp
| @@ -94,7 +94,7 @@ TEST(LightFactory, createLight_gamutCapabilities) | @@ -94,7 +94,7 @@ TEST(LightFactory, createLight_gamutCapabilities) | ||
| 94 | lightState["capabilities"]["control"]["colorgamuttype"] = "Other"; | 94 | lightState["capabilities"]["control"]["colorgamuttype"] = "Other"; |
| 95 | 95 | ||
| 96 | test_light_1 = factory.createLight(lightState, 1); | 96 | test_light_1 = factory.createLight(lightState, 1); |
| 97 | - EXPECT_EQ(test_light_1.getColorType(), ColorType::UNDEFINED); | 97 | + EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_OTHER); |
| 98 | 98 | ||
| 99 | // With color temperature | 99 | // With color temperature |
| 100 | lightState["type"] = "Extended color light"; | 100 | lightState["type"] = "Extended color light"; |
| @@ -112,6 +112,11 @@ TEST(LightFactory, createLight_gamutCapabilities) | @@ -112,6 +112,11 @@ TEST(LightFactory, createLight_gamutCapabilities) | ||
| 112 | 112 | ||
| 113 | test_light_1 = factory.createLight(lightState, 1); | 113 | test_light_1 = factory.createLight(lightState, 1); |
| 114 | EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_C_TEMPERATURE); | 114 | EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_C_TEMPERATURE); |
| 115 | + | ||
| 116 | + lightState["capabilities"]["control"]["colorgamuttype"] = "Other"; | ||
| 117 | + | ||
| 118 | + test_light_1 = factory.createLight(lightState, 1); | ||
| 119 | + EXPECT_EQ(test_light_1.getColorType(), ColorType::GAMUT_OTHER_TEMPERATURE); | ||
| 115 | } | 120 | } |
| 116 | 121 | ||
| 117 | TEST(LightFactory, createLight_gamutModelid) | 122 | TEST(LightFactory, createLight_gamutModelid) |
| @@ -164,5 +169,6 @@ TEST(LightFactory, createLight_gamutModelid) | @@ -164,5 +169,6 @@ TEST(LightFactory, createLight_gamutModelid) | ||
| 164 | 169 | ||
| 165 | // Unknown model | 170 | // Unknown model |
| 166 | lightState["modelid"] = "Unknown model"; | 171 | lightState["modelid"] = "Unknown model"; |
| 167 | - EXPECT_THROW(factory.createLight(lightState, 1), HueException); | 172 | + test_light_1 = factory.createLight(lightState, 1); |
| 173 | + EXPECT_EQ(test_light_1.getColorType(), ColorType::UNDEFINED); | ||
| 168 | } | 174 | } |