Skip to content

Commit

Permalink
Track services based on UUID instead of mDNS service name (#380)
Browse files Browse the repository at this point in the history
* Track services based on UUID instead of mDNS service name

* Lint
  • Loading branch information
emontnemery authored Jun 28, 2020
1 parent 58937f0 commit e8d04cd
Show file tree
Hide file tree
Showing 14 changed files with 183 additions and 120 deletions.
4 changes: 2 additions & 2 deletions examples/custom_loop.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ def callback(chromecast):
chromecast.connect()
nonlocal cast
cast = chromecast
stop_discovery()
pychromecast.discovery.stop_discovery(browser)

stop_discovery = pychromecast.get_chromecasts(blocking=False, callback=callback)
browser = pychromecast.get_chromecasts(blocking=False, callback=callback)

while True:
if cast:
Expand Down
5 changes: 4 additions & 1 deletion examples/dashcast_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
if args.show_debug:
logging.basicConfig(level=logging.DEBUG)

chromecasts = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
if not chromecasts:
print('No chromecast with name "{}" discovered'.format(args.cast))
sys.exit(1)
Expand Down Expand Up @@ -68,3 +68,6 @@
# If debugging, sleep after running so we can see any error messages.
if args.show_debug:
time.sleep(10)

# Shut down discovery
pychromecast.discovery.stop_discovery(browser)
24 changes: 15 additions & 9 deletions examples/discovery_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import time

import pychromecast
import zeroconf

parser = argparse.ArgumentParser(description="Example on how to receive updates on discovered chromecasts.")
parser.add_argument("--show-debug", help="Enable debug log", action="store_true")
Expand All @@ -15,20 +16,25 @@
logging.basicConfig(level=logging.DEBUG)

def list_devices():
print("Currently known cast devices:")
for name, service in listener.services.items():
print(" {} {}".format(name, service))
print("Currently known cast devices:")
for uuid, service in listener.services.items():
print(" {} {}".format(uuid, service))

def add_callback(name):
print("Found cast device {}".format(name))
def add_callback(uuid, name):
print("Found mDNS service for cast device {}".format(uuid))
list_devices()

def remove_callback(name, service):
print("Lost cast device {} {}".format(name, service))
def remove_callback(uuid, name, service):
print("Lost mDNS service for cast device {} {}".format(uuid, service))
list_devices()

listener = pychromecast.CastListener(add_callback, remove_callback)
browser = pychromecast.discovery.start_discovery(listener)
def update_callback(uuid, name):
print("Updated mDNS service for cast device {}".format(uuid))
list_devices()

listener = pychromecast.CastListener(add_callback, remove_callback, update_callback)
zconf = zeroconf.Zeroconf()
browser = pychromecast.discovery.start_discovery(listener, zconf)

try:
while True:
Expand Down
4 changes: 3 additions & 1 deletion examples/list_chromecasts.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
if args.show_debug:
logging.basicConfig(level=logging.DEBUG)

casts = pychromecast.get_chromecasts()
casts, browser = pychromecast.get_chromecasts()
# Shut down discovery as we don't care about updates
pychromecast.discovery.stop_discovery(browser)
if len(casts) == 0:
print("No Devices Found")
exit()
Expand Down
14 changes: 12 additions & 2 deletions examples/media_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
if args.show_debug:
logging.basicConfig(level=logging.DEBUG)

chromecasts = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
if not chromecasts:
print('No chromecast with name "{}" discovered'.format(args.cast))
sys.exit(1)
Expand All @@ -49,13 +49,23 @@
# Wait for player_state PLAYING
player_state = None
t = 30
while player_state != "PLAYING" and t > 0:
#while player_state != "PLAYING" and t > 0:
has_played = False
while True:
try:
if player_state != cast.media_controller.status.player_state:
player_state = cast.media_controller.status.player_state
print("Player state:", player_state)
if player_state == "PLAYING":
has_played = True
if cast.socket_client.is_connected and has_played and player_state != "PLAYING":
has_played = False
cast.media_controller.play_media(args.url, "audio/mp3")

time.sleep(0.1)
t = t - 0.1
except KeyboardInterrupt:
break

# Shut down discovery
pychromecast.discovery.stop_discovery(browser)
5 changes: 4 additions & 1 deletion examples/media_example2.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
datefmt = "%Y-%m-%d %H:%M:%S"
logging.basicConfig(format=fmt, datefmt=datefmt, level=logging.DEBUG)

chromecasts = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
if not chromecasts:
print('No chromecast with name "{}" discovered'.format(args.cast))
sys.exit(1)
Expand Down Expand Up @@ -96,3 +96,6 @@
time.sleep(1)
except KeyboardInterrupt:
break

# Shut down discovery
pychromecast.discovery.stop_discovery(browser)
10 changes: 8 additions & 2 deletions examples/multizone_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def multizone_status_received(self):
print("Members: {}".format(mz.members))


chromecasts = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
if not chromecasts:
print('No chromecast with name "{}" discovered'.format(args.cast))
sys.exit(1)
Expand All @@ -64,4 +64,10 @@ def multizone_status_received(self):
cast.wait()

while True:
time.sleep(1)
try:
time.sleep(1)
except KeyboardInterrupt:
break

# Shut down discovery
pychromecast.discovery.stop_discovery(browser)
5 changes: 4 additions & 1 deletion examples/simple_listener_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def new_media_status(self, status):
if args.show_debug:
logging.basicConfig(level=logging.DEBUG)

chromecasts = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
if not chromecasts:
print('No chromecast with name "{}" discovered'.format(args.cast))
sys.exit(1)
Expand All @@ -62,3 +62,6 @@ def new_media_status(self, status):
chromecast.media_controller.register_status_listener(listenerMedia)

input("Listening for Chromecast events...\n\n")

# Shut down discovery
pychromecast.discovery.stop_discovery(browser)
29 changes: 4 additions & 25 deletions examples/spotify_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
# Uncomment to enable http.client debug log
# http_client.HTTPConnection.debuglevel = 1

chromecasts = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
cast = None
for _cast in chromecasts:
if _cast.name == args.cast:
Expand All @@ -55,30 +55,6 @@
print("cast {}".format(cast))


class ConnListener:
def __init__(self, mz):
self._mz = mz

def new_connection_status(self, connection_status):
"""Handle reception of a new ConnectionStatus."""
if connection_status.status == "CONNECTED":
self._mz.update_members()


class MzListener:
def __init__(self):
self.got_members = False

def multizone_member_added(self, uuid):
pass

def multizone_member_removed(self, uuid):
pass

def multizone_status_received(self):
self.got_members = True


# Wait for connection to the chromecast
cast.wait()

Expand Down Expand Up @@ -126,3 +102,6 @@ def multizone_status_received(self):
client.start_playback(device_id=spotify_device_id, uris=args.uri)
else:
client.start_playback(device_id=spotify_device_id, context_uri=args.uri[0])

# Shut down discovery
pychromecast.discovery.stop_discovery(browser)
10 changes: 8 additions & 2 deletions examples/supla_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,15 @@

logging.basicConfig(level=logging.DEBUG)

chromecasts = pychromecast.get_chromecasts()
cast = next(cc for cc in chromecasts if cc.device.friendly_name.lower() == CAST_NAME.lower())
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[CAST_NAME])
if not chromecasts:
print('No chromecast with name "{}" discovered'.format(CAST_NAME))
sys.exit(1)

cast = chromecasts[0]
# Start socket client's worker thread and wait for initial status update
cast.wait()

supla = SuplaController()
cast.register_handler(supla)
supla.launch()
Expand Down
20 changes: 13 additions & 7 deletions examples/yleareena_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
"""

import pychromecast
import argparse
from pychromecast.controllers.yleareena import YleAreenaController
import logging
import sys
from time import sleep

import logging
import pychromecast
from pychromecast.controllers.yleareena import YleAreenaController

logger = logging.getLogger(__name__)


Expand Down Expand Up @@ -59,12 +61,16 @@ def get_kaltura_id(program_id):

return info.media_id.split('-')[-1]

chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
if not chromecasts:
print('No chromecast with name "{}" discovered'.format(args.cast))
sys.exit(1)

chromecasts = pychromecast.get_chromecasts()
cast = next(cc for cc in chromecasts if cc.device.friendly_name == args.cast)
print(cast)
cast = chromecasts[0]
# Start socket client's worker thread and wait for initial status update
cast.wait()

yt = YleAreenaController()
cast.register_handler(yt)
yt.play_areena_media(entry_id=get_kaltura_id(args.program), audio_language=args.audio_language, text_language=args.text_language)
sleep(10)
sleep(10)
5 changes: 4 additions & 1 deletion examples/youtube_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
if args.show_debug:
logging.basicConfig(level=logging.DEBUG)

chromecasts = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[args.cast])
if not chromecasts:
print('No chromecast with name "{}" discovered'.format(args.cast))
sys.exit(1)
Expand All @@ -46,3 +46,6 @@
yt = YouTubeController()
cast.register_handler(yt)
yt.play_video(VIDEO_ID)

# Shut down discovery
pychromecast.discovery.stop_discovery(browser)
Loading

0 comments on commit e8d04cd

Please sign in to comment.