trabajo-afectivo/lib/sessions/backend/activity_stream.rb

65 lines
1.4 KiB
Ruby
Raw Normal View History

2014-07-13 18:52:32 +00:00
class Sessions::Backend::ActivityStream
def initialize( user, client = nil, client_id = nil, ttl = 30 )
@user = user
@client = client
@client_id = client_id
@ttl = ttl
@last_change = nil
2014-07-13 18:52:32 +00:00
end
def load
# get whole collection
activity_stream = @user.activity_stream( 25 )
if activity_stream && !activity_stream.first
return
end
if activity_stream && activity_stream.first && activity_stream.first['created_at'] == @last_change
return
end
# update last changed
if activity_stream && activity_stream.first
@last_change = activity_stream.first['created_at']
end
2014-07-13 18:52:32 +00:00
@user.activity_stream( 25, true )
end
def client_key
2015-05-04 19:45:48 +00:00
"as::load::#{ self.class }::#{ @user.id }::#{ @client_id }"
end
2014-07-13 18:52:32 +00:00
def push
# check timeout
timeout = Sessions::CacheIn.get( client_key )
2014-07-13 18:52:32 +00:00
return if timeout
2014-07-13 18:52:32 +00:00
# set new timeout
Sessions::CacheIn.set( client_key, true, { expires_in: @ttl.seconds } )
data = load
2014-07-13 18:52:32 +00:00
return if !data || data.empty?
2014-07-13 18:52:32 +00:00
if !@client
return {
event: 'activity_stream_rebuild',
collection: 'activity_stream',
data: data,
2014-07-13 18:52:32 +00:00
}
end
2014-07-13 18:52:32 +00:00
2015-05-04 19:45:48 +00:00
@client.log "push activity_stream #{ data.first.class } for user #{ @user.id }"
2015-04-27 15:21:17 +00:00
@client.send(
event: 'activity_stream_rebuild',
collection: 'activity_stream',
data: data,
2015-04-27 15:21:17 +00:00
)
end
end