forked from openlp/openlp
Sort media items by natural order
Fixes: https://launchpad.net/bugs/1625087
This commit is contained in:
parent
4f769d5622
commit
4e9fcf2e50
@ -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):
|
||||
"""
|
||||
|
@ -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,
|
||||
|
@ -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:
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user