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

76 lines
1.5 KiB
Ruby
Raw Normal View History

2014-07-13 18:52:32 +00:00
class Sessions::Backend::ActivityStream
2016-03-03 08:56:13 +00:00
def initialize(user, asset_lookup, client = nil, client_id = nil, ttl = 25)
@user = user
@client = client
@client_id = client_id
@ttl = ttl
@asset_lookup = asset_lookup
@last_change = nil
2014-07-13 18:52:32 +00:00
end
def load
# get whole collection
2016-03-01 14:26:46 +00:00
activity_stream = @user.activity_stream(25)
2014-07-13 18:52:32 +00:00
if activity_stream && !activity_stream.first
return
end
2017-11-23 08:09:44 +00:00
if activity_stream&.first && activity_stream.first['created_at'] == @last_change
2014-07-13 18:52:32 +00:00
return
end
# update last changed
2017-11-23 08:09:44 +00:00
if activity_stream&.first
@last_change = activity_stream.first['created_at']
end
2014-07-13 18:52:32 +00:00
assets = {}
item_ids = []
activity_stream.each do |item|
item_ids.push item.id
assets = item.assets(assets)
end
{
record_ids: item_ids,
assets: assets,
}
2014-07-13 18:52:32 +00:00
end
def client_key
"as::load::#{self.class}::#{@user.id}::#{@client_id}"
end
2014-07-13 18:52:32 +00:00
def push
# check timeout
2016-03-01 14:26:46 +00:00
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
2016-03-01 14:26:46 +00:00
Sessions::CacheIn.set(client_key, true, { expires_in: @ttl.seconds })
data = load
2014-07-13 18:52:32 +00:00
return if data.blank?
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
@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