Merge pull request #238 from jasuarez/feed-videos
feeds: include videos in feeds
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -37,7 +37,10 @@
|
||||
{% endif %}
|
||||
<footer>
|
||||
<p>{% if album.author %}© {{ 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>
|
||||
|
||||
@@ -144,7 +144,10 @@
|
||||
|
||||
<footer>
|
||||
<p>{% if album.author %}© {{ 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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user