Sort media items by natural order

Fixes: https://launchpad.net/bugs/1625087
This commit is contained in:
Phill Ridout 2017-11-13 21:40:49 +00:00
parent 4f769d5622
commit 4e9fcf2e50
4 changed files with 14 additions and 14 deletions

View File

@ -26,7 +26,7 @@ the Custom plugin
from sqlalchemy import Column, Table, types
from sqlalchemy.orm import mapper
from openlp.core.common.i18n import get_locale_key
from openlp.core.common.i18n import get_natural_key
from openlp.core.lib.db import BaseModel, init_db
@ -36,10 +36,10 @@ class CustomSlide(BaseModel):
"""
# By default sort the customs by its title considering language specific characters.
def __lt__(self, other):
return get_locale_key(self.title) < get_locale_key(other.title)
return get_natural_key(self.title) < get_natural_key(other.title)
def __eq__(self, other):
return get_locale_key(self.title) == get_locale_key(other.title)
return get_natural_key(self.title) == get_natural_key(other.title)
def __hash__(self):
"""

View File

@ -26,7 +26,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
from openlp.core.common import delete_file, get_images_filter
from openlp.core.common.applocation import AppLocation
from openlp.core.common.i18n import UiStrings, translate, get_locale_key
from openlp.core.common.i18n import UiStrings, translate, get_natural_key
from openlp.core.common.path import Path, create_paths
from openlp.core.common.registry import Registry
from openlp.core.common.settings import Settings
@ -271,7 +271,7 @@ class ImageMediaItem(MediaManagerItem):
:param parent_group_id: The ID of the group that will be added recursively.
"""
image_groups = self.manager.get_all_objects(ImageGroups, ImageGroups.parent_id == parent_group_id)
image_groups.sort(key=lambda group_object: get_locale_key(group_object.group_name))
image_groups.sort(key=lambda group_object: get_natural_key(group_object.group_name))
folder_icon = build_icon(':/images/image_group.png')
for image_group in image_groups:
group = QtWidgets.QTreeWidgetItem()
@ -298,7 +298,7 @@ class ImageMediaItem(MediaManagerItem):
combobox.clear()
combobox.top_level_group_added = False
image_groups = self.manager.get_all_objects(ImageGroups, ImageGroups.parent_id == parent_group_id)
image_groups.sort(key=lambda group_object: get_locale_key(group_object.group_name))
image_groups.sort(key=lambda group_object: get_natural_key(group_object.group_name))
for image_group in image_groups:
combobox.addItem(prefix + image_group.group_name, image_group.id)
self.fill_groups_combobox(combobox, image_group.id, prefix + ' ')
@ -355,7 +355,7 @@ class ImageMediaItem(MediaManagerItem):
self.expand_group(open_group.id)
# Sort the images by its filename considering language specific.
# characters.
images.sort(key=lambda image_object: get_locale_key(image_object.file_path.name))
images.sort(key=lambda image_object: get_natural_key(image_object.file_path.name))
for image in images:
log.debug('Loading image: {name}'.format(name=image.file_path))
file_name = image.file_path.name
@ -533,9 +533,9 @@ class ImageMediaItem(MediaManagerItem):
group_items.append(item)
if isinstance(item.data(0, QtCore.Qt.UserRole), ImageFilenames):
image_items.append(item)
group_items.sort(key=lambda item: get_locale_key(item.text(0)))
group_items.sort(key=lambda item: get_natural_key(item.text(0)))
target_group.addChildren(group_items)
image_items.sort(key=lambda item: get_locale_key(item.text(0)))
image_items.sort(key=lambda item: get_natural_key(item.text(0)))
target_group.addChildren(image_items)
def generate_slide_data(self, service_item, item=None, xml_version=False, remote=False,

View File

@ -26,7 +26,7 @@ import os
from PyQt5 import QtCore, QtWidgets
from openlp.core.common.applocation import AppLocation
from openlp.core.common.i18n import UiStrings, translate, get_locale_key
from openlp.core.common.i18n import UiStrings, translate, get_natural_key
from openlp.core.common.path import Path, path_to_str, create_paths
from openlp.core.common.mixins import RegistryProperties
from openlp.core.common.registry import Registry
@ -362,7 +362,7 @@ class MediaMediaItem(MediaManagerItem, RegistryProperties):
:param media: The media
:param target_group:
"""
media.sort(key=lambda file_name: get_locale_key(os.path.split(str(file_name))[1]))
media.sort(key=lambda file_name: get_natural_key(os.path.split(str(file_name))[1]))
for track in media:
track_info = QtCore.QFileInfo(track)
item_name = None
@ -404,7 +404,7 @@ class MediaMediaItem(MediaManagerItem, RegistryProperties):
:return: The media list
"""
media_file_paths = Settings().value(self.settings_section + '/media files')
media_file_paths.sort(key=lambda file_path: get_locale_key(file_path.name))
media_file_paths.sort(key=lambda file_path: get_natural_key(file_path.name))
if media_type == MediaType.Audio:
extension = self.media_controller.audio_extensions_list
else:

View File

@ -23,7 +23,7 @@ import logging
from PyQt5 import QtCore, QtGui, QtWidgets
from openlp.core.common.i18n import UiStrings, translate, get_locale_key
from openlp.core.common.i18n import UiStrings, translate, get_natural_key
from openlp.core.common.path import Path, path_to_str, str_to_path
from openlp.core.common.registry import Registry
from openlp.core.common.settings import Settings
@ -165,7 +165,7 @@ class PresentationMediaItem(MediaManagerItem):
if not initial_load:
self.main_window.display_progress_bar(len(file_paths))
# Sort the presentations by its filename considering language specific characters.
file_paths.sort(key=lambda file_path: get_locale_key(file_path.name))
file_paths.sort(key=lambda file_path: get_natural_key(file_path.name))
for file_path in file_paths:
if not initial_load:
self.main_window.increment_progress_bar()