Skip to content

Commit

Permalink
Release v0.16.0
Browse files Browse the repository at this point in the history
  • Loading branch information
jodal committed Oct 27, 2013
2 parents ba361ad + 40674ae commit 1ff9ce4
Show file tree
Hide file tree
Showing 96 changed files with 3,673 additions and 5,275 deletions.
5 changes: 5 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[report]
omit =
*/pyshared/*
*/python?.?/*
*/site-packages/nose/*
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ docs/_build/
mopidy.log*
node_modules/
nosetests.xml
*~
*.orig
2 changes: 2 additions & 0 deletions .mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,5 @@ John Bäckstrand <sopues@gmail.com> <sandos@XBMCLive.(none)>
Alli Witheford <alzeih@gmail.com>
Alexandre Petitjean <alpetitjean@gmail.com>
Alexandre Petitjean <alpetitjean@gmail.com> <alexandre.petitjean@lne.fr>
Javier Domingo Cansino <javier.domingo@fon.com> <javierdo1@gmail.com>
Lasse Bigum <lasse@bigum.org> <l.bigum@samsung.com>
7 changes: 5 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,17 @@ install:
- "sudo wget -O /etc/apt/sources.list.d/mopidy.list http://apt.mopidy.com/mopidy.list"
- "sudo apt-get update || true"
- "sudo apt-get install $(apt-cache depends mopidy | awk '$2 !~ /mopidy/ {print $2}')"
- "pip install flake8"
- "pip install coveralls flake8"

before_script:
- "rm $VIRTUAL_ENV/lib/python$TRAVIS_PYTHON_VERSION/no-global-site-packages.txt"

script:
- "flake8 $(find . -iname '*.py')"
- "nosetests"
- "nosetests --with-coverage --cover-package=mopidy"

after_success:
- "coveralls"

notifications:
irc:
Expand Down
3 changes: 3 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,7 @@
- Tobias Sauerwein <cgtobi@gmail.com>
- Alli Witheford <alzeih@gmail.com>
- Alexandre Petitjean <alpetitjean@gmail.com>
- Terje Larsen <terlar@gmail.com>
- Javier Domingo Cansino <javier.domingo@fon.com>
- Pavol Babincak <scroolik@gmail.com>
- Lasse Bigum <lasse@bigum.org>
2 changes: 0 additions & 2 deletions MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ include *.rst
include LICENSE
include MANIFEST.in
include data/mopidy.desktop
include mopidy/backends/spotify/spotify_appkey.key
include pylintrc

recursive-include docs *
prune docs/_build
Expand Down
13 changes: 13 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,18 @@ To get started with Mopidy, check out `the docs <http://docs.mopidy.com/>`_.
- Mailing list: `mopidy@googlegroups.com <https://groups.google.com/forum/?fromgroups=#!forum/mopidy>`_
- Twitter: `@mopidy <https://twitter.com/mopidy/>`_

.. image:: https://pypip.in/v/Mopidy/badge.png
:target: https://crate.io/packages/Mopidy/
:alt: Latest PyPI version

.. image:: https://pypip.in/d/Mopidy/badge.png
:target: https://crate.io/packages/Mopidy/
:alt: Number of PyPI downloads

.. image:: https://travis-ci.org/mopidy/mopidy.png?branch=develop
:target: https://travis-ci.org/mopidy/mopidy
:alt: Travis CI build status

.. image:: https://coveralls.io/repos/mopidy/mopidy/badge.png?branch=develop
:target: https://coveralls.io/r/mopidy/mopidy?branch=develop
:alt: Test coverage
1 change: 0 additions & 1 deletion docs/api/backends.rst
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,4 @@ Backend implementations

* :mod:`mopidy.backends.dummy`
* :mod:`mopidy.backends.local`
* :mod:`mopidy.backends.spotify`
* :mod:`mopidy.backends.stream`
2 changes: 0 additions & 2 deletions docs/api/frontends.rst
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,3 @@ Frontend implementations

* :mod:`mopidy.frontends.http`
* :mod:`mopidy.frontends.mpd`
* :mod:`mopidy.frontends.mpris`
* :mod:`mopidy.frontends.scrobbler`
153 changes: 153 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,159 @@ Changelog

This changelog is used to track all major changes to Mopidy.

v0.16.0 (2013-10-27)
====================

The goals for 0.16 were to add support for queuing playlists of e.g. radio
streams directly to Mopidy, without manually extracting the stream URLs from
the playlist first, and to move the Spotify, Last.fm, and MPRIS support out to
independent Mopidy extensions, living outside the main Mopidy repo. In
addition, we've seen some cleanup to the playback vs tracklist part of the core
API, which will require some changes for users of the HTTP/JavaScript APIs, as
well as the addition of audio muting to the core API. To speed up the
:ref:`development of new extensions <extensiondev>`, we've added a cookiecutter
project to get the skeleton of a Mopidy extension up and running in a matter of
minutes. Read below for all the details and for links to issues with even more
details.

Since the release of 0.15, we've closed or merged 31 issues and pull requests
through about 200 commits by :ref:`five people <authors>`, including three new
contributors.

**Dependencies**

Parts of Mopidy have been moved to their own external extensions. If you want
Mopidy to continue to work like it used to, you may have to install one or more
of the following extensions as well:

- The Spotify backend has been moved to
`Mopidy-Spotify <https://github.com/mopidy/mopidy-spotify>`_.

- The Last.fm scrobbler has been moved to
`Mopidy-Scrobbler <https://github.com/mopidy/mopidy-scrobbler>`_.

- The MPRIS frontend has been moved to
`Mopidy-MPRIS <https://github.com/mopidy/mopidy-mpris>`_.

**Core**

- Parts of the functionality in :class:`mopidy.core.PlaybackController` have
been moved to :class:`mopidy.core.TracklistController`:

=================================== ==================================
Old location New location
=================================== ==================================
playback.get_consume() tracklist.get_consume()
playback.set_consume(v) tracklist.set_consume(v)
playback.consume tracklist.consume

playback.get_random() tracklist.get_random()
playback.set_random(v) tracklist.set_random(v)
playback.random tracklist.random

playback.get_repeat() tracklist.get_repeat()
playback.set_repeat(v) tracklist.set_repeat(v)
playback.repeat tracklist.repeat

playback.get_single() tracklist.get_single()
playback.set_single(v) tracklist.set_single(v)
playback.single tracklist.single

playback.get_tracklist_position() tracklist.index(tl_track)
playback.tracklist_position tracklist.index(tl_track)

playback.get_tl_track_at_eot() tracklist.eot_track(tl_track)
playback.tl_track_at_eot tracklist.eot_track(tl_track)

playback.get_tl_track_at_next() tracklist.next_track(tl_track)
playback.tl_track_at_next tracklist.next_track(tl_track)

playback.get_tl_track_at_previous() tracklist.previous_track(tl_track)
playback.tl_track_at_previous tracklist.previous_track(tl_track)
=================================== ==================================

The ``tl_track`` argument to the last four new functions are used as the
reference ``tl_track`` in the tracklist to find e.g. the next track. Usually,
this will be :attr:`~mopidy.core.PlaybackController.current_tl_track`.

- Added :attr:`mopidy.core.PlaybackController.mute` for muting and unmuting
audio. (Fixes: :issue:`186`)

- Added :meth:`mopidy.core.CoreListener.mute_changed` event that is triggered
when the mute state changes.

- In "random" mode, after a full playthrough of the tracklist, playback
continued from the last track played to the end of the playlist in non-random
order. It now stops when all tracks have been played once, unless "repeat"
mode is enabled. (Fixes: :issue:`453`)

- In "single" mode, after a track ended, playback continued with the next track
in the tracklist. It now stops after playing a single track, unless "repeat"
mode is enabled. (Fixes: :issue:`496`)

**Audio**

- Added support for parsing and playback of playlists in GStreamer. For end
users this basically means that you can now add a radio playlist to Mopidy
and we will automatically download it and play the stream inside it.
Currently we support M3U, PLS, XSPF and ASX files. Also note that we can
currently only play the first stream in the playlist.

- We now handle the rare case where an audio track has max volume equal to min.
This was causing divide by zero errors when scaling volumes to a zero to
hundred scale. (Fixes: :issue:`525`)

- Added support for muting audio without setting the volume to 0. This works
both for the software and hardware mixers. (Fixes: :issue:`186`)

**Local backend**

- Replaced our custom media library scanner with GStreamer's builtin scanner.
This should make scanning less error prone and faster as timeouts should be
infrequent. (Fixes: :issue:`198`)

- Media files with less than 100ms duration are now excluded from the library.

- Media files with the file extensions ``.jpeg``, ``.jpg``, ``.png``, ``.txt``,
and ``.log`` are now skipped by the media library scanner. You can change the
list of excluded file extensions by setting the
:confval:`local/excluded_file_extensions` config value. (Fixes: :issue:`516`)

- Unknown URIs found in playlists are now made into track objects with the URI
set instead of being ignored. This makes it possible to have playlists with
e.g. HTTP radio streams and not just ``local:track:...`` URIs. This used to
work, but was broken in Mopidy 0.15.0. (Fixes: :issue:`527`)

- Fixed crash when playing ``local:track:...`` URIs which contained non-ASCII
chars after uridecode.

- Removed media files are now also removed from the in-memory media library
when the media library is reloaded from disk. (Fixes: :issue:`500`)

**MPD frontend**

- Made the formerly unused commands ``outputs``, ``enableoutput``, and
``disableoutput`` mute/unmute audio. (Related to: :issue:`186`)

- The MPD command ``list`` now works with ``"albumartist"`` as its second
argument, e.g. ``list "album" "albumartist" "anartist"``. (Fixes:
:issue:`468`)

- The MPD commands ``find`` and ``search`` now accepts ``albumartist`` and
``track`` (this is the track number, not the track name) as field types to
limit the search result with.

- The MPD command ``count`` is now implemented. It accepts the same type of
arguments as ``find`` and ``search``, but returns the number of tracks and
their total playtime instead.

**Extension support**

- A cookiecutter project for quickly creating new Mopidy extensions have been
created. You can find it at `cookiecutter-mopidy-ext
<https://github.com/mopidy/cookiecutter-mopidy-ext>`_. (Fixes: :issue:`522`)


v0.15.0 (2013-09-19)
====================

Expand Down
3 changes: 2 additions & 1 deletion docs/clients/mpris.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ MPRIS clients
Specification. It's a spec that describes a standard D-Bus interface for making
media players available to other applications on the same system.

Mopidy's :ref:`MPRIS frontend <ext-mpris>` currently implements all required
The MPRIS frontend provided by the `Mopidy-MPRIS extension
<https://github.com/mopidy/mopidy-mpris>`_ currently implements all required
parts of the MPRIS spec, plus the optional playlist interface. It does not
implement the optional tracklist interface.

Expand Down
28 changes: 15 additions & 13 deletions docs/clients/upnp.rst
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,21 @@ How to make Mopidy available as an UPnP MediaRenderer
=====================================================

With the help of `the Rygel project <https://live.gnome.org/Rygel>`_ Mopidy can
be made available as an UPnP MediaRenderer. Rygel will interface with Mopidy's
:ref:`MPRIS frontend <ext-mpris>`, and make Mopidy available as a MediaRenderer
on the local network. Since this depends on the MPRIS frontend, which again
depends on D-Bus being available, this will only work on Linux, and not OS X.
MPRIS/D-Bus is only available to other applications on the same host, so Rygel
must be running on the same machine as Mopidy.

1. Start Mopidy and make sure the :ref:`MPRIS frontend <ext-mpris>` is working.
It is activated by default, but you may miss dependencies or be using OS X,
in which case it will not work. Check the console output when Mopidy is
started for any errors related to the MPRIS frontend. If you're unsure it is
working, there are instructions for how to test it on the :ref:`MPRIS
frontend <ext-mpris>` page.
be made available as an UPnP MediaRenderer. Rygel will interface with the MPRIS
interface provided by the `Mopidy-MPRIS extension
<https://github.com/mopidy/mopidy-mpris>`_, and make Mopidy available as a
MediaRenderer on the local network. Since this depends on the MPRIS frontend,
which again depends on D-Bus being available, this will only work on Linux, and
not OS X. MPRIS/D-Bus is only available to other applications on the same
host, so Rygel must be running on the same machine as Mopidy.

1. Start Mopidy and make sure the MPRIS frontend is working. It is activated
by default when the Mopidy-MPRIS extension is installed, but you may miss
dependencies or be using OS X, in which case it will not work. Check the
console output when Mopidy is started for any errors related to the MPRIS
frontend. If you're unsure it is working, there are instructions for how to
test it on in the `Mopidy-MPRIS readme
<https://github.com/mopidy/mopidy-mpris>`_.

2. Install Rygel. On Debian/Ubuntu::

Expand Down
5 changes: 5 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ def __getattr__(self, name):
elif (name[0] == name[0].upper()
# gst.interfaces.MIXER_TRACK_*
and not name.startswith('MIXER_TRACK_')
# gst.PadTemplate
and not name.startswith('PadTemplate')
# dbus.String()
and not name == 'String'):
return type(name, (), {})
Expand Down Expand Up @@ -76,6 +78,9 @@ def __getattr__(self, name):
# the string True.
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'

# Enable Read the Docs' new theme
RTD_NEW_THEME = True

# -- General configuration ----------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
Expand Down
25 changes: 7 additions & 18 deletions docs/config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -147,24 +147,6 @@ Core configuration values
.. _the Python logging docs: http://docs.python.org/2/library/logging.config.html


Extension configuration
=======================

Mopidy's extensions have their own config values that you may want to tweak.
For the available config values, please refer to the docs for each extension.
Most, if not all, can be found at :ref:`ext`.

Mopidy extensions are enabled by default when they are installed. If you want
to disable an extension without uninstalling it, all extensions support the
``enabled`` config value even if it isn't explicitly documented by all
extensions. If the ``enabled`` config value is set to ``false`` the extension
will not be started. For example, to disable the Spotify extension, add the
following to your ``mopidy.conf``::

[spotify]
enabled = false


Extension configuration
=======================

Expand Down Expand Up @@ -227,6 +209,13 @@ this work first::
Streaming through SHOUTcast/Icecast
-----------------------------------

.. warning:: Known issue

Currently, Mopidy does not handle end-of-track vs end-of-stream signalling
in GStreamer correctly. This causes the SHOUTcast stream to be disconnected
at the end of each track, rendering it quite useless. For further details,
see :issue:`492`.

If you want to play the audio on another computer than the one running Mopidy,
you can stream the audio from Mopidy through an SHOUTcast or Icecast audio
streaming server. Multiple media players can then be connected to the streaming
Expand Down

0 comments on commit 1ff9ce4

Please sign in to comment.