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:
@@ -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,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),
|
||||
|
||||
Reference in New Issue
Block a user