]> source.dussan.org Git - redmine.git/commitdiff
Add etag check on the activity view to avoid rendering when not modified.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 25 Oct 2009 17:27:24 +0000 (17:27 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 25 Oct 2009 17:27:24 +0000 (17:27 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2982 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/projects_controller.rb
lib/redmine/activity/fetcher.rb

index 6d8451cdc5c35e23ed284065b8eddbe31a0c8ad0..bcdf10dfffbe8b5b01def985619e5074eab470c5 100644 (file)
@@ -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
index 1d0bd8a168dd575a06c9142028836fa388cfbc8d..fb73d5d28db987cb1dbadead8cc3d2a9f5a86cda 100644 (file)
@@ -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