recent_viewed.rb 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. class Sessions::Backend::RecentViewed
  2. def initialize( user, client = nil, client_id = nil )
  3. @user = user
  4. @client = client
  5. @client_id = client_id
  6. @last_change = nil
  7. end
  8. def load
  9. # get whole collection
  10. recent_viewed = RecentView.list( @user, 10 )
  11. # no data exists
  12. return if !recent_viewed
  13. return if recent_viewed.empty?
  14. # no change exists
  15. return if @last_change == recent_viewed
  16. # remember last state
  17. @last_change = recent_viewed
  18. RecentView.list_fulldata( @user, 10 )
  19. end
  20. def client_key
  21. "as::load::#{ self.class.to_s }::#{ @user.id }::#{ @client_id }"
  22. end
  23. def push
  24. # check timeout
  25. timeout = Sessions::CacheIn.get( self.client_key )
  26. return if timeout
  27. # set new timeout
  28. Sessions::CacheIn.set( self.client_key, true, { :expires_in => 15.seconds } )
  29. data = self.load
  30. return if !data||data.empty?
  31. if !@client
  32. return {
  33. :event => 'update_recent_viewed',
  34. :data => data,
  35. }
  36. end
  37. @client.log 'notify', "push recent_viewed for user #{ @user.id }"
  38. @client.send({
  39. :event => 'update_recent_viewed',
  40. :data => data,
  41. })
  42. end
  43. end