Commit 968668f4034a8296b126521bf4d5715056e7d122
1 parent
2146f0a6
Exists in
master
and in
3 other branches
Adding post update/delete propagation to other users
Showing
2 changed files
with
76 additions
and
28 deletions
Show diff stats
amadeus/static/js/socket.js
| ... | ... | @@ -4,48 +4,79 @@ if (("Notification" in window)) { |
| 4 | 4 | } |
| 5 | 5 | } |
| 6 | 6 | |
| 7 | - | |
| 8 | 7 | socket = new WebSocket("ws://" + window.location.host + "/"); |
| 9 | 8 | |
| 10 | 9 | socket.onmessage = function(e) { |
| 11 | 10 | content = JSON.parse(e.data); |
| 12 | 11 | |
| 13 | 12 | if (content.type == "mural") { |
| 14 | - if (window.location.pathname == content.pathname) { | |
| 15 | - $('.posts').prepend(content.complete); | |
| 13 | + if (content.subtype == "create") { | |
| 14 | + muralNotificationCreate(content); | |
| 15 | + } else if (content.subtype == "update") { | |
| 16 | + muralNotificationUpdate(content); | |
| 17 | + } else if (content.subtype == "delete") { | |
| 18 | + muralNotificationDelete(content); | |
| 19 | + } | |
| 20 | + } | |
| 21 | +} | |
| 22 | +// Call onopen directly if socket is already open | |
| 23 | +if (socket.readyState == WebSocket.OPEN) socket.onopen(); | |
| 16 | 24 | |
| 17 | - $('.no-subjects').attr('style', 'display:none'); | |
| 18 | - } else { | |
| 19 | - $('.mural_badge').each(function () { | |
| 20 | - var actual = $(this).text(); | |
| 25 | +function muralNotificationCreate(content) { | |
| 26 | + if (window.location.pathname == content.pathname) { | |
| 27 | + $('.posts').prepend(content.complete); | |
| 21 | 28 | |
| 22 | - if (actual != "+99") { | |
| 23 | - actual = parseInt(actual, 10) + 1; | |
| 29 | + $('.no-subjects').attr('style', 'display:none'); | |
| 30 | + } else { | |
| 31 | + $('.mural_badge').each(function () { | |
| 32 | + var actual = $(this).text(); | |
| 24 | 33 | |
| 25 | - if (actual > 99) { | |
| 26 | - actual = "+99"; | |
| 27 | - } | |
| 34 | + if (actual != "+99") { | |
| 35 | + actual = parseInt(actual, 10) + 1; | |
| 28 | 36 | |
| 29 | - $(this).text(actual); | |
| 37 | + if (actual > 99) { | |
| 38 | + actual = "+99"; | |
| 30 | 39 | } |
| 31 | 40 | |
| 32 | - $(this).show(); | |
| 33 | - }); | |
| 41 | + $(this).text(actual); | |
| 42 | + } | |
| 43 | + | |
| 44 | + $(this).show(); | |
| 45 | + }); | |
| 46 | + } | |
| 47 | + | |
| 48 | + if (("Notification" in window)) { | |
| 49 | + var options = { | |
| 50 | + icon: content.user_icon, | |
| 51 | + body: content.simple | |
| 34 | 52 | } |
| 35 | 53 | |
| 36 | - if (("Notification" in window)) { | |
| 37 | - var options = { | |
| 38 | - icon: content.user_icon, | |
| 39 | - body: content.simple | |
| 40 | - } | |
| 54 | + if (Notification.permission === "granted") { | |
| 55 | + var notification = new Notification("", options); | |
| 41 | 56 | |
| 42 | - if (Notification.permission === "granted") { | |
| 43 | - var notification = new Notification("", options); | |
| 57 | + setTimeout(notification.close.bind(notification), 3000); | |
| 58 | + } | |
| 59 | + } | |
| 60 | +} | |
| 61 | + | |
| 62 | +function muralNotificationUpdate(content) { | |
| 63 | + if (window.location.pathname == content.pathname) { | |
| 64 | + var post = $("#post-" + content.post_id); | |
| 65 | + | |
| 66 | + if (post.is(":visible")) { | |
| 67 | + post.before(content.complete); | |
| 44 | 68 | |
| 45 | - setTimeout(notification.close.bind(notification), 3000); | |
| 46 | - } | |
| 47 | - } | |
| 69 | + post.remove(); | |
| 70 | + } | |
| 48 | 71 | } |
| 49 | 72 | } |
| 50 | -// Call onopen directly if socket is already open | |
| 51 | -if (socket.readyState == WebSocket.OPEN) socket.onopen(); | |
| 52 | 73 | \ No newline at end of file |
| 74 | + | |
| 75 | +function muralNotificationDelete(content) { | |
| 76 | + if (window.location.pathname == content.pathname) { | |
| 77 | + var post = $("#post-" + content.post_id); | |
| 78 | + | |
| 79 | + if (post.is(":visible")) { | |
| 80 | + post.remove(); | |
| 81 | + } | |
| 82 | + } | |
| 83 | +} | |
| 53 | 84 | \ No newline at end of file | ... | ... |
mural/views.py
| ... | ... | @@ -83,7 +83,7 @@ class GeneralCreate(LoginRequiredMixin, generic.edit.CreateView): |
| 83 | 83 | |
| 84 | 84 | for user in users: |
| 85 | 85 | entries.append(MuralVisualizations(viewed = False, user = user, post = self.object)) |
| 86 | - Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view})}) | |
| 86 | + 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})}) | |
| 87 | 87 | |
| 88 | 88 | MuralVisualizations.objects.bulk_create(entries) |
| 89 | 89 | |
| ... | ... | @@ -119,6 +119,15 @@ class GeneralUpdate(LoginRequiredMixin, generic.UpdateView): |
| 119 | 119 | self.object.edited = True |
| 120 | 120 | |
| 121 | 121 | self.object.save() |
| 122 | + | |
| 123 | + users = User.objects.all().exclude(id = self.request.user.id) | |
| 124 | + | |
| 125 | + notify_type = "mural" | |
| 126 | + _view = render_to_string("mural/_view.html", {"post": self.object}, self.request) | |
| 127 | + pathname = reverse("mural:manage_general") | |
| 128 | + | |
| 129 | + for user in users: | |
| 130 | + Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "update", "pathname": pathname, "complete": _view, "post_id": self.object.id})}) | |
| 122 | 131 | |
| 123 | 132 | return super(GeneralUpdate, self).form_valid(form) |
| 124 | 133 | |
| ... | ... | @@ -147,6 +156,14 @@ class GeneralDelete(LoginRequiredMixin, generic.DeleteView): |
| 147 | 156 | return context |
| 148 | 157 | |
| 149 | 158 | def get_success_url(self): |
| 159 | + users = User.objects.all().exclude(id = self.request.user.id) | |
| 160 | + | |
| 161 | + notify_type = "mural" | |
| 162 | + pathname = reverse("mural:manage_general") | |
| 163 | + | |
| 164 | + for user in users: | |
| 165 | + Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete", "pathname": pathname, "post_id": self.object.id})}) | |
| 166 | + | |
| 150 | 167 | return reverse_lazy('mural:deleted_post') |
| 151 | 168 | |
| 152 | 169 | def render_gen_post(request, post, msg): | ... | ... |