2020 CONNECTION_STATUS_CONNECTED ,
2121 CONNECTION_STATUS_DISCONNECTED ,
2222)
23+ import zeroconf
2324
2425PROV_ID = "chromecast"
2526PROV_NAME = "Chromecast"
@@ -278,10 +279,15 @@ def run_chromecast_discovery(self):
278279 # cleanup cast object
279280 del player .cc
280281 self .mass .run_task (self .remove_player (player .player_id ))
282+
281283 # search for available chromecasts
282- from pychromecast .discovery import start_discovery , stop_discovery
283284
284- def discovered_callback (name ):
285+ def list_devices ():
286+ LOGGER .debug ("Currently known cast devices:" )
287+ for uuid , service in listener .services .items ():
288+ LOGGER .debug (" {} {}" .format (uuid , service ))
289+
290+ def add_callback (name ):
285291 """Called when zeroconf has discovered a (new) chromecast."""
286292 discovery_info = listener .services [name ]
287293 ip_address , port , uuid , model_name , friendly_name = discovery_info
@@ -290,9 +296,20 @@ def discovered_callback(name):
290296 self .__chromecast_discovered (player_id , discovery_info )
291297 self .__update_group_players ()
292298
293- listener , browser = start_discovery (discovered_callback )
299+ def remove_callback (uuid , name , service ):
300+ LOGGER .debug ("Lost mDNS service for cast device {} {}" .format (uuid , service ))
301+ list_devices ()
302+
303+ def update_callback (uuid , name ):
304+ LOGGER .debug ("Updated mDNS service for cast device {}" .format (uuid ))
305+ list_devices ()
306+
307+ listener = pychromecast .CastListener (add_callback , remove_callback , update_callback )
308+ zconf = zeroconf .Zeroconf ()
309+ browser = pychromecast .discovery .start_discovery (listener , zconf )
310+
294311 time .sleep (30 ) # run discovery for 30 seconds
295- stop_discovery (browser )
312+ pychromecast . stop_discovery (browser )
296313 LOGGER .debug ("Chromecast discovery completed..." )
297314 self ._discovery_running = False
298315
0 commit comments