2222from .loader .local import LocalLoader
2323from .loader .protocol import Loader
2424from .loader .remote import RemoteLoader
25- from .power_profile import DeviceType , PowerProfile
25+ from .power_profile import DeviceType , DiscoveryBy , PowerProfile
2626
2727LEGACY_CUSTOM_DATA_DIRECTORY = "powercalc-custom-models"
2828CUSTOM_DATA_DIRECTORY = "powercalc/profiles"
@@ -33,7 +33,7 @@ def __init__(self, hass: HomeAssistant, loader: Loader) -> None:
3333 self ._hass = hass
3434 self ._loader = loader
3535 self ._profiles : dict [str , list [PowerProfile ]] = {}
36- self ._manufacturer_models : dict [str , set [str ]] = {}
36+ self ._manufacturer_models : dict [str , set [tuple [ str , str ] ]] = {}
3737 self ._manufacturer_device_types : dict [str , list ] = {}
3838
3939 async def initialize (self ) -> None :
@@ -70,29 +70,39 @@ def create_loader(hass: HomeAssistant, skip_remote_loader: bool = False) -> Load
7070
7171 return CompositeLoader (loaders )
7272
73- async def get_manufacturer_listing (self , device_types : set [DeviceType ] | None = None ) -> list [tuple [str , str ]]:
73+ async def get_manufacturer_listing (
74+ self ,
75+ device_types : set [DeviceType ] | None = None ,
76+ discovery_by : DiscoveryBy | None = None ,
77+ ) -> list [tuple [str , str ]]:
7478 """Get listing of available manufacturers."""
75- manufacturers = await self ._loader .get_manufacturer_listing (device_types )
79+ manufacturers = await self ._loader .get_manufacturer_listing (device_types , discovery_by )
7680 return sorted (manufacturers )
7781
78- async def get_model_listing (self , manufacturer : str , device_types : set [DeviceType ] | None = None ) -> list [str ]:
79- """Get listing of available models for a given manufacturer."""
82+ async def get_model_listing (
83+ self ,
84+ manufacturer : str ,
85+ device_types : set [DeviceType ] | None = None ,
86+ discovery_by : DiscoveryBy | None = None ,
87+ ) -> list [tuple [str , str ]]:
88+ """Get listing of available models and display names for a given manufacturer."""
8089
8190 resolved_manufacturers = await self ._loader .find_manufacturers (manufacturer )
8291 if not resolved_manufacturers :
8392 return []
84- all_models : list [str ] = []
93+
94+ all_models : list [tuple [str , str ]] = []
8595 for manufacturer in resolved_manufacturers :
86- cache_key = f"{ manufacturer } /{ device_types } "
96+ cache_key = f"{ manufacturer } /{ device_types } / { discovery_by } "
8797 cached_models = self ._manufacturer_models .get (cache_key )
8898 if cached_models :
89- all_models .extend (cached_models )
99+ all_models .extend (sorted ( cached_models ) )
90100 continue
91- models = await self ._loader .get_model_listing (manufacturer , device_types )
101+ models = await self ._loader .get_model_listing (manufacturer , device_types , discovery_by )
92102 self ._manufacturer_models [cache_key ] = models
93- all_models .extend (models )
103+ all_models .extend (sorted ( models ) )
94104
95- return sorted (all_models )
105+ return sorted (all_models , key = lambda model : model [ 0 ] )
96106
97107 async def get_profile (
98108 self ,
0 commit comments