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.
This commit is contained in:
Juan A. Suarez Romero
2017-02-01 14:22:21 +01:00
parent c2621dcee8
commit cb7a2af110
2 changed files with 18 additions and 14 deletions

View File

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

View File

@@ -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),