Commit b5ff371960eb628d697a96110270e4d4ab6272f6
1 parent
3e151dca
Exists in
master
and in
2 other branches
Decreasing chat notification count when open talk
Showing
7 changed files
with
67 additions
and
3 deletions
Show diff stats
amadeus/static/js/chat.js
| @@ -79,6 +79,48 @@ function getModalInfo(btn, space, space_type) { | @@ -79,6 +79,48 @@ function getModalInfo(btn, space, space_type) { | ||
| 79 | } | 79 | } |
| 80 | }); | 80 | }); |
| 81 | 81 | ||
| 82 | + var viewed = $(".messages-container").data('viewed'), | ||
| 83 | + sub_badge = $(".messages-container").data('space'), | ||
| 84 | + father = $(".messages-container").parent().parent().parent().parent(), | ||
| 85 | + chat_list_item_id = "#talk-" + father.attr("id"); | ||
| 86 | + | ||
| 87 | + $('.chat_badge').each(function () { | ||
| 88 | + var actual = $(this).text(); | ||
| 89 | + | ||
| 90 | + if (actual != "+99") { | ||
| 91 | + actual = parseInt(actual, 10) - viewed; | ||
| 92 | + | ||
| 93 | + if (actual <= 0) { | ||
| 94 | + $(this).text("0"); | ||
| 95 | + $(this).hide(); | ||
| 96 | + } else { | ||
| 97 | + $(this).text(actual); | ||
| 98 | + } | ||
| 99 | + } | ||
| 100 | + }); | ||
| 101 | + | ||
| 102 | + var counter = $(chat_list_item_id).find('.chat_notify_list').text(); | ||
| 103 | + | ||
| 104 | + counter = parseInt(counter, 10) - viewed; | ||
| 105 | + | ||
| 106 | + if (counter <= 0) { | ||
| 107 | + counter = "0"; | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + $(chat_list_item_id).find('.chat_notify_list').text(counter); | ||
| 111 | + | ||
| 112 | + var subject_cbadge = $("#subject_" + sub_badge).find('.chat_notify'), | ||
| 113 | + actual = subject_cbadge.text(); | ||
| 114 | + | ||
| 115 | + if (actual != "+99") { | ||
| 116 | + actual = parseInt(actual, 10) - viewed; | ||
| 117 | + | ||
| 118 | + if (actual <= 0) { | ||
| 119 | + subject_cbadge.text("0"); | ||
| 120 | + subject_cbadge.hide(); | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + | ||
| 82 | setShortChatFormSubmit(); | 124 | setShortChatFormSubmit(); |
| 83 | setFiltersSubmitAndPagination(); | 125 | setFiltersSubmitAndPagination(); |
| 84 | }); | 126 | }); |
amadeus/static/js/mural_ungeneral.js
| @@ -50,6 +50,7 @@ $('.mural-ungeneral').on('shown.bs.collapse', function(e) { | @@ -50,6 +50,7 @@ $('.mural-ungeneral').on('shown.bs.collapse', function(e) { | ||
| 50 | actual = parseInt(actual, 10) - data.unviewed; | 50 | actual = parseInt(actual, 10) - data.unviewed; |
| 51 | 51 | ||
| 52 | if (actual <= 0) { | 52 | if (actual <= 0) { |
| 53 | + $(this).text("0"); | ||
| 53 | $(this).hide(); | 54 | $(this).hide(); |
| 54 | } else { | 55 | } else { |
| 55 | $(this).text(actual); | 56 | $(this).text(actual); |
amadeus/static/js/socket.js
| @@ -241,9 +241,14 @@ function messageReceived(content) { | @@ -241,9 +241,14 @@ function messageReceived(content) { | ||
| 241 | 241 | ||
| 242 | $(this).hide(); | 242 | $(this).hide(); |
| 243 | }); | 243 | }); |
| 244 | + | ||
| 245 | + $.ajax({ | ||
| 246 | + type: 'GET', | ||
| 247 | + url: content.view_url | ||
| 248 | + }); | ||
| 244 | } else { | 249 | } else { |
| 245 | var talk_line = $("#talk-" + content.container), | 250 | var talk_line = $("#talk-" + content.container), |
| 246 | - talk_notifies = talk_line.find('.chat_notify'), | 251 | + talk_notifies = talk_line.find('.chat_notify_list'), |
| 247 | actual_count = talk_notifies.text(), | 252 | actual_count = talk_notifies.text(), |
| 248 | actual_date = talk_line.find(".talk-last_msg"); | 253 | actual_date = talk_line.find(".talk-last_msg"); |
| 249 | 254 |
chat/templates/chat/_view.html
| @@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
| 9 | <img src="{{ talking_to.image_url }}" class="img-responsive" /> | 9 | <img src="{{ talking_to.image_url }}" class="img-responsive" /> |
| 10 | </div> | 10 | </div> |
| 11 | <div class="col-md-6 user-info"> | 11 | <div class="col-md-6 user-info"> |
| 12 | - <h4 class='talking-header'><a class="user_{{ talking_to.id }}_status status {{ status }}" data-toggle="tooltip" title="{{ status|status_text }}"></a> {{ talking_to }} (<span class="chat_notify">{{ chat|notifies:request.user }}</span>)</h4> | 12 | + <h4 class='talking-header'><a class="user_{{ talking_to.id }}_status status {{ status }}" data-toggle="tooltip" title="{{ status|status_text }}"></a> {{ talking_to }} (<span class="chat_notify_list">{{ chat|notifies:request.user }}</span>)</h4> |
| 13 | <p class="talk-last_msg">{% trans 'Last message in' %} {{ chat|last_message }}</p> | 13 | <p class="talk-last_msg">{% trans 'Last message in' %} {{ chat|last_message }}</p> |
| 14 | </div> | 14 | </div> |
| 15 | <div class="col-md-4 buttons pull-right text-center"> | 15 | <div class="col-md-4 buttons pull-right text-center"> |
chat/templates/chat/talk.html
| @@ -39,7 +39,7 @@ | @@ -39,7 +39,7 @@ | ||
| 39 | </div> | 39 | </div> |
| 40 | </div> | 40 | </div> |
| 41 | <div class="row-fluid"> | 41 | <div class="row-fluid"> |
| 42 | - <div class="messages-container" data-talk="{{ talk_id }}" data-url="{% url 'chat:load_messages' talk_id %}" data-page="{{ page_obj.number }}" data-pages="{{ paginator.num_pages }}"> | 42 | + <div class="messages-container" data-talk="{{ talk_id }}" data-url="{% url 'chat:load_messages' talk_id %}" data-page="{{ page_obj.number }}" data-pages="{{ paginator.num_pages }}" data-viewed="{{ messages_viewed }}" data-space="{{ subject }}"> |
| 43 | <button type="button" class="btn btn-block btn-success btn-raised more-msgs" style="{% if paginator.num_pages == page_obj.number %}display:none;{% endif %}margin:0px"> | 43 | <button type="button" class="btn btn-block btn-success btn-raised more-msgs" style="{% if paginator.num_pages == page_obj.number %}display:none;{% endif %}margin:0px"> |
| 44 | {% trans 'See old messages' %} | 44 | {% trans 'See old messages' %} |
| 45 | </button> | 45 | </button> |
chat/urls.py
| @@ -8,6 +8,7 @@ urlpatterns = [ | @@ -8,6 +8,7 @@ urlpatterns = [ | ||
| 8 | url(r'^subject/participants/(?P<subject>[\w_-]+)/$', views.SubjectParticipants.as_view(), name='participants_subject'), | 8 | url(r'^subject/participants/(?P<subject>[\w_-]+)/$', views.SubjectParticipants.as_view(), name='participants_subject'), |
| 9 | url(r'^render_message/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.render_message, name='render_message'), | 9 | url(r'^render_message/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w_-]+)/([\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.render_message, name='render_message'), |
| 10 | url(r'^favorite/([\w_-]+)/$', views.favorite, name='favorite'), | 10 | url(r'^favorite/([\w_-]+)/$', views.favorite, name='favorite'), |
| 11 | + url(r'^view_message/([\w_-]+)/$', views.message_viewed, name='view_message'), | ||
| 11 | url(r'^load_messages/([\w_-]+)/$', views.load_messages, name='load_messages'), | 12 | url(r'^load_messages/([\w_-]+)/$', views.load_messages, name='load_messages'), |
| 12 | url(r'^talk/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.GetTalk.as_view(), name = 'talk'), | 13 | url(r'^talk/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.GetTalk.as_view(), name = 'talk'), |
| 13 | url(r'^send_message/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<talk_id>[\w_-]+)/(?P<space>[\w_-]+)/(?P<space_type>[\w_-]+)/$', views.SendMessage.as_view(), name = 'create'), | 14 | url(r'^send_message/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<talk_id>[\w_-]+)/(?P<space>[\w_-]+)/(?P<space_type>[\w_-]+)/$', views.SendMessage.as_view(), name = 'create'), |
chat/views.py
| @@ -258,6 +258,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): | @@ -258,6 +258,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): | ||
| 258 | template_name = 'chat/talk.html' | 258 | template_name = 'chat/talk.html' |
| 259 | paginate_by = 20 | 259 | paginate_by = 20 |
| 260 | talk_id = "-1" | 260 | talk_id = "-1" |
| 261 | + n_viewed = 0 | ||
| 261 | 262 | ||
| 262 | def get_queryset(self): | 263 | def get_queryset(self): |
| 263 | user = self.request.user | 264 | user = self.request.user |
| @@ -274,6 +275,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): | @@ -274,6 +275,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): | ||
| 274 | messages = TalkMessages.objects.filter(talk = talk).order_by('-create_date') | 275 | messages = TalkMessages.objects.filter(talk = talk).order_by('-create_date') |
| 275 | 276 | ||
| 276 | views = ChatVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(message__talk = talk))) | 277 | views = ChatVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(message__talk = talk))) |
| 278 | + self.n_viewed = views.count() | ||
| 277 | views.update(viewed = True, date_viewed = datetime.now()) | 279 | views.update(viewed = True, date_viewed = datetime.now()) |
| 278 | 280 | ||
| 279 | return messages | 281 | return messages |
| @@ -283,6 +285,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): | @@ -283,6 +285,7 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): | ||
| 283 | 285 | ||
| 284 | user_email = self.kwargs.get('email', '') | 286 | user_email = self.kwargs.get('email', '') |
| 285 | 287 | ||
| 288 | + context['messages_viewed'] = self.n_viewed | ||
| 286 | context['participant'] = get_object_or_404(User, email = user_email) | 289 | context['participant'] = get_object_or_404(User, email = user_email) |
| 287 | context['talk_id'] = self.talk_id | 290 | context['talk_id'] = self.talk_id |
| 288 | context['space'] = self.request.GET.get('space', '0') | 291 | context['space'] = self.request.GET.get('space', '0') |
| @@ -290,6 +293,10 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): | @@ -290,6 +293,10 @@ class GetTalk(LoginRequiredMixin, LogMixin, generic.ListView): | ||
| 290 | context['form'] = ChatMessageForm() | 293 | context['form'] = ChatMessageForm() |
| 291 | context['form_url'] = reverse_lazy('chat:create', args = (), kwargs = {'email': self.kwargs.get('email', ''), 'talk_id': self.talk_id, 'space': self.request.GET.get('space', '0'), 'space_type': self.request.GET.get('space_type', 'general')}) | 294 | context['form_url'] = reverse_lazy('chat:create', args = (), kwargs = {'email': self.kwargs.get('email', ''), 'talk_id': self.talk_id, 'space': self.request.GET.get('space', '0'), 'space_type': self.request.GET.get('space_type', 'general')}) |
| 292 | 295 | ||
| 296 | + if context['space_type'] == "subject": | ||
| 297 | + subject = get_object_or_404(Subject, id = context['space']) | ||
| 298 | + context['subject'] = subject.slug | ||
| 299 | + | ||
| 293 | self.log_context['talk_id'] = self.talk_id | 300 | self.log_context['talk_id'] = self.talk_id |
| 294 | self.log_context['user_id'] = context['participant'].id | 301 | self.log_context['user_id'] = context['participant'].id |
| 295 | self.log_context['user_name'] = str(context['participant']) | 302 | self.log_context['user_name'] = str(context['participant']) |
| @@ -352,6 +359,7 @@ class SendMessage(LoginRequiredMixin, LogMixin, generic.edit.CreateView): | @@ -352,6 +359,7 @@ class SendMessage(LoginRequiredMixin, LogMixin, generic.edit.CreateView): | ||
| 352 | "user_icon": self.object.user.image_url, | 359 | "user_icon": self.object.user.image_url, |
| 353 | "notify_title": str(self.object.user), | 360 | "notify_title": str(self.object.user), |
| 354 | "simple_notify": simple_notify, | 361 | "simple_notify": simple_notify, |
| 362 | + "view_url": reverse("chat:view_message", args = (self.object.id, ), kwargs = {}), | ||
| 355 | "complete": render_to_string("chat/_message.html", {"talk_msg": self.object}, self.request), | 363 | "complete": render_to_string("chat/_message.html", {"talk_msg": self.object}, self.request), |
| 356 | "container": "chat-" + str(self.object.user.id), | 364 | "container": "chat-" + str(self.object.user.id), |
| 357 | "last_date": _("Last message in %s")%(formats.date_format(self.object.create_date, "SHORT_DATETIME_FORMAT")) | 365 | "last_date": _("Last message in %s")%(formats.date_format(self.object.create_date, "SHORT_DATETIME_FORMAT")) |
| @@ -417,6 +425,13 @@ def favorite(request, message): | @@ -417,6 +425,13 @@ def favorite(request, message): | ||
| 417 | 425 | ||
| 418 | return JsonResponse({'label': _('Favorite')}) | 426 | return JsonResponse({'label': _('Favorite')}) |
| 419 | 427 | ||
| 428 | +def message_viewed(request, message): | ||
| 429 | + view = ChatVisualizations.objects.filter(message__id = message, user = request.user) | ||
| 430 | + | ||
| 431 | + view.update(viewed = True, date_viewed = datetime.now()) | ||
| 432 | + | ||
| 433 | + return JsonResponse({'msg': 'ok'}) | ||
| 434 | + | ||
| 420 | def load_messages(request, talk): | 435 | def load_messages(request, talk): |
| 421 | context = { | 436 | context = { |
| 422 | 'request': request, | 437 | 'request': request, |