Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feeds: include videos in feeds #238

Merged
merged 3 commits into from Feb 5, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 6 additions & 2 deletions sigal/gallery.py
Expand Up @@ -140,6 +140,10 @@ def _get_metadata(self):
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."""
Expand All @@ -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):
Expand Down Expand Up @@ -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
Expand Down
30 changes: 15 additions & 15 deletions sigal/plugins/feeds.py
Expand Up @@ -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

Expand Down Expand Up @@ -31,35 +31,35 @@


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(),
Expand Down
5 changes: 4 additions & 1 deletion sigal/themes/colorbox/templates/base.html
Expand Up @@ -37,7 +37,10 @@ <h1><a href="{{ album.index_url }}">{{ index_title }}</a></h1>
{% 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>
Expand Down
5 changes: 4 additions & 1 deletion sigal/themes/galleria/templates/index.html
Expand Up @@ -144,7 +144,10 @@ <h2>

<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>

Expand Down