|
@@ -13,13 +13,14 @@ RANKS_CACHE_TIME = 3 * 60
|
|
|
|
|
|
|
|
|
|
def get_ranks_online(viewer):
|
|
def get_ranks_online(viewer):
|
|
- cached_online = cache.get(RANKS_CACHE_NAME, 'nada')
|
|
|
|
|
|
+ viewer_is_listed = viewer.is_authenticated() and viewer.rank.is_on_index
|
|
|
|
|
|
- if viewer and ranks_list_missing_viewer(viewer, cached_online):
|
|
|
|
|
|
+ cached_online = cache.get(RANKS_CACHE_NAME, 'nada')
|
|
|
|
+ if viewer_is_listed and ranks_list_missing_viewer(viewer, cached_online):
|
|
cached_online = 'nada'
|
|
cached_online = 'nada'
|
|
|
|
|
|
if cached_online == 'nada':
|
|
if cached_online == 'nada':
|
|
- cached_online = get_ranks_from_db()
|
|
|
|
|
|
+ cached_online = get_ranks_from_db(viewer if viewer_is_listed else None)
|
|
cache.set(RANKS_CACHE_NAME, cached_online, RANKS_CACHE_TIME)
|
|
cache.set(RANKS_CACHE_NAME, cached_online, RANKS_CACHE_TIME)
|
|
|
|
|
|
if not viewer.acl['can_see_hidden_users']:
|
|
if not viewer.acl['can_see_hidden_users']:
|
|
@@ -29,21 +30,18 @@ def get_ranks_online(viewer):
|
|
|
|
|
|
|
|
|
|
def ranks_list_missing_viewer(viewer, online_list):
|
|
def ranks_list_missing_viewer(viewer, online_list):
|
|
- if viewer.is_authenticated() and viewer.rank.is_on_index:
|
|
|
|
- if online_list != 'nada':
|
|
|
|
- for rank in online_list:
|
|
|
|
- if rank['pk'] == viewer.rank_id:
|
|
|
|
- for user in rank['online']:
|
|
|
|
- if user['id'] == viewer.pk:
|
|
|
|
- cache_is_hiding = user['is_hiding_presence']
|
|
|
|
- viewer_is_hiding = viewer.is_hiding_presence
|
|
|
|
- return cache_is_hiding != viewer_is_hiding
|
|
|
|
- else:
|
|
|
|
- return True
|
|
|
|
- else:
|
|
|
|
- return True
|
|
|
|
- else:
|
|
|
|
- return False
|
|
|
|
|
|
+ if online_list != 'nada':
|
|
|
|
+ for rank in online_list:
|
|
|
|
+ if rank['pk'] == viewer.rank_id:
|
|
|
|
+ for user in rank['online']:
|
|
|
|
+ if user['id'] == viewer.pk:
|
|
|
|
+ cache_is_hiding = user['is_hiding_presence']
|
|
|
|
+ viewer_is_hiding = viewer.is_hiding_presence
|
|
|
|
+ return cache_is_hiding != viewer_is_hiding
|
|
|
|
+ else:
|
|
|
|
+ return True
|
|
|
|
+ else:
|
|
|
|
+ return True
|
|
|
|
|
|
|
|
|
|
def filter_visiblity_preference(viewer, ranks_online):
|
|
def filter_visiblity_preference(viewer, ranks_online):
|
|
@@ -66,8 +64,8 @@ def filter_visiblity_preference(viewer, ranks_online):
|
|
return visible_ranks
|
|
return visible_ranks
|
|
|
|
|
|
|
|
|
|
-def get_ranks_from_db():
|
|
|
|
- _displayed_ranks = []
|
|
|
|
|
|
+def get_ranks_from_db(include_viewer):
|
|
|
|
+ displayed_ranks = []
|
|
|
|
|
|
ranks_dict = {}
|
|
ranks_dict = {}
|
|
for rank in Rank.objects.filter(is_on_index=True).order_by('order'):
|
|
for rank in Rank.objects.filter(is_on_index=True).order_by('order'):
|
|
@@ -82,7 +80,7 @@ def get_ranks_from_db():
|
|
'has_ninjas': False,
|
|
'has_ninjas': False,
|
|
'online': []
|
|
'online': []
|
|
}
|
|
}
|
|
- _displayed_ranks.append(ranks_dict[rank.pk])
|
|
|
|
|
|
+ displayed_ranks.append(ranks_dict[rank.pk])
|
|
|
|
|
|
queryset = get_online_queryset().filter(is_visible_on_index=True)
|
|
queryset = get_online_queryset().filter(is_visible_on_index=True)
|
|
for tracker in queryset.iterator():
|
|
for tracker in queryset.iterator():
|
|
@@ -99,8 +97,25 @@ def get_ranks_from_db():
|
|
if tracker.user.is_hiding_presence:
|
|
if tracker.user.is_hiding_presence:
|
|
ranks_dict[tracker.user.rank_id]['has_ninjas'] = True
|
|
ranks_dict[tracker.user.rank_id]['has_ninjas'] = True
|
|
|
|
|
|
|
|
+ if include_viewer and include_viewer.rank_id in ranks_dict:
|
|
|
|
+ viewer_rank = ranks_dict[include_viewer.rank_id]
|
|
|
|
+ if include_viewer.is_hiding_presence:
|
|
|
|
+ viewer_rank['has_ninjas'] = True
|
|
|
|
+ for online in viewer_rank['online']:
|
|
|
|
+ if online['pk'] == include_viewer.pk:
|
|
|
|
+ break
|
|
|
|
+ else:
|
|
|
|
+ viewer_rank['online'].append({
|
|
|
|
+ 'id': include_viewer.id,
|
|
|
|
+ 'pk': include_viewer.pk,
|
|
|
|
+ 'username': include_viewer.username,
|
|
|
|
+ 'slug': include_viewer.slug,
|
|
|
|
+ 'title': include_viewer.title,
|
|
|
|
+ 'is_hiding_presence': include_viewer.is_hiding_presence
|
|
|
|
+ })
|
|
|
|
+
|
|
ranks_online = []
|
|
ranks_online = []
|
|
- for rank in _displayed_ranks:
|
|
|
|
|
|
+ for rank in displayed_ranks:
|
|
if rank['online']:
|
|
if rank['online']:
|
|
ranks_online.append(rank)
|
|
ranks_online.append(rank)
|
|
return ranks_online
|
|
return ranks_online
|