+ now = datetime.datetime.now()
+ with BaseChromecast.lock:
+ if (
+ BaseChromecast.refresh_ts is None
+ or (now - BaseChromecast.refresh_ts).total_seconds() > 60
+ ):
+ logger.debug('Refreshing the shared chromecast info list')
+ if BaseChromecast.browser is not None:
+ BaseChromecast.browser.stop_discovery()
+ (
+ BaseChromecast.ccasts,
+ BaseChromecast.browser,
+ ) = pychromecast.get_chromecasts(timeout=15.0)
+ assert BaseChromecast.browser is not None
+ atexit.register(BaseChromecast.browser.stop_discovery)
+ BaseChromecast.refresh_ts = now
+
+ self.cast = None
+ for cc in BaseChromecast.ccasts:
+ if cc.cast_info.host == ip and cc.cast_info.cast_type != 'group':
+ logger.debug('Found chromecast at %s: %s', ip, cc)
+ self.cast = cc
+ self.cast.wait(timeout=1.0)
+ if self.cast is None:
+ raise Exception(f'Can\'t find ccast device at {ip}, is that really a ccast device?')