github mopidy/mopidy v0.18.0

latest releases: v4.0.0a1, v3.4.2, v3.4.1...
9 years ago

The focus of 0.18 have been on two fronts: the local library and browsing.

First, the local library’s old tag cache file used for storing the track metadata scanned from your music collection has been replaced with a far simpler implementation using JSON as the storage format. At the same time, the local library have been made replaceable by extensions, so you can now create extensions that use your favorite database to store the metadata.

Second, we’ve finally implemented the long awaited “file system” browsing feature that you know from MPD. It is supported by both the MPD frontend and the local and Spotify backends. It is also used by the new Mopidy-Dirble extension to provide you with a directory of Internet radio stations from all over the world.

Since the release of 0.17, we’ve closed or merged 49 issues and pull requests through about 285 commits by 11 people, including six new guys. Thanks to everyone that has contributed!

Core API

  • Add mopidy.core.Core.version() for HTTP clients to manage compatibility between API versions. (Fixes: #597)
  • Add mopidy.models.Ref class for use as a lightweight reference to other model types, containing just an URI, a name, and an object type. It is barely used for now, but its use will be extended over time.
  • Add mopidy.core.LibraryController.browse() method for browsing a virtual file system of tracks. Backends can implement support for this by implementing mopidy.backend.LibraryProvider.browse().
  • Events emitted on play/stop, pause/resume, next/previous and on end of track has been cleaned up to work consistently. See the message of commit 1d10875 for the full details. (Fixes: #629)

Backend API

  • Move the backend API classes from mopidy.backends.base to mopidy.backend and remove the Base prefix from the class names:
    • From mopidy.backends.base.Backend to mopidy.backend.Backend
    • From mopidy.backends.base.BaseLibraryProvider to mopidy.backend.LibraryProvider
    • From mopidy.backends.base.BasePlaybackProvider to mopidy.backend.PlaybackProvider
    • From mopidy.backends.base.BasePlaylistsProvider to mopidy.backend.PlaylistsProvider
    • From mopidy.backends.listener.BackendListener to mopidy.backend.BackendListener
    • Imports from the old locations still works, but are deprecated.
  • Add mopidy.backend.LibraryProvider.browse(), which can be implemented by backends that wants to expose directories of tracks in Mopidy’s virtual file system.

Frontend API

  • The dummy backend used for testing many frontends have moved from mopidy.backends.dummy to mopidy.backend.dummy.

Commands

  • Reduce amount of logging from dependencies when using mopidy -v. (Fixes: #593)
  • Add support for additional logging verbosity levels with mopidy -vv and mopidy -vvv which increases the amount of logging from dependencies. (Fixes: #593)

Configuration

  • The default for the mopidy --config option has been updated to include $XDG_CONFIG_DIRS in addition to $XDG_CONFIG_DIR. (Fixes #431)
  • Added support for deprecating config values in order to allow for graceful removal of the no longer used config value local/tag_cache_file.

Extension support

  • Switched to using a registry model for classes provided by extension. This allows extensions to be extended by other extensions, as needed by for example pluggable libraries for the local backend. See mopidy.ext.Registry for details. (Fixes #601)
  • Added the new method mopidy.ext.Extension.setup(). This method replaces the now deprecated get_backend_classes(), get_frontend_classes(), and register_gstreamer_elements().

Audio

  • Added audio/mixer_volume to set the initial volume of mixers. This is especially useful for setting the software mixer volume to something else than the default 100%. (Fixes: #633)

Local backend

Note: After upgrading to Mopidy 0.18 you must run mopidy local scan to reindex your local music collection. This is due to the change of storage format.

  • Added support for browsing local directories in Mopidy’s virtual file system.
  • Finished the work on creating pluggable libraries. Users can now reconfigure Mopidy to use alternate library providers of their choosing for local files. (Fixes issue #44, partially resolves #397, and causes a temporary regression of #527.)
  • Switched default local library provider from a “tag cache” file that closely resembled the one used by the original MPD server to a compressed JSON file. This greatly simplifies our library code and reuses our existing model serialization code, as used by the HTTP API and web clients.
  • Removed our outdated and bug-ridden “tag cache” local library implementation.
  • Added the config value local/library to select which library to use. It defaults to json, which is the only local library bundled with Mopidy.
  • Added the config value local/data_dir to have a common config for where to store local library data. This is intended to avoid every single local library provider having to have it’s own config value for this.
  • Added the config value local/scan_flush_threshold to control how often to tell local libraries to store changes when scanning local music.

Streaming backend

  • Add live lookup of URI metadata. (Fixes #540)
  • Add support for extended M3U playlist, meaning that basic track metadata stored in playlists will be used by Mopidy.

HTTP frontend

  • Upgrade Mopidy.js dependencies and add support for using Mopidy.js with Browserify. This version has been released to npm as Mopidy.js v0.2.0. (Fixes: #609)

MPD frontend

  • Make the lsinfo, listall, and listallinfo commands support browsing of Mopidy’s virtual file system. (Fixes: #145)
  • Empty commands now return a ACK [5@0] {} No command given error instead of OK. This is consistent with the original MPD server implementation.

Internal changes

  • Events from the audio actor, backends, and core actor are now emitted asyncronously through the GObject event loop. This should resolve the issue that has blocked the merge of the EOT-vs-EOS fix for a long time.

Don't miss a new mopidy release

NewReleases is sending notifications on new releases.