Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
48 changes: 48 additions & 0 deletions example.py
Original file line number Diff line number Diff line change
@@ -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))
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
[metadata]
description-file = README.md
description_file = README.md
3 changes: 3 additions & 0 deletions snapcast/control/__init__.py
Original file line number Diff line number Diff line change
@@ -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):
Expand Down
6 changes: 6 additions & 0 deletions snapcast/control/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down