Merge pull request #2888 from cgtobi/sonos

Add sonos updater plugin.
This commit is contained in:
Adrian Sampson 2018-04-20 09:04:18 -04:00 committed by GitHub
commit f3630a3210
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 73 additions and 1 deletions

48
beetsplug/sonosupdate.py Normal file
View file

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
# This file is part of beets.
# Copyright 2018, Tobias Sauerwein.
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
"""Updates a Sonos library whenever the beets library is changed.
This is based on the Kodi Update plugin.
"""
from __future__ import division, absolute_import, print_function
from beets.plugins import BeetsPlugin
import soco
class SonosUpdate(BeetsPlugin):
def __init__(self):
super(SonosUpdate, self).__init__()
self.register_listener('database_change', self.listen_for_db_change)
def listen_for_db_change(self, lib, model):
"""Listens for beets db change and register the update"""
self.register_listener('cli_exit', self.update)
def update(self, lib):
"""When the client exists try to send refresh request to a Sonos
controler.
"""
self._log.info(u'Requesting a Sonos library update...')
device = soco.discovery.any_soco()
if device:
device.music_library.start_library_update()
else:
self._log.warning(u'Could not find a Sonos device.')
return
self._log.info(u'Sonos update triggered')

View file

@ -21,6 +21,9 @@ New features:
* A new importer configuration ``artist_credit`` will tell beets to prefer the
artist credit over the artist when autotagging.
:bug:`1249`
* A new interoperability plugin to automatically notify Sonos controllers to
update the music library once the beets library got updated.
Thanks to :user:`cgtobi`.
Fixes:

View file

@ -87,6 +87,7 @@ like this::
rewrite
scrub
smartplaylist
sonosupdate
spotify
the
thumbnails
@ -159,12 +160,15 @@ Interoperability
* :doc:`plexupdate`: Automatically notifies `Plex`_ whenever the beets library
changes.
* :doc:`smartplaylist`: Generate smart playlists based on beets queries.
* :doc:`sonosupdate`: Automatically notifies `Sonos`_ whenever the beets library
changes.
* :doc:`thumbnails`: Get thumbnails with the cover art on your album folders.
.. _Emby: http://emby.media
.. _Plex: http://plex.tv
.. _Kodi: http://kodi.tv
.. _Sonos: http://sonos.com
Miscellaneous
-------------
@ -262,4 +266,3 @@ Here are a few of the plugins written by the beets community:
.. _whatlastgenre: https://github.com/YetAnotherNerd/whatlastgenre/tree/master/plugin/beets
.. _beets-usertag: https://github.com/igordertigor/beets-usertag
.. _beets-popularity: https://github.com/abba23/beets-popularity

View file

@ -0,0 +1,18 @@
SonosUpdate Plugin
==================
The ``sonosupdate`` plugin lets you automatically update `Sonos`_'s music
library whenever you change your beets library.
To use ``sonosupdate`` plugin, enable it in your configuration
(see :ref:`using-plugins`).
To use the ``sonosupdate`` plugin you need to install the `soco`_ library with::
pip install soco
With that all in place, you'll see beets send the "update" command to your Sonos
controller every time you change your beets library.
.. _Sonos: http://sonos.com/
.. _soco: http://python-soco.com