@@ -123,7 +123,38 @@ class ProductFeatures(StrEnum):
123123TANOSS_FEATURES = [ProductFeatures .REMOTE_BACK , ProductFeatures .MOP_SHAKE_MODULE ]
124124TOPAZSPOWER_FEATURES = [ProductFeatures .CLEANMODE_MAXPLUS , ProductFeatures .MOP_SHAKE_MODULE ]
125125
126- product_feature_map : dict [RoborockProductNickname , list [ProductFeatures ]] = {
126+ PRODUCTS_WITHOUT_CUSTOM_CLEAN : set [RoborockProductNickname ] = {
127+ RoborockProductNickname .TANOS ,
128+ RoborockProductNickname .RUBYPLUS ,
129+ RoborockProductNickname .RUBYSC ,
130+ RoborockProductNickname .RUBYSE ,
131+ }
132+ PRODUCTS_WITHOUT_DEFAULT_3D_MAP : set [RoborockProductNickname ] = {
133+ RoborockProductNickname .TANOS ,
134+ RoborockProductNickname .TANOSSPLUS ,
135+ RoborockProductNickname .TANOSE ,
136+ RoborockProductNickname .TANOSV ,
137+ RoborockProductNickname .RUBYPLUS ,
138+ RoborockProductNickname .RUBYSC ,
139+ RoborockProductNickname .RUBYSE ,
140+ }
141+ PRODUCTS_WITHOUT_PURE_CLEAN_MOP : set [RoborockProductNickname ] = {
142+ RoborockProductNickname .TANOS ,
143+ RoborockProductNickname .TANOSE ,
144+ RoborockProductNickname .TANOSV ,
145+ RoborockProductNickname .TANOSSLITE ,
146+ RoborockProductNickname .TANOSSE ,
147+ RoborockProductNickname .TANOSSC ,
148+ RoborockProductNickname .ULTRONLITE ,
149+ RoborockProductNickname .ULTRONE ,
150+ RoborockProductNickname .RUBYPLUS ,
151+ RoborockProductNickname .RUBYSLITE ,
152+ RoborockProductNickname .RUBYSC ,
153+ RoborockProductNickname .RUBYSE ,
154+ }
155+
156+ # Base map containing the initial, unconditional features for each product.
157+ _BASE_PRODUCT_FEATURE_MAP : dict [RoborockProductNickname , list [ProductFeatures ]] = {
127158 RoborockProductNickname .PEARL : PEARL_FEATURES ,
128159 RoborockProductNickname .PEARLS : PEARL_FEATURES ,
129160 RoborockProductNickname .PEARLPLUS : PEARL_PLUS_FEATURES ,
@@ -174,50 +205,15 @@ class ProductFeatures(StrEnum):
174205 RoborockProductNickname .RUBYSLITE : [ProductFeatures .MOP_ELECTRONIC_MODULE ],
175206}
176207
177-
178- def update_features ():
179- """Update the feature mapping."""
180- # Their firmware describes what doesn't have these features - not which one does.
181- # Matching that for ease of future updates.
182- PRODUCTS_WITHOUT_CUSTOM_CLEAN = {
183- RoborockProductNickname .TANOS ,
184- RoborockProductNickname .RUBYPLUS ,
185- RoborockProductNickname .RUBYSC ,
186- RoborockProductNickname .RUBYSE ,
187- }
188- PRODUCTS_WITHOUT_DEFAULT_3D_MAP = {
189- RoborockProductNickname .TANOS ,
190- RoborockProductNickname .TANOSSPLUS ,
191- RoborockProductNickname .TANOSE ,
192- RoborockProductNickname .TANOSV ,
193- RoborockProductNickname .RUBYPLUS ,
194- RoborockProductNickname .RUBYSC ,
195- RoborockProductNickname .RUBYSE ,
196- }
197- PRODUCTS_WITHOUT_PURE_CLEAN_MOP = {
198- RoborockProductNickname .TANOS ,
199- RoborockProductNickname .TANOSE ,
200- RoborockProductNickname .TANOSV ,
201- RoborockProductNickname .TANOSSLITE ,
202- RoborockProductNickname .TANOSSE ,
203- RoborockProductNickname .TANOSSC ,
204- RoborockProductNickname .ULTRONLITE ,
205- RoborockProductNickname .ULTRONE ,
206- RoborockProductNickname .RUBYPLUS ,
207- RoborockProductNickname .RUBYSLITE ,
208- RoborockProductNickname .RUBYSC ,
209- RoborockProductNickname .RUBYSE ,
210- }
211- for product , feature_list in product_feature_map .items ():
212- if product not in PRODUCTS_WITHOUT_CUSTOM_CLEAN :
213- feature_list .append (ProductFeatures .DEFAULT_CLEANMODECUSTOM )
214- if product not in PRODUCTS_WITHOUT_DEFAULT_3D_MAP :
215- feature_list .append (ProductFeatures .DEFAULT_MAP3D )
216- if product not in PRODUCTS_WITHOUT_PURE_CLEAN_MOP :
217- feature_list .append (ProductFeatures .CLEANMODE_PURECLEANMOP )
218-
219-
220- update_features ()
208+ product_feature_map : dict [RoborockProductNickname , list [ProductFeatures ]] = {
209+ product : (
210+ features
211+ + ([ProductFeatures .DEFAULT_CLEANMODECUSTOM ] if product not in PRODUCTS_WITHOUT_CUSTOM_CLEAN else [])
212+ + ([ProductFeatures .DEFAULT_MAP3D ] if product not in PRODUCTS_WITHOUT_DEFAULT_3D_MAP else [])
213+ + ([ProductFeatures .CLEANMODE_PURECLEANMOP ] if product not in PRODUCTS_WITHOUT_PURE_CLEAN_MOP else [])
214+ )
215+ for product , features in _BASE_PRODUCT_FEATURE_MAP .items ()
216+ }
221217
222218
223219@dataclass
0 commit comments