recent_viewed.rb 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. module Sessions::Backend::RecentViewed
  2. def self.worker( user, worker )
  3. cache_key = 'user_' + user.id.to_s + '_recent_viewed'
  4. if Sessions::CacheIn.expired(cache_key)
  5. recent_viewed = RecentView.list_fulldata( user, 10 )
  6. recent_viewed_cache = Sessions::CacheIn.get( cache_key, { :re_expire => true } )
  7. worker.log 'notice', 'fetch recent_viewed - ' + cache_key
  8. if recent_viewed != recent_viewed_cache
  9. worker.log 'notify', 'fetch recent_viewed changed - ' + cache_key
  10. recent_viewed_full = RecentView.list_fulldata( user, 10 )
  11. Sessions::CacheIn.set( cache_key, recent_viewed, { :expires_in => 5.seconds } )
  12. Sessions::CacheIn.set( cache_key + '_push', recent_viewed_full )
  13. end
  14. end
  15. end
  16. def self.push( user, client )
  17. cache_key = 'user_' + user.id.to_s + '_recent_viewed'
  18. recent_viewed_time = Sessions::CacheIn.get_time( cache_key, { :ignore_expire => true } )
  19. if recent_viewed_time && client.last_change['recent_viewed'] != recent_viewed_time
  20. client.last_change['recent_viewed'] = recent_viewed_time
  21. recent_viewed = Sessions::CacheIn.get( cache_key, { :ignore_expire => true } )
  22. client.log 'notify', "push recent_viewed for user #{user.id}"
  23. # send update to browser
  24. r = Sessions::CacheIn.get( cache_key + '_push', { :ignore_expire => true } )
  25. client.send({
  26. :event => 'update_recent_viewed',
  27. :data => r,
  28. })
  29. end
  30. end
  31. end