diff --git a/README.md b/README.md index 2bdd608..5cb0bf1 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,8 @@ server.clients[0].set_callback(my_update_func) loop.run_forever() ``` +See `example.py` for a basic working example. + ### Client Note: This is experimental. Synchronization is not yet supported. Requires GStreamer 1.0. diff --git a/example.py b/example.py new file mode 100644 index 0000000..40e0d26 --- /dev/null +++ b/example.py @@ -0,0 +1,48 @@ +import argparse +import asyncio +import snapcast.control +import logging +import signal + + +def changed(client): + print(client) + print(f"{client.friendly_name} volume {client.volume}" + f" playing: {client.stream}") + + +async def main(host): + server = snapcast.control.Snapserver( + asyncio.get_running_loop(), host) + + # Handle signals + waiter = asyncio.Event() + loop = asyncio.get_event_loop() + loop.add_signal_handler(signal.SIGTERM, waiter.set) + loop.add_signal_handler(signal.SIGINT, waiter.set) + + await server.start() + + for client in server.clients: + print(f"Setting callback for {client}") + client.set_callback(changed) + + for g in server.groups: + print(g) + + for s in server.streams: + print(s) + + await waiter.wait() + server.stop() + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description="snapcast example") + parser.add_argument("host", help="mpd hostname") + args = parser.parse_args() + + logging.basicConfig(level="DEBUG") + logging.getLogger("snapcast.control.server").setLevel("DEBUG") + + asyncio.run(main(host=args.host)) diff --git a/setup.cfg b/setup.cfg index b88034e..08aedd7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,2 @@ [metadata] -description-file = README.md +description_file = README.md diff --git a/snapcast/control/__init__.py b/snapcast/control/__init__.py index ec6ad3e..b575a84 100644 --- a/snapcast/control/__init__.py +++ b/snapcast/control/__init__.py @@ -1,6 +1,9 @@ """Snapcast control for Snapcast 0.11.1.""" from snapcast.control.server import Snapserver, CONTROL_PORT +from snapcast.control.client import Snapclient +from snapcast.control.stream import Snapstream +from snapcast.control.group import Snapgroup async def create_server(loop, host, port=CONTROL_PORT, reconnect=False): diff --git a/snapcast/control/client.py b/snapcast/control/client.py index af14496..67a4804 100644 --- a/snapcast/control/client.py +++ b/snapcast/control/client.py @@ -34,6 +34,12 @@ def group(self): return group return None + @property + def stream(self): + """Get stream.""" + g = self.group + return self._server.stream(g.stream) if g else None + @property def friendly_name(self): """Get friendly name."""