Skip to content

Commit

Permalink
[#3009] Don't mark the user's own activities as new on her dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
Sean Hammond committed Nov 14, 2012
1 parent 8469a50 commit eb086d5
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 31 deletions.
12 changes: 2 additions & 10 deletions ckan/lib/activity_streams.py
Expand Up @@ -187,13 +187,9 @@ def activity_stream_string_new_related_item():
# A list of activity types that may have details
activity_stream_actions_with_detail = ['changed package']

def activity_list_to_html(context, activity_stream, is_dashboard=False):
def activity_list_to_html(context, activity_stream):
'''Return the given activity stream as a snippet of HTML.'''

# get the last time they read the dashboard
if (is_dashboard):
last_viewed = logic.get_action('dashboard_get_last_viewed')(context, {})

activity_list = [] # These are the activity stream messages.
for activity in activity_stream:
detail = None
Expand Down Expand Up @@ -234,16 +230,12 @@ def activity_list_to_html(context, activity_stream, is_dashboard=False):
snippet = activity_snippet_functions[match](activity, detail)
data[str(match)] = snippet
timestamp = datetime.datetime.strptime(activity['timestamp'], '%Y-%m-%dT%H:%M:%S.%f').timetuple()
if (is_dashboard):
is_new = ( timestamp > last_viewed )
else:
is_new = False;

activity_list.append({'msg': activity_msg,
'type': activity_type.replace(' ', '-').lower(),
'icon': activity_icon,
'data': data,
'timestamp': activity['timestamp'],
'is_new': is_new})
'is_new': activity.get('is_new', False)})
return literal(base.render('activity_streams/activity_stream_items.html',
extra_vars={'activities': activity_list}))
47 changes: 26 additions & 21 deletions ckan/logic/action/get.py
Expand Up @@ -2198,7 +2198,14 @@ def group_followee_list(context, data_dict):
def dashboard_activity_list(context, data_dict):
'''Return the authorized user's dashboard activity stream.
:rtype: list of dictionaries
Unlike the activity dictionaries returned by other *_activity_list actions,
these activity dictionaries have an extra boolean value with key 'is_new'
that tells you whether the activity happened since the user last viewed her
dashboard ('is_new': True) or not ('is_new': False).
The user's own activities are always marked 'is_new': False.
:rtype: list of activity dictionaries
'''
_check_access('dashboard_activity_list', context, data_dict)
Expand All @@ -2210,7 +2217,22 @@ def dashboard_activity_list(context, data_dict):
# authorized to read.
activity_objects = model.activity.dashboard_activity_list(user_id)

return model_dictize.activity_list_dictize(activity_objects, context)
activity_dicts = model_dictize.activity_list_dictize(
activity_objects, context)

# Mark the new (not yet seen by user) activities.
strptime = datetime.datetime.strptime
fmt = '%Y-%m-%dT%H:%M:%S.%f'
last_viewed = model.Dashboard.get_activity_stream_last_viewed(user_id)
for activity in activity_dicts:
if activity['user_id'] == user_id:
# Never mark the user's own activities as new.
activity['is_new'] = False
else:
activity['is_new'] = (strptime(activity['timestamp'], fmt)
> last_viewed)

return activity_dicts


def dashboard_activity_list_html(context, data_dict):
Expand All @@ -2223,8 +2245,7 @@ def dashboard_activity_list_html(context, data_dict):
'''
activity_stream = dashboard_activity_list(context, data_dict)
return activity_streams.activity_list_to_html(context, activity_stream,
is_dashboard=True)
return activity_streams.activity_list_to_html(context, activity_stream)


def dashboard_new_activities_count(context, data_dict):
Expand All @@ -2241,25 +2262,9 @@ def dashboard_new_activities_count(context, data_dict):
'''
_check_access('dashboard_new_activities_count', context, data_dict)

activities = logic.get_action('dashboard_activity_list')(
context, data_dict)

model = context['model']
user_id = model.User.get(context['user']).id

# Filter out the user's own activities.
activities = [activity for activity in activities
if activity['user_id'] != user_id]

# Filter out the old (already seen) activities.
strptime = datetime.datetime.strptime
fmt = '%Y-%m-%dT%H:%M:%S.%f'
last_viewed = model.Dashboard.get_activity_stream_last_viewed(user_id)
activities = [activity for activity in activities
if strptime(activity['timestamp'], fmt) > last_viewed]

return len(activities)
return len([activity for activity in activities if activity['is_new']])


def dashboard_get_last_viewed(context, data_dict):
Expand Down

0 comments on commit eb086d5

Please sign in to comment.