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 import Column, Table, types
|
||||||
from sqlalchemy.orm import mapper
|
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
|
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.
|
# By default sort the customs by its title considering language specific characters.
|
||||||
def __lt__(self, other):
|
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):
|
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):
|
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 import delete_file, get_images_filter
|
||||||
from openlp.core.common.applocation import AppLocation
|
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.path import Path, create_paths
|
||||||
from openlp.core.common.registry import Registry
|
from openlp.core.common.registry import Registry
|
||||||
from openlp.core.common.settings import Settings
|
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.
|
: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 = 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')
|
folder_icon = build_icon(':/images/image_group.png')
|
||||||
for image_group in image_groups:
|
for image_group in image_groups:
|
||||||
group = QtWidgets.QTreeWidgetItem()
|
group = QtWidgets.QTreeWidgetItem()
|
||||||
@ -298,7 +298,7 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
combobox.clear()
|
combobox.clear()
|
||||||
combobox.top_level_group_added = False
|
combobox.top_level_group_added = False
|
||||||
image_groups = self.manager.get_all_objects(ImageGroups, ImageGroups.parent_id == parent_group_id)
|
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:
|
for image_group in image_groups:
|
||||||
combobox.addItem(prefix + image_group.group_name, image_group.id)
|
combobox.addItem(prefix + image_group.group_name, image_group.id)
|
||||||
self.fill_groups_combobox(combobox, image_group.id, prefix + ' ')
|
self.fill_groups_combobox(combobox, image_group.id, prefix + ' ')
|
||||||
@ -355,7 +355,7 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
self.expand_group(open_group.id)
|
self.expand_group(open_group.id)
|
||||||
# Sort the images by its filename considering language specific.
|
# Sort the images by its filename considering language specific.
|
||||||
# characters.
|
# 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:
|
for image in images:
|
||||||
log.debug('Loading image: {name}'.format(name=image.file_path))
|
log.debug('Loading image: {name}'.format(name=image.file_path))
|
||||||
file_name = image.file_path.name
|
file_name = image.file_path.name
|
||||||
@ -533,9 +533,9 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
group_items.append(item)
|
group_items.append(item)
|
||||||
if isinstance(item.data(0, QtCore.Qt.UserRole), ImageFilenames):
|
if isinstance(item.data(0, QtCore.Qt.UserRole), ImageFilenames):
|
||||||
image_items.append(item)
|
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)
|
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)
|
target_group.addChildren(image_items)
|
||||||
|
|
||||||
def generate_slide_data(self, service_item, item=None, xml_version=False, remote=False,
|
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 PyQt5 import QtCore, QtWidgets
|
||||||
|
|
||||||
from openlp.core.common.applocation import AppLocation
|
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.path import Path, path_to_str, create_paths
|
||||||
from openlp.core.common.mixins import RegistryProperties
|
from openlp.core.common.mixins import RegistryProperties
|
||||||
from openlp.core.common.registry import Registry
|
from openlp.core.common.registry import Registry
|
||||||
@ -362,7 +362,7 @@ class MediaMediaItem(MediaManagerItem, RegistryProperties):
|
|||||||
:param media: The media
|
:param media: The media
|
||||||
:param target_group:
|
: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:
|
for track in media:
|
||||||
track_info = QtCore.QFileInfo(track)
|
track_info = QtCore.QFileInfo(track)
|
||||||
item_name = None
|
item_name = None
|
||||||
@ -404,7 +404,7 @@ class MediaMediaItem(MediaManagerItem, RegistryProperties):
|
|||||||
:return: The media list
|
:return: The media list
|
||||||
"""
|
"""
|
||||||
media_file_paths = Settings().value(self.settings_section + '/media files')
|
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:
|
if media_type == MediaType.Audio:
|
||||||
extension = self.media_controller.audio_extensions_list
|
extension = self.media_controller.audio_extensions_list
|
||||||
else:
|
else:
|
||||||
|
@ -23,7 +23,7 @@ import logging
|
|||||||
|
|
||||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
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.path import Path, path_to_str, str_to_path
|
||||||
from openlp.core.common.registry import Registry
|
from openlp.core.common.registry import Registry
|
||||||
from openlp.core.common.settings import Settings
|
from openlp.core.common.settings import Settings
|
||||||
@ -165,7 +165,7 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
if not initial_load:
|
if not initial_load:
|
||||||
self.main_window.display_progress_bar(len(file_paths))
|
self.main_window.display_progress_bar(len(file_paths))
|
||||||
# Sort the presentations by its filename considering language specific characters.
|
# 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:
|
for file_path in file_paths:
|
||||||
if not initial_load:
|
if not initial_load:
|
||||||
self.main_window.increment_progress_bar()
|
self.main_window.increment_progress_bar()
|
||||||
|
Loading…
Reference in New Issue
Block a user