Browse Source

Merge pull request #238 from jasuarez/feed-videos

feeds: include videos in feeds
pull/240/merge
Simon Conseil 9 years ago committed by GitHub
parent
commit
ba18664706
  1. 8
      sigal/gallery.py
  2. 30
      sigal/plugins/feeds.py
  3. 5
      sigal/themes/colorbox/templates/base.html
  4. 5
      sigal/themes/galleria/templates/index.html

8
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

30
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,35 +31,35 @@ 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(
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_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),
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(),

5
sigal/themes/colorbox/templates/base.html

@ -37,7 +37,10 @@
{% endif %}
<footer>
<p>{% if album.author %}&copy; {{ album.author }} - {% endif %}
Generated by <a href="{{ sigal_link }}">sigal</a></p>
Generated by <a href="{{ sigal_link }}">sigal</a>
{% if 'sigal.plugins.feeds' in settings.plugins %}
{% if settings.rss_feed %}<br><a href={{ settings.rss_feed.feed_url }}>RSS Feed</a>{% endif %}
{% if settings.atom_feed %}<br><a href={{ settings.atom_feed.feed_url }}>Atom Feed</a>{% endif %}{% endif %}</p>
</footer>
</div>
</div>

5
sigal/themes/galleria/templates/index.html

@ -144,7 +144,10 @@
<footer>
<p>{% if album.author %}&copy; {{ album.author }} - {% endif %}
Generated by <a href="{{ sigal_link }}">sigal</a></p>
Generated by <a href="{{ sigal_link }}">sigal</a>
{% if 'sigal.plugins.feeds' in settings.plugins %}
{% if settings.rss_feed %}<br><a href={{ settings.rss_feed.feed_url }}>RSS Feed</a>{% endif %}
{% if settings.atom_feed %}<br><a href={{ settings.atom_feed.feed_url }}>Atom Feed</a>{% endif %}{% endif %}</p>
</footer>
</div>

Loading…
Cancel
Save