Allow sorting on metadata keys.

This makes it possible to specify metadata keys for the albums_sort_attr
and medias_sort_attr configuration options. This is done by prefixing
the key with 'meta.', so e.g. albums_sort_attr = 'meta.order' will sort
albums on the 'order' metadata key (collected from the .md files in each
directory).

Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
This commit is contained in:
Toke Høiland-Jørgensen
2016-04-27 10:17:30 +02:00
parent 894f7d6522
commit 0b577af48e
2 changed files with 13 additions and 3 deletions

View File

@@ -314,7 +314,12 @@ class Album(UnicodeMixin):
if self.subdirs:
if albums_sort_attr:
root_path = self.path if self.path != '.' else ''
key = lambda s: strxfrm(getattr(
if albums_sort_attr.startswith("meta."):
meta_key = albums_sort_attr.split(".", 1)[1]
key = lambda s: strxfrm(
self.gallery.albums[join(root_path, s)].meta[meta_key][0])
else:
key = lambda s: strxfrm(getattr(
self.gallery.albums[join(root_path, s)], albums_sort_attr))
else:
key = strxfrm
@@ -328,6 +333,9 @@ class Album(UnicodeMixin):
if self.medias:
if medias_sort_attr == 'date':
key = lambda s: s.date or datetime.now()
elif medias_sort_attr.startswith('meta.'):
meta_key = medias_sort_attr.split(".", 1)[1]
key = lambda s: strxfrm(s.meta[meta_key])
else:
key = lambda s: strxfrm(getattr(s, medias_sort_attr))

View File

@@ -101,14 +101,16 @@ thumb_size = (280, 210)
# Use symbolic links instead of copying the original images
# orig_link = False
# Attribute of Album objects which is used to sort medias (eg 'title').
# Attribute of Album objects which is used to sort medias (eg 'title'). To sort
# on a metadata key, use 'meta.key'.
# albums_sort_attr = 'name'
# Reverse sort for albums
# albums_sort_reverse = False
# Attribute of Media objects which is used to sort medias. 'date' can be used
# to sort with EXIF dates.
# to sort with EXIF dates, and 'meta.key' to sort on a metadata key (which then
# must exist for all images).
# medias_sort_attr = 'filename'
# Reverse sort for medias