From a658679d29ebebe6f68d9292fcb00e973002cb70 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 25 Oct 2009 17:27:24 +0000 Subject: [PATCH] Add etag check on the activity view to avoid rendering when not modified. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2982 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/projects_controller.rb | 30 ++++++++++++++------------ lib/redmine/activity/fetcher.rb | 4 +++- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 6d8451cdc..bcdf10dff 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -299,20 +299,22 @@ class ProjectsController < ApplicationController events = @activity.events(@date_from, @date_to) - respond_to do |format| - format.html { - @events_by_day = events.group_by(&:event_date) - render :layout => false if request.xhr? - } - format.atom { - title = l(:label_activity) - if @author - title = @author.name - elsif @activity.scope.size == 1 - title = l("label_#{@activity.scope.first.singularize}_plural") - end - render_feed(events, :title => "#{@project || Setting.app_title}: #{title}") - } + if events.empty? || stale?(:etag => [events.first, User.current]) + respond_to do |format| + format.html { + @events_by_day = events.group_by(&:event_date) + render :layout => false if request.xhr? + } + format.atom { + title = l(:label_activity) + if @author + title = @author.name + elsif @activity.scope.size == 1 + title = l("label_#{@activity.scope.first.singularize}_plural") + end + render_feed(events, :title => "#{@project || Setting.app_title}: #{title}") + } + end end rescue ActiveRecord::RecordNotFound diff --git a/lib/redmine/activity/fetcher.rb b/lib/redmine/activity/fetcher.rb index 1d0bd8a16..fb73d5d28 100644 --- a/lib/redmine/activity/fetcher.rb +++ b/lib/redmine/activity/fetcher.rb @@ -66,6 +66,7 @@ module Redmine end # Returns an array of events for the given date range + # sorted in reverse chronological order def events(from = nil, to = nil, options={}) e = [] @options[:limit] = options[:limit] @@ -76,8 +77,9 @@ module Redmine end end + e.sort! {|a,b| b.event_datetime <=> a.event_datetime} + if options[:limit] - e.sort! {|a,b| b.event_date <=> a.event_date} e = e.slice(0, options[:limit]) end e