Merge branch 'v1.0.x' into develop

Conflicts:
	docs/changelog.rst
	mopidy/mpd/translator.py
	tests/core/test_library.py
This commit is contained in:
Stein Magnus Jodal 2015-07-21 18:36:13 +02:00
commit 073d368c82
5 changed files with 53 additions and 4 deletions

View File

@ -120,6 +120,19 @@ Internal changes
:issue:`1115`)
v1.0.8 (UNRELEASED)
===================
Bug fix release.
- Fix reversal of ``Title`` and ``Name`` in MPD protocol (Fixes: :issue:`1212`
PR: :issue:`1214`)
- Fix crash if an M3U file in the :confval:`m3u/playlist_dir` directory has a
file name not decodable with the current file system encoding. (Fixes:
:issue:`1209`)
v1.0.7 (2015-06-26)
===================

View File

@ -29,6 +29,14 @@ Extension for controlling volume using an external Arcam amplifier. Developed
and tested with an Arcam AVR-300.
Mopidy-dam1021
==============
https://github.com/fortaa/mopidy-dam1021
Extension for controlling volume using a dam1021 DAC device.
Mopidy-NAD
==========

View File

@ -48,6 +48,22 @@ To install, run::
pip install Mopidy-Local-Images
Mopidy-Material-Webclient
=========================
https://github.com/matgallacher/mopidy-material-webclient
A Mopidy web client with an Android Material design feel.
.. image:: /ext/material_webclient.png
:width: 960
:height: 520
To install, run::
pip install Mopidy-Material-Webclient
Mopidy-Mobile
=============

View File

@ -67,7 +67,7 @@ class M3UPlaylistsProvider(backend.PlaylistsProvider):
for path in glob.glob(os.path.join(self._playlists_dir, b'*.m3u')):
relpath = os.path.basename(path)
uri = translator.path_to_playlist_uri(relpath)
name = os.path.splitext(relpath)[0].decode(encoding)
name = os.path.splitext(relpath)[0].decode(encoding, 'replace')
tracks = translator.parse_m3u(path)
playlists[uri] = Playlist(uri=uri, name=name, tracks=tracks)

View File

@ -1,9 +1,12 @@
# encoding: utf-8
from __future__ import absolute_import, unicode_literals
import os
import shutil
import tempfile
import unittest
import urllib
import pykka
@ -109,6 +112,7 @@ class M3UPlaylistsProviderTest(unittest.TestCase):
with open(path) as f:
m3u = f.read().splitlines()
self.assertEqual(['#EXTM3U', '#EXTINF:60,Test', track.uri], m3u)
def test_latin1_playlist_contents_is_written_to_disk(self):
@ -143,9 +147,17 @@ class M3UPlaylistsProviderTest(unittest.TestCase):
self.assertEqual(playlist.name, result.name)
self.assertEqual(track.uri, result.tracks[0].uri)
@unittest.SkipTest
def test_santitising_of_playlist_filenames(self):
pass
def test_load_playlist_with_nonfilesystem_encoding_of_filename(self):
uri = 'm3u:%s.m3u' % urllib.quote('øæå'.encode('latin-1'))
path = playlist_uri_to_path(uri, self.playlists_dir)
with open(path, 'wb+') as f:
f.write(b'#EXTM3U\n')
self.core.playlists.refresh()
self.assertEqual(len(self.core.playlists.as_list()), 1)
result = self.core.playlists.lookup(uri)
self.assertEqual('\ufffd\ufffd\ufffd', result.name)
@unittest.SkipTest
def test_playlists_dir_is_created(self):