diff --git a/sigal/gallery.py b/sigal/gallery.py index b897c4c5..261531e2 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -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.""" @@ -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 diff --git a/sigal/plugins/feeds.py b/sigal/plugins/feeds.py index 8480e8cf..6c08e72b 100644 --- a/sigal/plugins/feeds.py +++ b/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 @@ 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(), diff --git a/sigal/themes/colorbox/templates/base.html b/sigal/themes/colorbox/templates/base.html index 86d8227d..ede71de0 100644 --- a/sigal/themes/colorbox/templates/base.html +++ b/sigal/themes/colorbox/templates/base.html @@ -37,7 +37,10 @@