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 %}
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 @@
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(),