Fix #1026: Sort local playlists by name.

This commit is contained in:
Thomas Kemmer 2015-03-07 22:42:22 +01:00
parent 733732405f
commit 94c418d5e6
2 changed files with 30 additions and 2 deletions

View File

@ -2,6 +2,7 @@ from __future__ import absolute_import, division, unicode_literals
import glob import glob
import logging import logging
import operator
import os import os
import sys import sys
@ -29,6 +30,7 @@ class LocalPlaylistsProvider(backend.PlaylistsProvider):
self._playlists[index] = playlist self._playlists[index] = playlist
else: else:
self._playlists.append(playlist) self._playlists.append(playlist)
self._playlists.sort(key=operator.attrgetter('name'))
logger.info('Created playlist %s', playlist.uri) logger.info('Created playlist %s', playlist.uri)
return playlist return playlist
@ -45,7 +47,8 @@ class LocalPlaylistsProvider(backend.PlaylistsProvider):
self._playlists.remove(playlist) self._playlists.remove(playlist)
def lookup(self, uri): def lookup(self, uri):
# TODO: store as {uri: playlist}? # TODO: store as {uri: playlist} when get_playlists() gets
# implemented
for playlist in self._playlists: for playlist in self._playlists:
if playlist.uri == uri: if playlist.uri == uri:
return playlist return playlist
@ -66,7 +69,7 @@ class LocalPlaylistsProvider(backend.PlaylistsProvider):
playlist = Playlist(uri=uri, name=name, tracks=tracks) playlist = Playlist(uri=uri, name=name, tracks=tracks)
playlists.append(playlist) playlists.append(playlist)
self.playlists = playlists self.playlists = sorted(playlists, key=operator.attrgetter('name'))
logger.info( logger.info(
'Loaded %d local playlists from %s', 'Loaded %d local playlists from %s',
@ -95,6 +98,7 @@ class LocalPlaylistsProvider(backend.PlaylistsProvider):
self._playlists[index] = playlist self._playlists[index] = playlist
else: else:
self._playlists.append(playlist) self._playlists.append(playlist)
self._playlists.sort(key=operator.attrgetter('name'))
return playlist return playlist
def _write_m3u_extinf(self, file_handle, track): def _write_m3u_extinf(self, file_handle, track):

View File

@ -267,3 +267,27 @@ class LocalPlaylistsProviderTest(unittest.TestCase):
playlist.name, backend.playlists.playlists[0].name) playlist.name, backend.playlists.playlists[0].name)
self.assertEqual( self.assertEqual(
track.uri, backend.playlists.playlists[0].tracks[0].uri) track.uri, backend.playlists.playlists[0].tracks[0].uri)
def test_playlist_sort_order(self):
def check_order(playlists, names):
self.assertEqual(names, [playlist.name for playlist in playlists])
self.core.playlists.create('c')
self.core.playlists.create('a')
self.core.playlists.create('b')
check_order(self.core.playlists.playlists, ['a', 'b', 'c'])
self.core.playlists.refresh()
check_order(self.core.playlists.playlists, ['a', 'b', 'c'])
playlist = self.core.playlists.lookup('local:playlist:a.m3u')
playlist = playlist.copy(name='d')
playlist = self.core.playlists.save(playlist)
check_order(self.core.playlists.playlists, ['b', 'c', 'd'])
self.core.playlists.delete('local:playlist:c.m3u')
check_order(self.core.playlists.playlists, ['b', 'd'])