Commit b731c25744bf60be4746a2f26fd22782a396d1ae

Authored by Zambom
1 parent 1d8d5041

Adding mural comments notifications

amadeus/static/js/socket.js
@@ -16,6 +16,12 @@ socket.onmessage = function(e) { @@ -16,6 +16,12 @@ socket.onmessage = function(e) {
16 muralNotificationUpdate(content); 16 muralNotificationUpdate(content);
17 } else if (content.subtype == "delete") { 17 } else if (content.subtype == "delete") {
18 muralNotificationDelete(content); 18 muralNotificationDelete(content);
  19 + } else if (content.subtype == "create_comment") {
  20 + muralNotificationComment(content);
  21 + } else if (content.subtype == "update_comment") {
  22 + muralNotificationCommentUpdate(content);
  23 + } else if (content.subtype == "delete_comment") {
  24 + muralNotificationCommentDelete(content);
19 } 25 }
20 } 26 }
21 } 27 }
@@ -79,4 +85,65 @@ function muralNotificationDelete(content) { @@ -79,4 +85,65 @@ function muralNotificationDelete(content) {
79 post.remove(); 85 post.remove();
80 } 86 }
81 } 87 }
  88 +}
  89 +
  90 +function muralNotificationComment(content) {
  91 + if (window.location.pathname == content.pathname) {
  92 + if ($("#post-" + content.post_id).is(":visible")) {
  93 + var section = $("#post-" + content.post_id).find('.comment-section');
  94 +
  95 + section.append(content.complete);
  96 + }
  97 + } else {
  98 + $('.mural_badge').each(function () {
  99 + var actual = $(this).text();
  100 +
  101 + if (actual != "+99") {
  102 + actual = parseInt(actual, 10) + 1;
  103 +
  104 + if (actual > 99) {
  105 + actual = "+99";
  106 + }
  107 +
  108 + $(this).text(actual);
  109 + }
  110 +
  111 + $(this).show();
  112 + });
  113 + }
  114 +
  115 + if (("Notification" in window)) {
  116 + var options = {
  117 + icon: content.user_icon,
  118 + body: content.simple
  119 + }
  120 +
  121 + if (Notification.permission === "granted") {
  122 + var notification = new Notification("", options);
  123 +
  124 + setTimeout(notification.close.bind(notification), 3000);
  125 + }
  126 + }
  127 +}
  128 +
  129 +function muralNotificationCommentUpdate(content) {
  130 + if (window.location.pathname == content.pathname) {
  131 + var comment = $("#comment-" + content.comment_id);
  132 +
  133 + if (comment.is(":visible")) {
  134 + comment.before(content.complete);
  135 +
  136 + comment.remove();
  137 + }
  138 + }
  139 +}
  140 +
  141 +function muralNotificationCommentDelete(content) {
  142 + if (window.location.pathname == content.pathname) {
  143 + var comment = $("#comment-" + content.comment_id);
  144 +
  145 + if (comment.is(":visible")) {
  146 + comment.remove();
  147 + }
  148 + }
82 } 149 }
83 \ No newline at end of file 150 \ No newline at end of file
mural/models.py
@@ -27,6 +27,10 @@ class Mural(KnowsChild): @@ -27,6 +27,10 @@ class Mural(KnowsChild):
27 edited = models.BooleanField(_('Edited'), default = False) 27 edited = models.BooleanField(_('Edited'), default = False)
28 28
29 @always_as_child 29 @always_as_child
  30 + def get_id(self):
  31 + pass
  32 +
  33 + @always_as_child
30 def update_link(self): 34 def update_link(self):
31 pass 35 pass
32 36
@@ -37,6 +41,9 @@ class Mural(KnowsChild): @@ -37,6 +41,9 @@ class Mural(KnowsChild):
37 class GeneralPost(Mural): 41 class GeneralPost(Mural):
38 space = models.IntegerField(_('Space'), default = 0, blank = True) 42 space = models.IntegerField(_('Space'), default = 0, blank = True)
39 43
  44 + def get_id(self):
  45 + return self.id
  46 +
40 def update_link(self): 47 def update_link(self):
41 return "mural:update_general" 48 return "mural:update_general"
42 49
@@ -46,6 +53,12 @@ class GeneralPost(Mural): @@ -46,6 +53,12 @@ class GeneralPost(Mural):
46 class CategoryPost(Mural): 53 class CategoryPost(Mural):
47 space = models.ForeignKey(Category, verbose_name = ('Category'), related_name = 'post_category') 54 space = models.ForeignKey(Category, verbose_name = ('Category'), related_name = 'post_category')
48 55
  56 + def get_id(self):
  57 + return self.id
  58 +
  59 + def get_id(self):
  60 + return self.id
  61 +
49 def update_link(self): 62 def update_link(self):
50 return "" 63 return ""
51 64
mural/views.py
@@ -262,16 +262,19 @@ class CommentCreate(LoginRequiredMixin, generic.edit.CreateView): @@ -262,16 +262,19 @@ class CommentCreate(LoginRequiredMixin, generic.edit.CreateView):
262 self.object.save() 262 self.object.save()
263 263
264 users = User.objects.all().exclude(id = self.request.user.id) 264 users = User.objects.all().exclude(id = self.request.user.id)
  265 + entries = []
265 266
266 notify_type = "mural" 267 notify_type = "mural"
267 user_icon = self.object.user.image_url 268 user_icon = self.object.user.image_url
268 - #_view = render_to_string("mural/_view.html", {"post": self.object}, self.request)  
269 - simple_notify = _("%s has made a post in General")%(str(self.object.user)) 269 + _view = render_to_string("mural/_view_comment.html", {"comment": self.object}, self.request)
  270 + simple_notify = _("%s has commented in a post in General")%(str(self.object.user))
270 pathname = reverse("mural:manage_general") 271 pathname = reverse("mural:manage_general")
271 272
272 - #for user in users:  
273 - # entries.append(MuralVisualizations(viewed = False, user = user, post = self.object))  
274 - # Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "create", "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view})}) 273 + for user in users:
  274 + entries.append(MuralVisualizations(viewed = False, user = user, comment = self.object))
  275 + Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "create_comment", "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view, "post_id": post.get_id()})})
  276 +
  277 + MuralVisualizations.objects.bulk_create(entries)
275 278
276 return super(CommentCreate, self).form_valid(form) 279 return super(CommentCreate, self).form_valid(form)
277 280
@@ -309,20 +312,14 @@ class CommentUpdate(LoginRequiredMixin, generic.UpdateView): @@ -309,20 +312,14 @@ class CommentUpdate(LoginRequiredMixin, generic.UpdateView):
309 self.object.save() 312 self.object.save()
310 313
311 users = User.objects.all().exclude(id = self.request.user.id) 314 users = User.objects.all().exclude(id = self.request.user.id)
312 - entries = []  
313 - 315 +
314 notify_type = "mural" 316 notify_type = "mural"
315 - user_icon = self.object.user.image_url  
316 - #_view = render_to_string("mural/_view.html", {"post": self.object}, self.request)  
317 - simple_notify = _("%s has made a post in General")%(str(self.object.user)) 317 + _view = render_to_string("mural/_view_comment.html", {"comment": self.object}, self.request)
318 pathname = reverse("mural:manage_general") 318 pathname = reverse("mural:manage_general")
319 319
320 - #for user in users:  
321 - # entries.append(MuralVisualizations(viewed = False, user = user, post = self.object))  
322 - # Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "create", "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view})})  
323 -  
324 - #MuralVisualizations.objects.bulk_create(entries)  
325 - 320 + for user in users:
  321 + Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "update_comment", "pathname": pathname, "complete": _view, "comment_id": self.object.id})})
  322 +
326 return super(CommentUpdate, self).form_valid(form) 323 return super(CommentUpdate, self).form_valid(form)
327 324
328 def get_context_data(self, *args, **kwargs): 325 def get_context_data(self, *args, **kwargs):
@@ -356,8 +353,8 @@ class CommentDelete(LoginRequiredMixin, generic.DeleteView): @@ -356,8 +353,8 @@ class CommentDelete(LoginRequiredMixin, generic.DeleteView):
356 notify_type = "mural" 353 notify_type = "mural"
357 pathname = reverse("mural:manage_general") 354 pathname = reverse("mural:manage_general")
358 355
359 - #for user in users:  
360 - # Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete", "pathname": pathname, "post_id": self.object.id})}) 356 + for user in users:
  357 + Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete_comment", "pathname": pathname, "comment_id": self.object.id})})
361 358
362 return reverse_lazy('mural:deleted_comment') 359 return reverse_lazy('mural:deleted_comment')
363 360