New Upstream Snapshot - mopidy-mpris

Ready changes

Summary

Merged new upstream version: 3.0.3+git20220518.2.630e0a2 (was: 3.0.3+git20220518.1.630e0a2).

Resulting package

Built on 2022-12-19T20:25 (took 8m17s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots mopidy-mpris

Lintian Result

Diff

diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index d225883..0000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-version: 2.1
-
-orbs:
-  codecov: codecov/codecov@1.0.5
-
-workflows:
-  version: 2
-  test:
-    jobs:
-      - py39
-      - py38
-      - py37
-      - black
-      - check-manifest
-      - flake8
-
-jobs:
-  py39: &test-template
-    docker:
-      - image: mopidy/ci-python:3.9
-    steps:
-      - checkout
-      - restore_cache:
-          name: Restoring tox cache
-          key: tox-v1-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.cfg" }}
-      - run:
-          name: Run tests
-          command: |
-            tox -e $CIRCLE_JOB -- \
-              --junit-xml=test-results/pytest/results.xml \
-              --cov-report=xml
-      - save_cache:
-          name: Saving tox cache
-          key: tox-v1-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.cfg" }}
-          paths:
-            - ./.tox
-            - ~/.cache/pip
-      - codecov/upload:
-          file: coverage.xml
-      - store_test_results:
-          path: test-results
-
-  py38:
-    <<: *test-template
-    docker:
-      - image: mopidy/ci-python:3.8
-
-  py37:
-    <<: *test-template
-    docker:
-      - image: mopidy/ci-python:3.7
-
-  black: *test-template
-
-  check-manifest: *test-template
-
-  flake8: *test-template
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
deleted file mode 100644
index 21a6ea1..0000000
--- a/.github/workflows/release.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: Release
-
-on:
-  release:
-    types: [published]
-
-jobs:
-  release:
-    runs-on: ubuntu-20.04
-
-    steps:
-    - uses: actions/checkout@v2
-    - uses: actions/setup-python@v2
-      with:
-        python-version: '3.9'
-    - name: "Install dependencies"
-      run: python3 -m pip install build
-    - name: "Build package"
-      run: python3 -m build
-    - uses: pypa/gh-action-pypi-publish@v1.4.1
-      with:
-        user: __token__
-        password: ${{ secrets.PYPI_TOKEN }}
diff --git a/MANIFEST.in b/MANIFEST.in
index 7734bb0..9d9fd9b 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -6,7 +6,6 @@ include MANIFEST.in
 include pyproject.toml
 include tox.ini
 
-recursive-include .circleci *
 recursive-include .github *
 
 include mopidy_*/ext.conf
diff --git a/Mopidy_MPRIS.egg-info/PKG-INFO b/Mopidy_MPRIS.egg-info/PKG-INFO
index 68a144e..a141b09 100644
--- a/Mopidy_MPRIS.egg-info/PKG-INFO
+++ b/Mopidy_MPRIS.egg-info/PKG-INFO
@@ -6,385 +6,6 @@ Home-page: https://github.com/mopidy/mopidy-mpris
 Author: Stein Magnus Jodal
 Author-email: stein.magnus@jodal.no
 License: Apache License, Version 2.0
-Description: ************
-        Mopidy-MPRIS
-        ************
-        
-        .. image:: https://img.shields.io/pypi/v/Mopidy-MPRIS
-            :target: https://pypi.org/project/Mopidy-MPRIS/
-            :alt: Latest PyPI version
-        
-        .. image:: https://img.shields.io/circleci/build/gh/mopidy/mopidy-mpris
-            :target: https://circleci.com/gh/mopidy/mopidy-mpris
-            :alt: CircleCI build status
-        
-        .. image:: https://img.shields.io/codecov/c/gh/mopidy/mopidy-mpris
-            :target: https://codecov.io/gh/mopidy/mopidy-mpris
-            :alt: Test coverage
-        
-        `Mopidy`_ extension for controlling Mopidy through D-Bus using the `MPRIS
-        specification`_.
-        
-        Mopidy-MPRIS supports the minimum requirements of the `MPRIS specification`_
-        as well as the optional `Playlists interface`_. The `TrackList interface`_
-        is currently not supported.
-        
-        .. _Mopidy: https://www.mopidy.com/
-        .. _MPRIS specification: https://specifications.freedesktop.org/mpris-spec/latest/
-        .. _Playlists interface: https://specifications.freedesktop.org/mpris-spec/latest/Playlists_Interface.html
-        .. _TrackList interface: https://specifications.freedesktop.org/mpris-spec/latest/Track_List_Interface.html
-        
-        
-        Table of contents
-        =================
-        
-        - Requirements_
-        - Installation_
-        - Configuration_
-        - Usage_
-        - Clients_
-        
-          - `GNOME Shell builtin`_
-          - `gnome-shell-extensions-mediaplayer`_
-          - `gnome-shell-extensions-mpris-indicator-button`_
-          - `Ubuntu Sound Menu`_
-        
-        - `Advanced setups`_
-        
-          - `Running as a service`_
-          - `MPRIS on the system bus`_
-          - `UPnP/DLNA with Rygel`_
-        
-        - `Development tips`_
-        
-          - `Browsing the MPRIS API with D-Feet`_
-          - `Testing the MPRIS API with pydbus`_
-        
-        - `Project resources`_
-        - Credits_
-        
-        
-        Requirements
-        ============
-        
-        - `pydbus`_ D-Bus Python bindings, which again depends on ``python-gi``. Thus
-          it is usually easiest to install with your distribution's package manager.
-        
-        .. _pydbus: https://github.com/LEW21/pydbus
-        
-        
-        Installation
-        ============
-        
-        Install by running::
-        
-            sudo python3 -m pip install Mopidy-MPRIS
-        
-        See https://mopidy.com/ext/mpris/ for alternative installation methods.
-        
-        
-        Configuration
-        =============
-        
-        No configuration is required for the MPRIS extension to work.
-        
-        The following configuration values are available:
-        
-        - ``mpris/enabled``: If the MPRIS extension should be enabled or not.
-          Defaults to ``true``.
-        
-        - ``mpris/bus_type``: The type of D-Bus bus Mopidy-MPRIS should connect to.
-          Choices include ``session`` (the default) and ``system``.
-        
-        
-        Usage
-        =====
-        
-        Once Mopidy-MPRIS has been installed and your Mopidy server has been
-        restarted, the Mopidy-MPRIS extension announces its presence on D-Bus so that
-        any MPRIS compatible clients on your system can interact with it. Exactly how
-        you control Mopidy through MPRIS depends on which MPRIS client you use.
-        
-        
-        Clients
-        =======
-        
-        The following clients have been tested with Mopidy-MPRIS.
-        
-        GNOME Shell builtin
-        -------------------
-        
-        State:
-            Not working
-        Tested versions:
-            Ubuntu 18.10,
-            GNOME Shell 3.30.1-2ubuntu1,
-            Mopidy-MPRIS 2.0.0
-        
-        GNOME Shell, which is the default desktop on Ubuntu 18.04 onwards, has a
-        builtin MPRIS client. This client seems to work well with Spotify's player,
-        but Mopidy-MPRIS does not show up here.
-        
-        If you have any tips on what's missing to get this working, please open an
-        issue.
-        
-        gnome-shell-extensions-mediaplayer
-        ----------------------------------
-        
-        State:
-            Working
-        Tested versions:
-            Ubuntu 18.10,
-            GNOME Shell 3.30.1-2ubuntu1,
-            gnome-shell-extension-mediaplayer 63,
-            Mopidy-MPRIS 2.0.0
-        Website:
-            https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer
-        
-        gnome-shell-extensions-mediaplayer is a quite feature rich MPRIS client
-        built as an extension to GNOME Shell. With the improvements to Mopidy-MPRIS
-        in v2.0, this extension works very well with Mopidy.
-        
-        gnome-shell-extensions-mpris-indicator-button
-        ---------------------------------------------
-        
-        State:
-            Working
-        Tested versions:
-            Ubuntu 18.10,
-            GNOME Shell 3.30.1-2ubuntu1,
-            gnome-shell-extensions-mpris-indicator-button 5,
-            Mopidy-MPRIS 2.0.0
-        Website:
-            https://github.com/JasonLG1979/gnome-shell-extensions-mpris-indicator-button/
-        
-        gnome-shell-extensions-mpris-indicator-button is a minimalistic version of
-        gnome-shell-extensions-mediaplayer. It works with Mopidy-MPRIS, with the
-        exception of the play/pause button not changing state when Mopidy starts
-        playing.
-        
-        If you have any tips on what's missing to get the play/pause button display
-        correctly, please open an issue.
-        
-        Ubuntu Sound Menu
-        -----------------
-        
-        State:
-            Unknown
-        
-        Historically, Ubuntu Sound Menu was the primary target for Mopidy-MPRIS'
-        development. Since Ubuntu 18.04 replaced Unity with GNOME Shell, this is no
-        longer the case. It is currently unknown to what degree Mopidy-MPRIS works
-        with old Ubuntu setups.
-        
-        If you run an Ubuntu setup with Unity and have tested Mopidy-MPRIS, please
-        open an issue to share your results.
-        
-        
-        Advanced setups
-        ===============
-        
-        Running as a service
-        --------------------
-        
-        If you have input on how to best configure Mopidy-MPRIS when Mopidy is
-        running as a service, please add a comment to `issue #15`_.
-        
-        .. _issue #15: https://github.com/mopidy/mopidy-mpris/issues/15
-        
-        MPRIS on the system bus
-        -----------------------
-        
-        You can set the ``mpris/bus_type`` config value to ``system``. This will lead
-        to Mopidy-MPRIS making itself available on the system bus instead of the
-        logged in user's session bus.
-        
-        .. note::
-            Few MPRIS clients will try to access MPRIS devices on the system bus, so
-            this will give you limited functionality. For example, media keys in
-            GNOME Shell does not work with media players that expose their MPRIS
-            interface on the system bus instead of the user's session bus.
-        
-        The default setup will often not permit Mopidy to publish its service on the
-        D-Bus system bus, causing a warning similar to this in Mopidy's log::
-        
-            MPRIS frontend setup failed (g-dbus-error-quark:
-            GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Connection ":1.3071"
-            is not allowed to own the service "org.mpris.MediaPlayer2.mopidy" due to
-            security policies in the configuration file (9))
-        
-        To solve this, create the file
-        ``/etc/dbus-1/system.d/org.mpris.MediaPlayer2.mopidy.conf`` with the
-        following contents:
-        
-        .. code:: xml
-        
-            <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-            "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-            <busconfig>
-              <!-- Allow mopidy user to publish the Mopidy-MPRIS service -->
-              <policy user="mopidy">
-                <allow own="org.mpris.MediaPlayer2.mopidy"/>
-              </policy>
-        
-              <!-- Allow anyone to invoke methods on the Mopidy-MPRIS service -->
-              <policy context="default">
-                <allow send_destination="org.mpris.MediaPlayer2.mopidy"/>
-                <allow receive_sender="org.mpris.MediaPlayer2.mopidy"/>
-              </policy>
-            </busconfig>
-        
-        If you run Mopidy as another user than ``mopidy``, you must
-        update ``user="mopidy"`` in the above file accordingly.
-        
-        Once the file is in place, you must restart Mopidy for the change to take
-        effect.
-        
-        To test the setup, you can run the following command as any user on the
-        system to play/pause the music::
-        
-            dbus-send --system --print-reply \
-              --dest=org.mpris.MediaPlayer2.mopidy \
-              /org/mpris/MediaPlayer2 \
-              org.mpris.MediaPlayer2.Player.PlayPause
-        
-        UPnP/DLNA with Rygel
-        --------------------
-        
-        Rygel_ is an application that will translate between Mopidy's MPRIS interface
-        and UPnP. Rygel must be run on the same machine as Mopidy, but will make
-        Mopidy controllable by any device on the local network that can control a
-        UPnP/DLNA MediaRenderer.
-        
-        .. _Rygel: https://wiki.gnome.org/Projects/Rygel
-        
-        The setup process is approximately as follows:
-        
-        1. Install Rygel.
-        
-           On Debian/Ubuntu/Raspbian::
-        
-               sudo apt install rygel
-        
-        2. Enable Rygel's MPRIS plugin.
-        
-           On Debian/Ubuntu/Raspbian, edit ``/etc/rygel.conf``, find the ``[MPRIS]``
-           section, and change ``enabled=false`` to ``enabled=true``.
-        
-        3. Start Rygel.
-        
-           To start it as the current user::
-        
-               systemctl --user start rygel
-        
-           To make Rygel start as the current user on boot::
-        
-               systemctl --user enable rygel
-        
-        4. Configure your system's firewall to allow the local network to reach
-           Rygel. Exactly how is out of scope for this document.
-        
-        5. Start Mopidy with Mopidy-MPRIS enabled.
-        
-        6. If you view Rygel's log output with::
-        
-               journalctl --user -feu rygel
-        
-           You should see a log statement similar to::
-        
-               New plugin "org.mpris.MediaPlayer2.mopidy" available
-        
-        6. If everything went well, you should now be able to control Mopidy from a
-           device on your local network that can control an UPnP/DLNA MediaRenderer,
-           for example the Android app BubbleUPnP.
-        
-        Alternatively, `upmpdcli combined with Mopidy-MPD`_ serves the same purpose as
-        this setup.
-        
-        .. _upmpdcli combined with Mopidy-MPD: https://docs.mopidy.com/en/latest/clients/upnp/
-        
-        
-        Development tips
-        ================
-        
-        Mopidy-MPRIS has an extensive test suite, so the first step for all changes
-        or additions is to add a test exercising the new code. However, making the
-        tests pass doesn't ensure that what comes out on the D-Bus bus is correct. To
-        introspect this through the bus, there's a couple of useful tools.
-        
-        
-        Browsing the MPRIS API with D-Feet
-        ----------------------------------
-        
-        D-Feet is a graphical D-Bus browser. On Debian/Ubuntu systems it can be
-        installed by running::
-        
-            sudo apt install d-feet
-        
-        Then run the ``d-feet`` command. In the D-Feet window, select the tab
-        corresponding to the bus you run Mopidy-MPRIS on, usually the session bus.
-        Then search for "MediaPlayer2" to find all available MPRIS interfaces.
-        
-        To get the current value of a property, double-click it. To execute a method,
-        double-click it, provide any required arguments, and click "Execute".
-        
-        For more information on D-Feet, see the `GNOME wiki
-        <https://wiki.gnome.org/Apps/DFeet>`_.
-        
-        
-        Testing the MPRIS API with pydbus
-        ---------------------------------
-        
-        To use the MPRIS API directly, start Mopidy, and then run the following in a
-        Python shell to use ``pydbus`` as an MPRIS client::
-        
-            >>> import pydbus
-            >>> bus = pydbus.SessionBus()
-            >>> player = bus.get('org.mpris.MediaPlayer2.mopidy', '/org/mpris/MediaPlayer2')
-        
-        Now you can control Mopidy through the player object. To get properties from
-        Mopidy, run for example::
-        
-            >>> player.PlaybackStatus
-            'Playing'
-            >>> player.Metadata
-            {'mpris:artUrl': 'https://i.scdn.co/image/8eb49b41eeb45c1cf53e1ddfea7973d9ca257777',
-             'mpris:length': 342000000,
-             'mpris:trackid': '/com/mopidy/track/36',
-             'xesam:album': '65/Milo',
-             'xesam:albumArtist': ['Kiasmos'],
-             'xesam:artist': ['Rival Consoles'],
-             'xesam:discNumber': 1,
-             'xesam:title': 'Arp',
-             'xesam:trackNumber': 5,
-             'xesam:url': 'spotify:track:7CoxEEsqo3XdvUsScRV4WD'}
-            >>>
-        
-        To pause Mopidy's playback through D-Bus, run::
-        
-            >>> player.Pause()
-            >>>
-        
-        For details on the API, please refer to the `MPRIS specification
-        <https://specifications.freedesktop.org/mpris-spec/latest/>`__.
-        
-        
-        Project resources
-        =================
-        
-        - `Source code <https://github.com/mopidy/mopidy-mpris>`_
-        - `Issue tracker <https://github.com/mopidy/mopidy-mpris/issues>`_
-        - `Changelog <https://github.com/mopidy/mopidy-mpris/releases>`_
-        
-        
-        Credits
-        =======
-        
-        - Original author: `Stein Magnus Jodal <https://github.com/jodal>`__
-        - Current maintainer: `Stein Magnus Jodal <https://github.com/jodal>`__
-        - `Contributors <https://github.com/mopidy/mopidy-mpris/graphs/contributors>`_
-        
-Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: No Input/Output (Daemon)
 Classifier: Intended Audience :: End Users/Desktop
@@ -394,9 +15,409 @@ Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Topic :: Multimedia :: Sound/Audio :: Players
 Requires-Python: >=3.7
+Provides-Extra: dev
 Provides-Extra: lint
-Provides-Extra: release
 Provides-Extra: test
-Provides-Extra: dev
+License-File: LICENSE
+
+************
+Mopidy-MPRIS
+************
+
+.. image:: https://img.shields.io/pypi/v/Mopidy-MPRIS
+    :target: https://pypi.org/project/Mopidy-MPRIS/
+    :alt: Latest PyPI version
+
+.. image:: https://img.shields.io/github/workflow/status/mopidy/mopidy-mpris/CI
+    :target: https://github.com/mopidy/mopidy-mpris/actions
+    :alt: CI build status
+
+.. image:: https://img.shields.io/codecov/c/gh/mopidy/mopidy-mpris
+    :target: https://codecov.io/gh/mopidy/mopidy-mpris
+    :alt: Test coverage
+
+`Mopidy`_ extension for controlling Mopidy through D-Bus using the `MPRIS
+specification`_.
+
+Mopidy-MPRIS supports the minimum requirements of the `MPRIS specification`_
+as well as the optional `Playlists interface`_. The `TrackList interface`_
+is currently not supported.
+
+.. _Mopidy: https://www.mopidy.com/
+.. _MPRIS specification: https://specifications.freedesktop.org/mpris-spec/latest/
+.. _Playlists interface: https://specifications.freedesktop.org/mpris-spec/latest/Playlists_Interface.html
+.. _TrackList interface: https://specifications.freedesktop.org/mpris-spec/latest/Track_List_Interface.html
+
+
+Maintainer wanted
+=================
+
+Mopidy-MPRIS is currently kept on life support by the Mopidy core developers.
+It is in need of a more dedicated maintainer.
+
+If you want to be the maintainer of Mopidy-MPRIS, please:
+
+1. Make 2-3 good pull requests improving any part of the project.
+
+2. Read and get familiar with all of the project's open issues.
+
+3. Send a pull request removing this section and adding yourself as the
+   "Current maintainer" in the "Credits" section below. In the pull request
+   description, please refer to the previous pull requests and state that
+   you've familiarized yourself with the open issues.
+
+   As a maintainer, you'll be given push access to the repo and the authority
+   to make releases to PyPI when you see fit.
+
+
+Table of contents
+=================
+
+- Requirements_
+- Installation_
+- Configuration_
+- Usage_
+- Clients_
+
+  - `GNOME Shell builtin`_
+  - `gnome-shell-extensions-mediaplayer`_
+  - `gnome-shell-extensions-mpris-indicator-button`_
+  - `Ubuntu Sound Menu`_
+
+- `Advanced setups`_
+
+  - `Running as a service`_
+  - `MPRIS on the system bus`_
+  - `UPnP/DLNA with Rygel`_
+
+- `Development tips`_
+
+  - `Browsing the MPRIS API with D-Feet`_
+  - `Testing the MPRIS API with pydbus`_
+
+- `Project resources`_
+- Credits_
+
+
+Requirements
+============
+
+- `pydbus`_ D-Bus Python bindings, which again depends on ``python-gi``. Thus
+  it is usually easiest to install with your distribution's package manager.
+
+.. _pydbus: https://github.com/LEW21/pydbus
+
+
+Installation
+============
+
+Install by running::
+
+    sudo python3 -m pip install Mopidy-MPRIS
+
+See https://mopidy.com/ext/mpris/ for alternative installation methods.
+
+
+Configuration
+=============
+
+No configuration is required for the MPRIS extension to work.
+
+The following configuration values are available:
+
+- ``mpris/enabled``: If the MPRIS extension should be enabled or not.
+  Defaults to ``true``.
+
+- ``mpris/bus_type``: The type of D-Bus bus Mopidy-MPRIS should connect to.
+  Choices include ``session`` (the default) and ``system``.
+
+
+Usage
+=====
+
+Once Mopidy-MPRIS has been installed and your Mopidy server has been
+restarted, the Mopidy-MPRIS extension announces its presence on D-Bus so that
+any MPRIS compatible clients on your system can interact with it. Exactly how
+you control Mopidy through MPRIS depends on which MPRIS client you use.
+
+
+Clients
+=======
+
+The following clients have been tested with Mopidy-MPRIS.
+
+GNOME Shell builtin
+-------------------
+
+State:
+    Not working
+Tested versions:
+    Ubuntu 18.10,
+    GNOME Shell 3.30.1-2ubuntu1,
+    Mopidy-MPRIS 2.0.0
+
+GNOME Shell, which is the default desktop on Ubuntu 18.04 onwards, has a
+builtin MPRIS client. This client seems to work well with Spotify's player,
+but Mopidy-MPRIS does not show up here.
+
+If you have any tips on what's missing to get this working, please open an
+issue.
+
+gnome-shell-extensions-mediaplayer
+----------------------------------
+
+State:
+    Working
+Tested versions:
+    Ubuntu 18.10,
+    GNOME Shell 3.30.1-2ubuntu1,
+    gnome-shell-extension-mediaplayer 63,
+    Mopidy-MPRIS 2.0.0
+Website:
+    https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer
+
+gnome-shell-extensions-mediaplayer is a quite feature rich MPRIS client
+built as an extension to GNOME Shell. With the improvements to Mopidy-MPRIS
+in v2.0, this extension works very well with Mopidy.
+
+gnome-shell-extensions-mpris-indicator-button
+---------------------------------------------
+
+State:
+    Working
+Tested versions:
+    Ubuntu 18.10,
+    GNOME Shell 3.30.1-2ubuntu1,
+    gnome-shell-extensions-mpris-indicator-button 5,
+    Mopidy-MPRIS 2.0.0
+Website:
+    https://github.com/JasonLG1979/gnome-shell-extensions-mpris-indicator-button/
+
+gnome-shell-extensions-mpris-indicator-button is a minimalistic version of
+gnome-shell-extensions-mediaplayer. It works with Mopidy-MPRIS, with the
+exception of the play/pause button not changing state when Mopidy starts
+playing.
+
+If you have any tips on what's missing to get the play/pause button display
+correctly, please open an issue.
+
+Ubuntu Sound Menu
+-----------------
+
+State:
+    Unknown
+
+Historically, Ubuntu Sound Menu was the primary target for Mopidy-MPRIS'
+development. Since Ubuntu 18.04 replaced Unity with GNOME Shell, this is no
+longer the case. It is currently unknown to what degree Mopidy-MPRIS works
+with old Ubuntu setups.
+
+If you run an Ubuntu setup with Unity and have tested Mopidy-MPRIS, please
+open an issue to share your results.
+
+
+Advanced setups
+===============
+
+Running as a service
+--------------------
+
+If you have input on how to best configure Mopidy-MPRIS when Mopidy is
+running as a service, please add a comment to `issue #15`_.
+
+.. _issue #15: https://github.com/mopidy/mopidy-mpris/issues/15
+
+MPRIS on the system bus
+-----------------------
+
+You can set the ``mpris/bus_type`` config value to ``system``. This will lead
+to Mopidy-MPRIS making itself available on the system bus instead of the
+logged in user's session bus.
+
+.. note::
+    Few MPRIS clients will try to access MPRIS devices on the system bus, so
+    this will give you limited functionality. For example, media keys in
+    GNOME Shell does not work with media players that expose their MPRIS
+    interface on the system bus instead of the user's session bus.
+
+The default setup will often not permit Mopidy to publish its service on the
+D-Bus system bus, causing a warning similar to this in Mopidy's log::
+
+    MPRIS frontend setup failed (g-dbus-error-quark:
+    GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Connection ":1.3071"
+    is not allowed to own the service "org.mpris.MediaPlayer2.mopidy" due to
+    security policies in the configuration file (9))
+
+To solve this, create the file
+``/etc/dbus-1/system.d/org.mpris.MediaPlayer2.mopidy.conf`` with the
+following contents:
+
+.. code:: xml
+
+    <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+    "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+    <busconfig>
+      <!-- Allow mopidy user to publish the Mopidy-MPRIS service -->
+      <policy user="mopidy">
+        <allow own="org.mpris.MediaPlayer2.mopidy"/>
+      </policy>
+
+      <!-- Allow anyone to invoke methods on the Mopidy-MPRIS service -->
+      <policy context="default">
+        <allow send_destination="org.mpris.MediaPlayer2.mopidy"/>
+        <allow receive_sender="org.mpris.MediaPlayer2.mopidy"/>
+      </policy>
+    </busconfig>
+
+If you run Mopidy as another user than ``mopidy``, you must
+update ``user="mopidy"`` in the above file accordingly.
+
+Once the file is in place, you must restart Mopidy for the change to take
+effect.
+
+To test the setup, you can run the following command as any user on the
+system to play/pause the music::
+
+    dbus-send --system --print-reply \
+      --dest=org.mpris.MediaPlayer2.mopidy \
+      /org/mpris/MediaPlayer2 \
+      org.mpris.MediaPlayer2.Player.PlayPause
+
+UPnP/DLNA with Rygel
+--------------------
+
+Rygel_ is an application that will translate between Mopidy's MPRIS interface
+and UPnP. Rygel must be run on the same machine as Mopidy, but will make
+Mopidy controllable by any device on the local network that can control a
+UPnP/DLNA MediaRenderer.
+
+.. _Rygel: https://wiki.gnome.org/Projects/Rygel
+
+The setup process is approximately as follows:
+
+1. Install Rygel.
+
+   On Debian/Ubuntu/Raspbian::
+
+       sudo apt install rygel
+
+2. Enable Rygel's MPRIS plugin.
+
+   On Debian/Ubuntu/Raspbian, edit ``/etc/rygel.conf``, find the ``[MPRIS]``
+   section, and change ``enabled=false`` to ``enabled=true``.
+
+3. Start Rygel.
+
+   To start it as the current user::
+
+       systemctl --user start rygel
+
+   To make Rygel start as the current user on boot::
+
+       systemctl --user enable rygel
+
+4. Configure your system's firewall to allow the local network to reach
+   Rygel. Exactly how is out of scope for this document.
+
+5. Start Mopidy with Mopidy-MPRIS enabled.
+
+6. If you view Rygel's log output with::
+
+       journalctl --user -feu rygel
+
+   You should see a log statement similar to::
+
+       New plugin "org.mpris.MediaPlayer2.mopidy" available
+
+6. If everything went well, you should now be able to control Mopidy from a
+   device on your local network that can control an UPnP/DLNA MediaRenderer,
+   for example the Android app BubbleUPnP.
+
+Alternatively, `upmpdcli combined with Mopidy-MPD`_ serves the same purpose as
+this setup.
+
+.. _upmpdcli combined with Mopidy-MPD: https://docs.mopidy.com/en/latest/clients/upnp/
+
+
+Development tips
+================
+
+Mopidy-MPRIS has an extensive test suite, so the first step for all changes
+or additions is to add a test exercising the new code. However, making the
+tests pass doesn't ensure that what comes out on the D-Bus bus is correct. To
+introspect this through the bus, there's a couple of useful tools.
+
+
+Browsing the MPRIS API with D-Feet
+----------------------------------
+
+D-Feet is a graphical D-Bus browser. On Debian/Ubuntu systems it can be
+installed by running::
+
+    sudo apt install d-feet
+
+Then run the ``d-feet`` command. In the D-Feet window, select the tab
+corresponding to the bus you run Mopidy-MPRIS on, usually the session bus.
+Then search for "MediaPlayer2" to find all available MPRIS interfaces.
+
+To get the current value of a property, double-click it. To execute a method,
+double-click it, provide any required arguments, and click "Execute".
+
+For more information on D-Feet, see the `GNOME wiki
+<https://wiki.gnome.org/Apps/DFeet>`_.
+
+
+Testing the MPRIS API with pydbus
+---------------------------------
+
+To use the MPRIS API directly, start Mopidy, and then run the following in a
+Python shell to use ``pydbus`` as an MPRIS client::
+
+    >>> import pydbus
+    >>> bus = pydbus.SessionBus()
+    >>> player = bus.get('org.mpris.MediaPlayer2.mopidy', '/org/mpris/MediaPlayer2')
+
+Now you can control Mopidy through the player object. To get properties from
+Mopidy, run for example::
+
+    >>> player.PlaybackStatus
+    'Playing'
+    >>> player.Metadata
+    {'mpris:artUrl': 'https://i.scdn.co/image/8eb49b41eeb45c1cf53e1ddfea7973d9ca257777',
+     'mpris:length': 342000000,
+     'mpris:trackid': '/com/mopidy/track/36',
+     'xesam:album': '65/Milo',
+     'xesam:albumArtist': ['Kiasmos'],
+     'xesam:artist': ['Rival Consoles'],
+     'xesam:discNumber': 1,
+     'xesam:title': 'Arp',
+     'xesam:trackNumber': 5,
+     'xesam:url': 'spotify:track:7CoxEEsqo3XdvUsScRV4WD'}
+    >>>
+
+To pause Mopidy's playback through D-Bus, run::
+
+    >>> player.Pause()
+    >>>
+
+For details on the API, please refer to the `MPRIS specification
+<https://specifications.freedesktop.org/mpris-spec/latest/>`__.
+
+
+Project resources
+=================
+
+- `Source code <https://github.com/mopidy/mopidy-mpris>`_
+- `Issue tracker <https://github.com/mopidy/mopidy-mpris/issues>`_
+- `Changelog <https://github.com/mopidy/mopidy-mpris/releases>`_
+
+
+Credits
+=======
+
+- Original author: `Stein Magnus Jodal <https://github.com/jodal>`__
+- Current maintainer: None. Maintainer wanted, see section above.
+- `Contributors <https://github.com/mopidy/mopidy-mpris/graphs/contributors>`_
diff --git a/Mopidy_MPRIS.egg-info/SOURCES.txt b/Mopidy_MPRIS.egg-info/SOURCES.txt
index 516ce62..395ccd2 100644
--- a/Mopidy_MPRIS.egg-info/SOURCES.txt
+++ b/Mopidy_MPRIS.egg-info/SOURCES.txt
@@ -6,8 +6,6 @@ pyproject.toml
 setup.cfg
 setup.py
 tox.ini
-.circleci/config.yml
-.github/workflows/release.yml
 Mopidy_MPRIS.egg-info/PKG-INFO
 Mopidy_MPRIS.egg-info/SOURCES.txt
 Mopidy_MPRIS.egg-info/dependency_links.txt
diff --git a/Mopidy_MPRIS.egg-info/entry_points.txt b/Mopidy_MPRIS.egg-info/entry_points.txt
index 32f2530..b2a635a 100644
--- a/Mopidy_MPRIS.egg-info/entry_points.txt
+++ b/Mopidy_MPRIS.egg-info/entry_points.txt
@@ -1,3 +1,2 @@
 [mopidy.ext]
 mpris = mopidy_mpris:Extension
-
diff --git a/Mopidy_MPRIS.egg-info/requires.txt b/Mopidy_MPRIS.egg-info/requires.txt
index a2a603f..d29dd5a 100644
--- a/Mopidy_MPRIS.egg-info/requires.txt
+++ b/Mopidy_MPRIS.egg-info/requires.txt
@@ -1,17 +1,16 @@
 Mopidy>=3.0.0
 Pykka>=2.0.1
-setuptools
 pydbus>=0.6.0
+setuptools
 
 [dev]
 black
 check-manifest
 flake8
+flake8-black
 flake8-bugbear
 flake8-import-order
 isort[pyproject]
-twine
-wheel
 pytest
 pytest-cov
 
@@ -19,14 +18,11 @@ pytest-cov
 black
 check-manifest
 flake8
+flake8-black
 flake8-bugbear
 flake8-import-order
 isort[pyproject]
 
-[release]
-twine
-wheel
-
 [test]
 pytest
 pytest-cov
diff --git a/PKG-INFO b/PKG-INFO
index 68a144e..a141b09 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -6,385 +6,6 @@ Home-page: https://github.com/mopidy/mopidy-mpris
 Author: Stein Magnus Jodal
 Author-email: stein.magnus@jodal.no
 License: Apache License, Version 2.0
-Description: ************
-        Mopidy-MPRIS
-        ************
-        
-        .. image:: https://img.shields.io/pypi/v/Mopidy-MPRIS
-            :target: https://pypi.org/project/Mopidy-MPRIS/
-            :alt: Latest PyPI version
-        
-        .. image:: https://img.shields.io/circleci/build/gh/mopidy/mopidy-mpris
-            :target: https://circleci.com/gh/mopidy/mopidy-mpris
-            :alt: CircleCI build status
-        
-        .. image:: https://img.shields.io/codecov/c/gh/mopidy/mopidy-mpris
-            :target: https://codecov.io/gh/mopidy/mopidy-mpris
-            :alt: Test coverage
-        
-        `Mopidy`_ extension for controlling Mopidy through D-Bus using the `MPRIS
-        specification`_.
-        
-        Mopidy-MPRIS supports the minimum requirements of the `MPRIS specification`_
-        as well as the optional `Playlists interface`_. The `TrackList interface`_
-        is currently not supported.
-        
-        .. _Mopidy: https://www.mopidy.com/
-        .. _MPRIS specification: https://specifications.freedesktop.org/mpris-spec/latest/
-        .. _Playlists interface: https://specifications.freedesktop.org/mpris-spec/latest/Playlists_Interface.html
-        .. _TrackList interface: https://specifications.freedesktop.org/mpris-spec/latest/Track_List_Interface.html
-        
-        
-        Table of contents
-        =================
-        
-        - Requirements_
-        - Installation_
-        - Configuration_
-        - Usage_
-        - Clients_
-        
-          - `GNOME Shell builtin`_
-          - `gnome-shell-extensions-mediaplayer`_
-          - `gnome-shell-extensions-mpris-indicator-button`_
-          - `Ubuntu Sound Menu`_
-        
-        - `Advanced setups`_
-        
-          - `Running as a service`_
-          - `MPRIS on the system bus`_
-          - `UPnP/DLNA with Rygel`_
-        
-        - `Development tips`_
-        
-          - `Browsing the MPRIS API with D-Feet`_
-          - `Testing the MPRIS API with pydbus`_
-        
-        - `Project resources`_
-        - Credits_
-        
-        
-        Requirements
-        ============
-        
-        - `pydbus`_ D-Bus Python bindings, which again depends on ``python-gi``. Thus
-          it is usually easiest to install with your distribution's package manager.
-        
-        .. _pydbus: https://github.com/LEW21/pydbus
-        
-        
-        Installation
-        ============
-        
-        Install by running::
-        
-            sudo python3 -m pip install Mopidy-MPRIS
-        
-        See https://mopidy.com/ext/mpris/ for alternative installation methods.
-        
-        
-        Configuration
-        =============
-        
-        No configuration is required for the MPRIS extension to work.
-        
-        The following configuration values are available:
-        
-        - ``mpris/enabled``: If the MPRIS extension should be enabled or not.
-          Defaults to ``true``.
-        
-        - ``mpris/bus_type``: The type of D-Bus bus Mopidy-MPRIS should connect to.
-          Choices include ``session`` (the default) and ``system``.
-        
-        
-        Usage
-        =====
-        
-        Once Mopidy-MPRIS has been installed and your Mopidy server has been
-        restarted, the Mopidy-MPRIS extension announces its presence on D-Bus so that
-        any MPRIS compatible clients on your system can interact with it. Exactly how
-        you control Mopidy through MPRIS depends on which MPRIS client you use.
-        
-        
-        Clients
-        =======
-        
-        The following clients have been tested with Mopidy-MPRIS.
-        
-        GNOME Shell builtin
-        -------------------
-        
-        State:
-            Not working
-        Tested versions:
-            Ubuntu 18.10,
-            GNOME Shell 3.30.1-2ubuntu1,
-            Mopidy-MPRIS 2.0.0
-        
-        GNOME Shell, which is the default desktop on Ubuntu 18.04 onwards, has a
-        builtin MPRIS client. This client seems to work well with Spotify's player,
-        but Mopidy-MPRIS does not show up here.
-        
-        If you have any tips on what's missing to get this working, please open an
-        issue.
-        
-        gnome-shell-extensions-mediaplayer
-        ----------------------------------
-        
-        State:
-            Working
-        Tested versions:
-            Ubuntu 18.10,
-            GNOME Shell 3.30.1-2ubuntu1,
-            gnome-shell-extension-mediaplayer 63,
-            Mopidy-MPRIS 2.0.0
-        Website:
-            https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer
-        
-        gnome-shell-extensions-mediaplayer is a quite feature rich MPRIS client
-        built as an extension to GNOME Shell. With the improvements to Mopidy-MPRIS
-        in v2.0, this extension works very well with Mopidy.
-        
-        gnome-shell-extensions-mpris-indicator-button
-        ---------------------------------------------
-        
-        State:
-            Working
-        Tested versions:
-            Ubuntu 18.10,
-            GNOME Shell 3.30.1-2ubuntu1,
-            gnome-shell-extensions-mpris-indicator-button 5,
-            Mopidy-MPRIS 2.0.0
-        Website:
-            https://github.com/JasonLG1979/gnome-shell-extensions-mpris-indicator-button/
-        
-        gnome-shell-extensions-mpris-indicator-button is a minimalistic version of
-        gnome-shell-extensions-mediaplayer. It works with Mopidy-MPRIS, with the
-        exception of the play/pause button not changing state when Mopidy starts
-        playing.
-        
-        If you have any tips on what's missing to get the play/pause button display
-        correctly, please open an issue.
-        
-        Ubuntu Sound Menu
-        -----------------
-        
-        State:
-            Unknown
-        
-        Historically, Ubuntu Sound Menu was the primary target for Mopidy-MPRIS'
-        development. Since Ubuntu 18.04 replaced Unity with GNOME Shell, this is no
-        longer the case. It is currently unknown to what degree Mopidy-MPRIS works
-        with old Ubuntu setups.
-        
-        If you run an Ubuntu setup with Unity and have tested Mopidy-MPRIS, please
-        open an issue to share your results.
-        
-        
-        Advanced setups
-        ===============
-        
-        Running as a service
-        --------------------
-        
-        If you have input on how to best configure Mopidy-MPRIS when Mopidy is
-        running as a service, please add a comment to `issue #15`_.
-        
-        .. _issue #15: https://github.com/mopidy/mopidy-mpris/issues/15
-        
-        MPRIS on the system bus
-        -----------------------
-        
-        You can set the ``mpris/bus_type`` config value to ``system``. This will lead
-        to Mopidy-MPRIS making itself available on the system bus instead of the
-        logged in user's session bus.
-        
-        .. note::
-            Few MPRIS clients will try to access MPRIS devices on the system bus, so
-            this will give you limited functionality. For example, media keys in
-            GNOME Shell does not work with media players that expose their MPRIS
-            interface on the system bus instead of the user's session bus.
-        
-        The default setup will often not permit Mopidy to publish its service on the
-        D-Bus system bus, causing a warning similar to this in Mopidy's log::
-        
-            MPRIS frontend setup failed (g-dbus-error-quark:
-            GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Connection ":1.3071"
-            is not allowed to own the service "org.mpris.MediaPlayer2.mopidy" due to
-            security policies in the configuration file (9))
-        
-        To solve this, create the file
-        ``/etc/dbus-1/system.d/org.mpris.MediaPlayer2.mopidy.conf`` with the
-        following contents:
-        
-        .. code:: xml
-        
-            <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-            "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-            <busconfig>
-              <!-- Allow mopidy user to publish the Mopidy-MPRIS service -->
-              <policy user="mopidy">
-                <allow own="org.mpris.MediaPlayer2.mopidy"/>
-              </policy>
-        
-              <!-- Allow anyone to invoke methods on the Mopidy-MPRIS service -->
-              <policy context="default">
-                <allow send_destination="org.mpris.MediaPlayer2.mopidy"/>
-                <allow receive_sender="org.mpris.MediaPlayer2.mopidy"/>
-              </policy>
-            </busconfig>
-        
-        If you run Mopidy as another user than ``mopidy``, you must
-        update ``user="mopidy"`` in the above file accordingly.
-        
-        Once the file is in place, you must restart Mopidy for the change to take
-        effect.
-        
-        To test the setup, you can run the following command as any user on the
-        system to play/pause the music::
-        
-            dbus-send --system --print-reply \
-              --dest=org.mpris.MediaPlayer2.mopidy \
-              /org/mpris/MediaPlayer2 \
-              org.mpris.MediaPlayer2.Player.PlayPause
-        
-        UPnP/DLNA with Rygel
-        --------------------
-        
-        Rygel_ is an application that will translate between Mopidy's MPRIS interface
-        and UPnP. Rygel must be run on the same machine as Mopidy, but will make
-        Mopidy controllable by any device on the local network that can control a
-        UPnP/DLNA MediaRenderer.
-        
-        .. _Rygel: https://wiki.gnome.org/Projects/Rygel
-        
-        The setup process is approximately as follows:
-        
-        1. Install Rygel.
-        
-           On Debian/Ubuntu/Raspbian::
-        
-               sudo apt install rygel
-        
-        2. Enable Rygel's MPRIS plugin.
-        
-           On Debian/Ubuntu/Raspbian, edit ``/etc/rygel.conf``, find the ``[MPRIS]``
-           section, and change ``enabled=false`` to ``enabled=true``.
-        
-        3. Start Rygel.
-        
-           To start it as the current user::
-        
-               systemctl --user start rygel
-        
-           To make Rygel start as the current user on boot::
-        
-               systemctl --user enable rygel
-        
-        4. Configure your system's firewall to allow the local network to reach
-           Rygel. Exactly how is out of scope for this document.
-        
-        5. Start Mopidy with Mopidy-MPRIS enabled.
-        
-        6. If you view Rygel's log output with::
-        
-               journalctl --user -feu rygel
-        
-           You should see a log statement similar to::
-        
-               New plugin "org.mpris.MediaPlayer2.mopidy" available
-        
-        6. If everything went well, you should now be able to control Mopidy from a
-           device on your local network that can control an UPnP/DLNA MediaRenderer,
-           for example the Android app BubbleUPnP.
-        
-        Alternatively, `upmpdcli combined with Mopidy-MPD`_ serves the same purpose as
-        this setup.
-        
-        .. _upmpdcli combined with Mopidy-MPD: https://docs.mopidy.com/en/latest/clients/upnp/
-        
-        
-        Development tips
-        ================
-        
-        Mopidy-MPRIS has an extensive test suite, so the first step for all changes
-        or additions is to add a test exercising the new code. However, making the
-        tests pass doesn't ensure that what comes out on the D-Bus bus is correct. To
-        introspect this through the bus, there's a couple of useful tools.
-        
-        
-        Browsing the MPRIS API with D-Feet
-        ----------------------------------
-        
-        D-Feet is a graphical D-Bus browser. On Debian/Ubuntu systems it can be
-        installed by running::
-        
-            sudo apt install d-feet
-        
-        Then run the ``d-feet`` command. In the D-Feet window, select the tab
-        corresponding to the bus you run Mopidy-MPRIS on, usually the session bus.
-        Then search for "MediaPlayer2" to find all available MPRIS interfaces.
-        
-        To get the current value of a property, double-click it. To execute a method,
-        double-click it, provide any required arguments, and click "Execute".
-        
-        For more information on D-Feet, see the `GNOME wiki
-        <https://wiki.gnome.org/Apps/DFeet>`_.
-        
-        
-        Testing the MPRIS API with pydbus
-        ---------------------------------
-        
-        To use the MPRIS API directly, start Mopidy, and then run the following in a
-        Python shell to use ``pydbus`` as an MPRIS client::
-        
-            >>> import pydbus
-            >>> bus = pydbus.SessionBus()
-            >>> player = bus.get('org.mpris.MediaPlayer2.mopidy', '/org/mpris/MediaPlayer2')
-        
-        Now you can control Mopidy through the player object. To get properties from
-        Mopidy, run for example::
-        
-            >>> player.PlaybackStatus
-            'Playing'
-            >>> player.Metadata
-            {'mpris:artUrl': 'https://i.scdn.co/image/8eb49b41eeb45c1cf53e1ddfea7973d9ca257777',
-             'mpris:length': 342000000,
-             'mpris:trackid': '/com/mopidy/track/36',
-             'xesam:album': '65/Milo',
-             'xesam:albumArtist': ['Kiasmos'],
-             'xesam:artist': ['Rival Consoles'],
-             'xesam:discNumber': 1,
-             'xesam:title': 'Arp',
-             'xesam:trackNumber': 5,
-             'xesam:url': 'spotify:track:7CoxEEsqo3XdvUsScRV4WD'}
-            >>>
-        
-        To pause Mopidy's playback through D-Bus, run::
-        
-            >>> player.Pause()
-            >>>
-        
-        For details on the API, please refer to the `MPRIS specification
-        <https://specifications.freedesktop.org/mpris-spec/latest/>`__.
-        
-        
-        Project resources
-        =================
-        
-        - `Source code <https://github.com/mopidy/mopidy-mpris>`_
-        - `Issue tracker <https://github.com/mopidy/mopidy-mpris/issues>`_
-        - `Changelog <https://github.com/mopidy/mopidy-mpris/releases>`_
-        
-        
-        Credits
-        =======
-        
-        - Original author: `Stein Magnus Jodal <https://github.com/jodal>`__
-        - Current maintainer: `Stein Magnus Jodal <https://github.com/jodal>`__
-        - `Contributors <https://github.com/mopidy/mopidy-mpris/graphs/contributors>`_
-        
-Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: No Input/Output (Daemon)
 Classifier: Intended Audience :: End Users/Desktop
@@ -394,9 +15,409 @@ Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Topic :: Multimedia :: Sound/Audio :: Players
 Requires-Python: >=3.7
+Provides-Extra: dev
 Provides-Extra: lint
-Provides-Extra: release
 Provides-Extra: test
-Provides-Extra: dev
+License-File: LICENSE
+
+************
+Mopidy-MPRIS
+************
+
+.. image:: https://img.shields.io/pypi/v/Mopidy-MPRIS
+    :target: https://pypi.org/project/Mopidy-MPRIS/
+    :alt: Latest PyPI version
+
+.. image:: https://img.shields.io/github/workflow/status/mopidy/mopidy-mpris/CI
+    :target: https://github.com/mopidy/mopidy-mpris/actions
+    :alt: CI build status
+
+.. image:: https://img.shields.io/codecov/c/gh/mopidy/mopidy-mpris
+    :target: https://codecov.io/gh/mopidy/mopidy-mpris
+    :alt: Test coverage
+
+`Mopidy`_ extension for controlling Mopidy through D-Bus using the `MPRIS
+specification`_.
+
+Mopidy-MPRIS supports the minimum requirements of the `MPRIS specification`_
+as well as the optional `Playlists interface`_. The `TrackList interface`_
+is currently not supported.
+
+.. _Mopidy: https://www.mopidy.com/
+.. _MPRIS specification: https://specifications.freedesktop.org/mpris-spec/latest/
+.. _Playlists interface: https://specifications.freedesktop.org/mpris-spec/latest/Playlists_Interface.html
+.. _TrackList interface: https://specifications.freedesktop.org/mpris-spec/latest/Track_List_Interface.html
+
+
+Maintainer wanted
+=================
+
+Mopidy-MPRIS is currently kept on life support by the Mopidy core developers.
+It is in need of a more dedicated maintainer.
+
+If you want to be the maintainer of Mopidy-MPRIS, please:
+
+1. Make 2-3 good pull requests improving any part of the project.
+
+2. Read and get familiar with all of the project's open issues.
+
+3. Send a pull request removing this section and adding yourself as the
+   "Current maintainer" in the "Credits" section below. In the pull request
+   description, please refer to the previous pull requests and state that
+   you've familiarized yourself with the open issues.
+
+   As a maintainer, you'll be given push access to the repo and the authority
+   to make releases to PyPI when you see fit.
+
+
+Table of contents
+=================
+
+- Requirements_
+- Installation_
+- Configuration_
+- Usage_
+- Clients_
+
+  - `GNOME Shell builtin`_
+  - `gnome-shell-extensions-mediaplayer`_
+  - `gnome-shell-extensions-mpris-indicator-button`_
+  - `Ubuntu Sound Menu`_
+
+- `Advanced setups`_
+
+  - `Running as a service`_
+  - `MPRIS on the system bus`_
+  - `UPnP/DLNA with Rygel`_
+
+- `Development tips`_
+
+  - `Browsing the MPRIS API with D-Feet`_
+  - `Testing the MPRIS API with pydbus`_
+
+- `Project resources`_
+- Credits_
+
+
+Requirements
+============
+
+- `pydbus`_ D-Bus Python bindings, which again depends on ``python-gi``. Thus
+  it is usually easiest to install with your distribution's package manager.
+
+.. _pydbus: https://github.com/LEW21/pydbus
+
+
+Installation
+============
+
+Install by running::
+
+    sudo python3 -m pip install Mopidy-MPRIS
+
+See https://mopidy.com/ext/mpris/ for alternative installation methods.
+
+
+Configuration
+=============
+
+No configuration is required for the MPRIS extension to work.
+
+The following configuration values are available:
+
+- ``mpris/enabled``: If the MPRIS extension should be enabled or not.
+  Defaults to ``true``.
+
+- ``mpris/bus_type``: The type of D-Bus bus Mopidy-MPRIS should connect to.
+  Choices include ``session`` (the default) and ``system``.
+
+
+Usage
+=====
+
+Once Mopidy-MPRIS has been installed and your Mopidy server has been
+restarted, the Mopidy-MPRIS extension announces its presence on D-Bus so that
+any MPRIS compatible clients on your system can interact with it. Exactly how
+you control Mopidy through MPRIS depends on which MPRIS client you use.
+
+
+Clients
+=======
+
+The following clients have been tested with Mopidy-MPRIS.
+
+GNOME Shell builtin
+-------------------
+
+State:
+    Not working
+Tested versions:
+    Ubuntu 18.10,
+    GNOME Shell 3.30.1-2ubuntu1,
+    Mopidy-MPRIS 2.0.0
+
+GNOME Shell, which is the default desktop on Ubuntu 18.04 onwards, has a
+builtin MPRIS client. This client seems to work well with Spotify's player,
+but Mopidy-MPRIS does not show up here.
+
+If you have any tips on what's missing to get this working, please open an
+issue.
+
+gnome-shell-extensions-mediaplayer
+----------------------------------
+
+State:
+    Working
+Tested versions:
+    Ubuntu 18.10,
+    GNOME Shell 3.30.1-2ubuntu1,
+    gnome-shell-extension-mediaplayer 63,
+    Mopidy-MPRIS 2.0.0
+Website:
+    https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer
+
+gnome-shell-extensions-mediaplayer is a quite feature rich MPRIS client
+built as an extension to GNOME Shell. With the improvements to Mopidy-MPRIS
+in v2.0, this extension works very well with Mopidy.
+
+gnome-shell-extensions-mpris-indicator-button
+---------------------------------------------
+
+State:
+    Working
+Tested versions:
+    Ubuntu 18.10,
+    GNOME Shell 3.30.1-2ubuntu1,
+    gnome-shell-extensions-mpris-indicator-button 5,
+    Mopidy-MPRIS 2.0.0
+Website:
+    https://github.com/JasonLG1979/gnome-shell-extensions-mpris-indicator-button/
+
+gnome-shell-extensions-mpris-indicator-button is a minimalistic version of
+gnome-shell-extensions-mediaplayer. It works with Mopidy-MPRIS, with the
+exception of the play/pause button not changing state when Mopidy starts
+playing.
+
+If you have any tips on what's missing to get the play/pause button display
+correctly, please open an issue.
+
+Ubuntu Sound Menu
+-----------------
+
+State:
+    Unknown
+
+Historically, Ubuntu Sound Menu was the primary target for Mopidy-MPRIS'
+development. Since Ubuntu 18.04 replaced Unity with GNOME Shell, this is no
+longer the case. It is currently unknown to what degree Mopidy-MPRIS works
+with old Ubuntu setups.
+
+If you run an Ubuntu setup with Unity and have tested Mopidy-MPRIS, please
+open an issue to share your results.
+
+
+Advanced setups
+===============
+
+Running as a service
+--------------------
+
+If you have input on how to best configure Mopidy-MPRIS when Mopidy is
+running as a service, please add a comment to `issue #15`_.
+
+.. _issue #15: https://github.com/mopidy/mopidy-mpris/issues/15
+
+MPRIS on the system bus
+-----------------------
+
+You can set the ``mpris/bus_type`` config value to ``system``. This will lead
+to Mopidy-MPRIS making itself available on the system bus instead of the
+logged in user's session bus.
+
+.. note::
+    Few MPRIS clients will try to access MPRIS devices on the system bus, so
+    this will give you limited functionality. For example, media keys in
+    GNOME Shell does not work with media players that expose their MPRIS
+    interface on the system bus instead of the user's session bus.
+
+The default setup will often not permit Mopidy to publish its service on the
+D-Bus system bus, causing a warning similar to this in Mopidy's log::
+
+    MPRIS frontend setup failed (g-dbus-error-quark:
+    GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Connection ":1.3071"
+    is not allowed to own the service "org.mpris.MediaPlayer2.mopidy" due to
+    security policies in the configuration file (9))
+
+To solve this, create the file
+``/etc/dbus-1/system.d/org.mpris.MediaPlayer2.mopidy.conf`` with the
+following contents:
+
+.. code:: xml
+
+    <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+    "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+    <busconfig>
+      <!-- Allow mopidy user to publish the Mopidy-MPRIS service -->
+      <policy user="mopidy">
+        <allow own="org.mpris.MediaPlayer2.mopidy"/>
+      </policy>
+
+      <!-- Allow anyone to invoke methods on the Mopidy-MPRIS service -->
+      <policy context="default">
+        <allow send_destination="org.mpris.MediaPlayer2.mopidy"/>
+        <allow receive_sender="org.mpris.MediaPlayer2.mopidy"/>
+      </policy>
+    </busconfig>
+
+If you run Mopidy as another user than ``mopidy``, you must
+update ``user="mopidy"`` in the above file accordingly.
+
+Once the file is in place, you must restart Mopidy for the change to take
+effect.
+
+To test the setup, you can run the following command as any user on the
+system to play/pause the music::
+
+    dbus-send --system --print-reply \
+      --dest=org.mpris.MediaPlayer2.mopidy \
+      /org/mpris/MediaPlayer2 \
+      org.mpris.MediaPlayer2.Player.PlayPause
+
+UPnP/DLNA with Rygel
+--------------------
+
+Rygel_ is an application that will translate between Mopidy's MPRIS interface
+and UPnP. Rygel must be run on the same machine as Mopidy, but will make
+Mopidy controllable by any device on the local network that can control a
+UPnP/DLNA MediaRenderer.
+
+.. _Rygel: https://wiki.gnome.org/Projects/Rygel
+
+The setup process is approximately as follows:
+
+1. Install Rygel.
+
+   On Debian/Ubuntu/Raspbian::
+
+       sudo apt install rygel
+
+2. Enable Rygel's MPRIS plugin.
+
+   On Debian/Ubuntu/Raspbian, edit ``/etc/rygel.conf``, find the ``[MPRIS]``
+   section, and change ``enabled=false`` to ``enabled=true``.
+
+3. Start Rygel.
+
+   To start it as the current user::
+
+       systemctl --user start rygel
+
+   To make Rygel start as the current user on boot::
+
+       systemctl --user enable rygel
+
+4. Configure your system's firewall to allow the local network to reach
+   Rygel. Exactly how is out of scope for this document.
+
+5. Start Mopidy with Mopidy-MPRIS enabled.
+
+6. If you view Rygel's log output with::
+
+       journalctl --user -feu rygel
+
+   You should see a log statement similar to::
+
+       New plugin "org.mpris.MediaPlayer2.mopidy" available
+
+6. If everything went well, you should now be able to control Mopidy from a
+   device on your local network that can control an UPnP/DLNA MediaRenderer,
+   for example the Android app BubbleUPnP.
+
+Alternatively, `upmpdcli combined with Mopidy-MPD`_ serves the same purpose as
+this setup.
+
+.. _upmpdcli combined with Mopidy-MPD: https://docs.mopidy.com/en/latest/clients/upnp/
+
+
+Development tips
+================
+
+Mopidy-MPRIS has an extensive test suite, so the first step for all changes
+or additions is to add a test exercising the new code. However, making the
+tests pass doesn't ensure that what comes out on the D-Bus bus is correct. To
+introspect this through the bus, there's a couple of useful tools.
+
+
+Browsing the MPRIS API with D-Feet
+----------------------------------
+
+D-Feet is a graphical D-Bus browser. On Debian/Ubuntu systems it can be
+installed by running::
+
+    sudo apt install d-feet
+
+Then run the ``d-feet`` command. In the D-Feet window, select the tab
+corresponding to the bus you run Mopidy-MPRIS on, usually the session bus.
+Then search for "MediaPlayer2" to find all available MPRIS interfaces.
+
+To get the current value of a property, double-click it. To execute a method,
+double-click it, provide any required arguments, and click "Execute".
+
+For more information on D-Feet, see the `GNOME wiki
+<https://wiki.gnome.org/Apps/DFeet>`_.
+
+
+Testing the MPRIS API with pydbus
+---------------------------------
+
+To use the MPRIS API directly, start Mopidy, and then run the following in a
+Python shell to use ``pydbus`` as an MPRIS client::
+
+    >>> import pydbus
+    >>> bus = pydbus.SessionBus()
+    >>> player = bus.get('org.mpris.MediaPlayer2.mopidy', '/org/mpris/MediaPlayer2')
+
+Now you can control Mopidy through the player object. To get properties from
+Mopidy, run for example::
+
+    >>> player.PlaybackStatus
+    'Playing'
+    >>> player.Metadata
+    {'mpris:artUrl': 'https://i.scdn.co/image/8eb49b41eeb45c1cf53e1ddfea7973d9ca257777',
+     'mpris:length': 342000000,
+     'mpris:trackid': '/com/mopidy/track/36',
+     'xesam:album': '65/Milo',
+     'xesam:albumArtist': ['Kiasmos'],
+     'xesam:artist': ['Rival Consoles'],
+     'xesam:discNumber': 1,
+     'xesam:title': 'Arp',
+     'xesam:trackNumber': 5,
+     'xesam:url': 'spotify:track:7CoxEEsqo3XdvUsScRV4WD'}
+    >>>
+
+To pause Mopidy's playback through D-Bus, run::
+
+    >>> player.Pause()
+    >>>
+
+For details on the API, please refer to the `MPRIS specification
+<https://specifications.freedesktop.org/mpris-spec/latest/>`__.
+
+
+Project resources
+=================
+
+- `Source code <https://github.com/mopidy/mopidy-mpris>`_
+- `Issue tracker <https://github.com/mopidy/mopidy-mpris/issues>`_
+- `Changelog <https://github.com/mopidy/mopidy-mpris/releases>`_
+
+
+Credits
+=======
+
+- Original author: `Stein Magnus Jodal <https://github.com/jodal>`__
+- Current maintainer: None. Maintainer wanted, see section above.
+- `Contributors <https://github.com/mopidy/mopidy-mpris/graphs/contributors>`_
diff --git a/README.rst b/README.rst
index 37f37dd..d5dae01 100644
--- a/README.rst
+++ b/README.rst
@@ -6,9 +6,9 @@ Mopidy-MPRIS
     :target: https://pypi.org/project/Mopidy-MPRIS/
     :alt: Latest PyPI version
 
-.. image:: https://img.shields.io/circleci/build/gh/mopidy/mopidy-mpris
-    :target: https://circleci.com/gh/mopidy/mopidy-mpris
-    :alt: CircleCI build status
+.. image:: https://img.shields.io/github/workflow/status/mopidy/mopidy-mpris/CI
+    :target: https://github.com/mopidy/mopidy-mpris/actions
+    :alt: CI build status
 
 .. image:: https://img.shields.io/codecov/c/gh/mopidy/mopidy-mpris
     :target: https://codecov.io/gh/mopidy/mopidy-mpris
@@ -27,6 +27,27 @@ is currently not supported.
 .. _TrackList interface: https://specifications.freedesktop.org/mpris-spec/latest/Track_List_Interface.html
 
 
+Maintainer wanted
+=================
+
+Mopidy-MPRIS is currently kept on life support by the Mopidy core developers.
+It is in need of a more dedicated maintainer.
+
+If you want to be the maintainer of Mopidy-MPRIS, please:
+
+1. Make 2-3 good pull requests improving any part of the project.
+
+2. Read and get familiar with all of the project's open issues.
+
+3. Send a pull request removing this section and adding yourself as the
+   "Current maintainer" in the "Credits" section below. In the pull request
+   description, please refer to the previous pull requests and state that
+   you've familiarized yourself with the open issues.
+
+   As a maintainer, you'll be given push access to the repo and the authority
+   to make releases to PyPI when you see fit.
+
+
 Table of contents
 =================
 
@@ -373,5 +394,5 @@ Credits
 =======
 
 - Original author: `Stein Magnus Jodal <https://github.com/jodal>`__
-- Current maintainer: `Stein Magnus Jodal <https://github.com/jodal>`__
+- Current maintainer: None. Maintainer wanted, see section above.
 - `Contributors <https://github.com/mopidy/mopidy-mpris/graphs/contributors>`_
diff --git a/debian/changelog b/debian/changelog
index 78ef81c..56ff0ff 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+mopidy-mpris (3.0.3+git20220518.2.630e0a2-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Mon, 19 Dec 2022 20:19:46 -0000
+
 mopidy-mpris (3.0.3-1) unstable; urgency=medium
 
   * New upstream release
diff --git a/pyproject.toml b/pyproject.toml
index bff16e0..7929f7e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,7 @@ requires = ["setuptools >= 30.3.0", "wheel"]
 
 
 [tool.black]
-target-version = ["py37", "py38"]
+target-version = ["py37", "py38", "py39", "py310"]
 line-length = 80
 
 
diff --git a/setup.cfg b/setup.cfg
index d234524..c0904ef 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -18,6 +18,7 @@ classifiers =
 	Programming Language :: Python :: 3.7
 	Programming Language :: Python :: 3.8
 	Programming Language :: Python :: 3.9
+	Programming Language :: Python :: 3.10
 	Topic :: Multimedia :: Sound/Audio :: Players
 
 [options]
@@ -36,18 +37,15 @@ lint =
 	black
 	check-manifest
 	flake8
+	flake8-black
 	flake8-bugbear
 	flake8-import-order
 	isort[pyproject]
-release = 
-	twine
-	wheel
 test = 
 	pytest
 	pytest-cov
 dev = 
 	%(lint)s
-	%(release)s
 	%(test)s
 
 [options.packages.find]
diff --git a/tests/dummy_audio.py b/tests/dummy_audio.py
index 90b3d29..694f9bf 100644
--- a/tests/dummy_audio.py
+++ b/tests/dummy_audio.py
@@ -27,7 +27,7 @@ class DummyAudio(pykka.ThreadingActor):
         self._tags = {}
         self._bad_uris = set()
 
-    def set_uri(self, uri, live_stream=False):
+    def set_uri(self, uri, live_stream=False, download=False):
         assert self._uri is None, "prepare change not called before set"
         self._position = 0
         self._uri = uri
diff --git a/tox.ini b/tox.ini
index 6d655cc..1dd60a5 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist = py37, py38, py39, black, check-manifest, flake8
+envlist = py37, py38, py39, py310, check-manifest, flake8
 
 [testenv]
 sitepackages = true
@@ -10,10 +10,6 @@ commands =
         --cov=mopidy_mpris --cov-report=term-missing \
         {posargs}
 
-[testenv:black]
-deps = .[lint]
-commands = python -m black --check .
-
 [testenv:check-manifest]
 deps = .[lint]
 commands = python -m check_manifest

Debdiff

File lists identical (after any substitutions)

No differences were encountered in the control files

More details

Full run details