<commit_before>*********
Changelog
*********

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

v0.18.0 (UNRELEASED)
====================

**MPD frontend**

- Empty commands now return a ``ACK [5@0] {} No command given`` error instead
  of ``OK``. This is consistent with the original MPD server implementation.

**Core API**

- Expose :meth:`mopidy.core.Core.version` for HTTP clients to manage
  compatibility between API versions. (Fixes: :issue:`597`)

- Add :class:`mopidy.models.Ref` class for use as a lightweight reference to
  other model types, containing just an URI, a name, and an object type.

**Extension registry**

- Switched to using a registry model for classes provided by extension. This
  allows extensions to be extended as needed for plugable local libraries.
  (Fixes :issue:`601`)

**Pluggable local libraries**

Fixes issues :issue:`44`, partially resolves :issue:`397`, and causes
a temporary regression of :issue:`527`.

- Finished the work on creating pluggable libraries. Users can now
  reconfigure Mopidy to use alternate library providers of their choosing
  for local files.

- Switched default local library provider from "tag cache" to JSON. This
  greatly simplifies our library code and reuses our existing serialization
  code.

- Killed our outdated and bug-ridden "tag cache" implementation.

- Added support for deprecated config values in order to allow for
  graceful removal of :confval:`local/tag_cache_file`.

- Added :confval:`local/library` to select which library to use.

- Added :confval:`local/data_dir` to have a common setting for where to store
  local library data. This is intended to avoid every single local library
  provider having to have it's own setting for this.

- Added :confval:`local/scan_flush_threshold` to control how often to tell
  local libraries to store changes.

**Streaming backend**

- Live lookup of URI metadata has been added. (Fixes :issue:`540`)

- Support for extended M3U added, meaning that basic track metadata stored in
  playlists will be provided for playlist tracks.

**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: :issue:`609`)

**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.

**Config file loading**
<commit_msg>docs: Update changelog with library browsing<commit_after>*********
Changelog
*********

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

v0.18.0 (UNRELEASED)
====================

**MPD frontend**

- Empty commands now return a ``ACK [5@0] {} No command given`` error instead
  of ``OK``. This is consistent with the original MPD server implementation.

**Core API**

- Expose :meth:`mopidy.core.Core.version` for HTTP clients to manage
  compatibility between API versions. (Fixes: :issue:`597`)

- Add :class:`mopidy.models.Ref` class for use as a lightweight reference to
  other model types, containing just an URI, a name, and an object type.

- Add :meth:`mopidy.core.LibraryController.browse` method for browsing a
  virtual file system of tracks. Backends can implement support for this by
  implementing :meth:`mopidy.backends.base.BaseLibraryController.browse`.

**Extension registry**

- Switched to using a registry model for classes provided by extension. This
  allows extensions to be extended as needed for plugable local libraries.
  (Fixes :issue:`601`)

**Pluggable local libraries**

Fixes issues :issue:`44`, partially resolves :issue:`397`, and causes
a temporary regression of :issue:`527`.

- Finished the work on creating pluggable libraries. Users can now
  reconfigure Mopidy to use alternate library providers of their choosing
  for local files.

- Switched default local library provider from "tag cache" to JSON. This
  greatly simplifies our library code and reuses our existing serialization
  code.

- Killed our outdated and bug-ridden "tag cache" implementation.

- Added support for deprecated config values in order to allow for
  graceful removal of :confval:`local/tag_cache_file`.

- Added :confval:`local/library` to select which library to use.

- Added :confval:`local/data_dir` to have a common setting for where to store
  local library data. This is intended to avoid every single local library
  provider having to have it's own setting for this.

- Added :confval:`local/scan_flush_threshold` to control how often to tell
  local libraries to store changes.

**Streaming backend**

- Live lookup of URI metadata has been added. (Fixes :issue:`540`)

- Support for extended M3U added, meaning that basic track metadata stored in
  playlists will be provided for playlist tracks.

**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: :issue:`609`)

**MPD frontend**

- Make the ``lsinfo`` command support browsing of Mopidy's virtual file
  system. Note that the related ``listall`` and ``listallinfo`` commands are
  still not implemented. Also note that this adds very little until e.g. the
  local backend is extended with support for library browsing.

**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.

**Config file loading**

{'fraction_non_alphanumeric': 0.08567888121791467, 'fraction_numerical': 0.010621348911311737, 'mean_word_length': 4.355450236966824, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5959380', 'n_tokens_mistral': 1597, 'n_tokens_neox': 1539, 'n_words': 747}