Discussion in mopidy PR 1595: remove sort order configuration item.
Browse/File sort order to be directories first, otherwise all items alphabetically. Final sort order to be left to clients. Change mopidy/file/library.py to sort as described. Remove changes to: 1. docs/ext/file.rst 2. mopidy/file/__init__.py 3. mopidy/file/ext.conf Thanks go to sumpfralle for providing the base code for the sort lambda and stable sort suggestion. Signed-off-by: Caysho <caysho@internode.on.net>
This commit is contained in:
parent
84992bf80e
commit
0e1e703cbe
@ -52,15 +52,3 @@ See :ref:`config` for general help on configuring Mopidy.
|
||||
the next file. Reducing the value might speed up the directory listing,
|
||||
but can lead to some tracks not being shown.
|
||||
|
||||
.. confval:: file/sort_order
|
||||
|
||||
Sort the files and directories in the given order.
|
||||
Options are:
|
||||
|
||||
``DirectoriesFirst``
|
||||
|
||||
``FilesFirst``
|
||||
|
||||
``Mixed``
|
||||
|
||||
Default is ``DirectoriesFirst``
|
||||
|
||||
@ -26,7 +26,6 @@ class Extension(ext.Extension):
|
||||
schema['show_dotfiles'] = config.Boolean(optional=True)
|
||||
schema['follow_symlinks'] = config.Boolean(optional=True)
|
||||
schema['metadata_timeout'] = config.Integer(optional=True)
|
||||
schema['sort_order'] = config.String(optional=True)
|
||||
return schema
|
||||
|
||||
def setup(self, registry):
|
||||
|
||||
@ -9,4 +9,4 @@ excluded_file_extensions =
|
||||
.jpeg
|
||||
follow_symlinks = false
|
||||
metadata_timeout = 1000
|
||||
sort_order = DirectoriesFirst
|
||||
|
||||
|
||||
@ -43,19 +43,9 @@ class FileLibraryProvider(backend.LibraryProvider):
|
||||
self._scanner = scan.Scanner(
|
||||
timeout=config['file']['metadata_timeout'])
|
||||
|
||||
self._sort_order = config['file']['sort_order']
|
||||
logger.info('File browing sort order is: %s', self._sort_order)
|
||||
|
||||
self._sort_files_first = (self._sort_order == 'FilesFirst')
|
||||
self._sort_directories_first = (self._sort_order ==
|
||||
'DirectoriesFirst')
|
||||
self._sort_mixed = (self._sort_order == 'Mixed')
|
||||
|
||||
def browse(self, uri):
|
||||
logger.debug('Browsing files at: %s', uri)
|
||||
result = []
|
||||
result_directories = []
|
||||
result_files = []
|
||||
local_path = path.uri_to_path(uri)
|
||||
|
||||
if local_path == 'root':
|
||||
@ -88,23 +78,17 @@ class FileLibraryProvider(backend.LibraryProvider):
|
||||
|
||||
name = dir_entry.decode(FS_ENCODING, 'replace')
|
||||
if os.path.isdir(child_path):
|
||||
result_directories.append(models.Ref.directory(name=name,
|
||||
uri=uri))
|
||||
result.append(models.Ref.directory(name=name, uri=uri))
|
||||
elif os.path.isfile(child_path):
|
||||
result_files.append(models.Ref.track(name=name, uri=uri))
|
||||
result.append(models.Ref.track(name=name, uri=uri))
|
||||
|
||||
if not self._sort_mixed:
|
||||
result_directories.sort(key=operator.attrgetter('name'))
|
||||
result_files.sort(key=operator.attrgetter('name'))
|
||||
sort_funcs = [operator.attrgetter('name'),
|
||||
lambda item: 0 if item.type == models.Ref.DIRECTORY
|
||||
else 1]
|
||||
logger.debug('sort_funcs %s', sort_funcs)
|
||||
|
||||
if self._sort_mixed or self._sort_directories_first:
|
||||
result = result_directories + result_files
|
||||
|
||||
if self._sort_files_first:
|
||||
result = result_files + result_directories
|
||||
|
||||
if self._sort_mixed:
|
||||
result.sort(key=operator.attrgetter('name'))
|
||||
for key_func in sort_funcs:
|
||||
result.sort(key=key_func)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user