From cb7a2af1102241d0a0b47e370618fe3fcc96a34d Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Wed, 1 Feb 2017 14:22:21 +0100 Subject: [PATCH 1/3] feeds: include videos in feeds Include videos when generating the feeds, besides the images. Also, both for videos and for images without EXIF, use file modification time. --- sigal/gallery.py | 8 ++++++-- sigal/plugins/feeds.py | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/sigal/gallery.py b/sigal/gallery.py index b897c4c..261531e 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -140,6 +140,10 @@ class Media(UnicodeMixin): for key, val in meta.items(): setattr(self, key, val) + def _get_file_date(self): + stat = os.stat(self.src_path) + return datetime.fromtimestamp(stat.st_mtime) + class Image(Media): """Gather all informations on an image file.""" @@ -149,7 +153,7 @@ class Image(Media): @cached_property def date(self): - return self.exif and self.exif.get('dateobj', None) or None + return self.exif and self.exif.get('dateobj', None) or self._get_file_date() @cached_property def exif(self): @@ -186,8 +190,8 @@ class Video(Media): def __init__(self, filename, path, settings): super(Video, self).__init__(filename, path, settings) base, ext = splitext(filename) - self.date = None self.src_filename = filename + self.date = self._get_file_date() if not settings['use_orig'] or not is_valid_html5_video(ext): video_format = settings['video_format'] ext = '.' + video_format diff --git a/sigal/plugins/feeds.py b/sigal/plugins/feeds.py index 8480e8c..4e1dbb6 100644 --- a/sigal/plugins/feeds.py +++ b/sigal/plugins/feeds.py @@ -2,8 +2,8 @@ """Plugin which add RSS/ATOM feeds. -This plugin requires feedgenerator_. It uses all the images of the gallery, -sorted by date, to show the most recent ones. +This plugin requires feedgenerator_. It uses all the images and videos of the +gallery, sorted by date, to show the most recent ones. .. _feedgenerator: https://pypi.python.org/pypi/feedgenerator @@ -31,20 +31,20 @@ logger = logging.getLogger(__name__) def generate_feeds(gallery): - # Get all images and sort by date - images = [img for album in gallery.albums.values() - for img in album.images if img.date is not None] - images.sort(key=lambda im: im.date, reverse=True) + # Get all images and videos and sort by date + medias = [med for album in gallery.albums.values() + for med in album.medias if med.date is not None] + medias.sort(key=lambda m: m.date, reverse=True) settings = gallery.settings if settings.get('rss_feed'): - generate_feed(gallery, images, feed_type='rss', **settings['rss_feed']) + generate_feed(gallery, medias, feed_type='rss', **settings['rss_feed']) if settings.get('atom_feed'): - generate_feed(gallery, images, feed_type='atom', + generate_feed(gallery, medias, feed_type='atom', **settings['atom_feed']) -def generate_feed(gallery, images, feed_type=None, feed_url='', nb_items=0): +def generate_feed(gallery, medias, feed_type=None, feed_url='', nb_items=0): root_album = gallery.albums['.'] cls = Rss201rev2Feed if feed_type == 'rss' else Atom1Feed feed = cls( @@ -54,10 +54,10 @@ def generate_feed(gallery, images, feed_type=None, feed_url='', nb_items=0): description=Markup(root_album.description).striptags() ) - nb_images = len(images) - nb_items = min(nb_items, nb_images) if nb_items > 0 else nb_images + nb_medias = len(medias) + nb_items = min(nb_items, nb_medias) if nb_items > 0 else nb_medias - for item in images[:nb_items]: + for item in medias[:nb_items]: feed.add_item( title=Markup(item.title or item.url), link='%s/#%s' % (item.path, item.url), From cdbe0e65544f2d64fc069dacdd11ee6f9dcea66d Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Wed, 1 Feb 2017 15:02:27 +0100 Subject: [PATCH 2/3] Show feeds in page --- sigal/themes/colorbox/templates/base.html | 5 ++++- sigal/themes/galleria/templates/index.html | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sigal/themes/colorbox/templates/base.html b/sigal/themes/colorbox/templates/base.html index 86d8227..ede71de 100644 --- a/sigal/themes/colorbox/templates/base.html +++ b/sigal/themes/colorbox/templates/base.html @@ -37,7 +37,10 @@ {% endif %}

{% if album.author %}© {{ album.author }} - {% endif %} - Generated by sigal

+ Generated by sigal + {% if 'sigal.plugins.feeds' in settings.plugins %} + {% if settings.rss_feed %}
RSS Feed{% endif %} + {% if settings.atom_feed %}
Atom Feed{% endif %}{% endif %}

diff --git a/sigal/themes/galleria/templates/index.html b/sigal/themes/galleria/templates/index.html index 317bb66..f72cf98 100644 --- a/sigal/themes/galleria/templates/index.html +++ b/sigal/themes/galleria/templates/index.html @@ -144,7 +144,10 @@

{% if album.author %}© {{ album.author }} - {% endif %} - Generated by sigal

+ Generated by sigal + {% if 'sigal.plugins.feeds' in settings.plugins %} + {% if settings.rss_feed %}
RSS Feed{% endif %} + {% if settings.atom_feed %}
Atom Feed{% endif %}{% endif %}

From 1374c148158b9b9e9315f6f43cc1ed21d4923006 Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Wed, 1 Feb 2017 18:53:27 +0100 Subject: [PATCH 3/3] feed: escape title and description We need to escape them to avoid end up in titles like "today & tomorrow" instead of "today & tomorrow". --- sigal/plugins/feeds.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sigal/plugins/feeds.py b/sigal/plugins/feeds.py index 4e1dbb6..6c08e72 100644 --- a/sigal/plugins/feeds.py +++ b/sigal/plugins/feeds.py @@ -48,10 +48,10 @@ def generate_feed(gallery, medias, feed_type=None, feed_url='', nb_items=0): root_album = gallery.albums['.'] cls = Rss201rev2Feed if feed_type == 'rss' else Atom1Feed feed = cls( - title=Markup(root_album.title), + title=Markup.escape(root_album.title), link='/', feed_url=feed_url, - description=Markup(root_album.description).striptags() + description=Markup.escape(root_album.description).striptags() ) nb_medias = len(medias) @@ -59,7 +59,7 @@ def generate_feed(gallery, medias, feed_type=None, feed_url='', nb_items=0): for item in medias[:nb_items]: feed.add_item( - title=Markup(item.title or item.url), + title=Markup.escape(item.title or item.url), link='%s/#%s' % (item.path, item.url), # unique_id='tag:%s,%s:%s' % (urlparse(link).netloc, # item.date.date(),