Show More
@@ -77,4 +77,5 b' function addQuickReply(postId) {' | |||
|
77 | 77 | |
|
78 | 78 | $(document).ready(function(){ |
|
79 | 79 | addGalleryPanel(); |
|
80 | initAutoupdate(); | |
|
80 | 81 | }); |
@@ -1,6 +1,17 b'' | |||
|
1 | 1 | var THREAD_UPDATE_DELAY = 10000; |
|
2 | 2 | |
|
3 | 3 | var loading = false; |
|
4 | var lastUpdateTime = null; | |
|
5 | ||
|
6 | function blink(node) { | |
|
7 | var blinkCount = 2; | |
|
8 | var blinkDelay = 250; | |
|
9 | ||
|
10 | var nodeToAnimate = node; | |
|
11 | for (var i = 0; i < blinkCount; i++) { | |
|
12 | nodeToAnimate = nodeToAnimate.fadeOut(blinkDelay).fadeIn(blinkDelay); | |
|
13 | } | |
|
14 | } | |
|
4 | 15 | |
|
5 | 16 | function updateThread() { |
|
6 | 17 | if (loading) { |
@@ -13,9 +24,8 b' function updateThread() {' | |||
|
13 | 24 | |
|
14 | 25 | var lastPost = threadPosts.last(); |
|
15 | 26 | var threadId = threadPosts.first().attr('id'); |
|
16 | var lastPostId = lastPost.attr('id'); | |
|
17 | 27 | |
|
18 |
var diffUrl = '/api/diff_thread/' + threadId + '/' + last |
|
|
28 | var diffUrl = '/api/diff_thread/' + threadId + '/' + lastUpdateTime + '/'; | |
|
19 | 29 | $.getJSON(diffUrl) |
|
20 | 30 | .success(function(data) { |
|
21 | 31 | var addedPosts = data.added; |
@@ -23,15 +33,31 b' function updateThread() {' | |||
|
23 | 33 | for (var i = 0; i < addedPosts.length; i++) { |
|
24 | 34 | var postText = addedPosts[i]; |
|
25 | 35 | |
|
26 |
var post = $(postText) |
|
|
27 |
post.appendTo(lastPost.parent()) |
|
|
36 | var post = $(postText); | |
|
37 | post.appendTo(lastPost.parent()); | |
|
28 | 38 | addRefLinkPreview(post[0]); |
|
29 | 39 | |
|
30 | 40 | lastPost = post; |
|
41 | blink(post); | |
|
42 | ||
|
31 | 43 | } |
|
32 | 44 | |
|
45 | // TODO Process updated and deleted posts | |
|
46 | ||
|
47 | lastUpdateTime = data.last_update; | |
|
48 | loading = false; | |
|
49 | }) | |
|
50 | .error(function(data) { | |
|
51 | // TODO Show error message that server is unavailable? | |
|
52 | ||
|
33 | 53 | loading = false; |
|
34 | 54 | }); |
|
35 | 55 | } |
|
36 | 56 | |
|
57 | function initAutoupdate() { | |
|
58 | loading = false; | |
|
59 | ||
|
60 | lastUpdateTime = $('.metapanel').attr('data-last-update'); | |
|
61 | ||
|
37 | 62 | setInterval(updateThread, THREAD_UPDATE_DELAY); |
|
63 | } |
@@ -152,7 +152,7 b'' | |||
|
152 | 152 | |
|
153 | 153 | {% get_current_language as LANGUAGE_CODE %} |
|
154 | 154 | |
|
155 | <span class="metapanel"> | |
|
155 | <span class="metapanel" data-last-update="{{ last_update }}"> | |
|
156 | 156 | {% cache 600 thread_meta posts.0.last_edit_time moderator LANGUAGE_CODE %} |
|
157 | 157 | {{ posts.0.get_reply_count }} {% trans 'replies' %}, |
|
158 | 158 | {{ posts.0.get_images_count }} {% trans 'images' %}. |
@@ -53,6 +53,6 b" urlpatterns = patterns(''," | |||
|
53 | 53 | |
|
54 | 54 | # API |
|
55 | 55 | url(r'^api/post/(?P<post_id>\w+)/$', views.get_post, name="get_post"), |
|
56 |
url(r'^api/diff_thread/(?P<thread_id>\w+)/(?P<last_ |
|
|
56 | url(r'^api/diff_thread/(?P<thread_id>\w+)/(?P<last_update_time>\w+)/$', | |
|
57 | 57 | views.api_get_threaddiff, name="get_thread_diff"), |
|
58 | 58 | ) |
@@ -1,6 +1,10 b'' | |||
|
1 | 1 | import hashlib |
|
2 | 2 | import json |
|
3 | 3 | import string |
|
4 | import time | |
|
5 | ||
|
6 | from datetime import datetime | |
|
7 | ||
|
4 | 8 | from django.core import serializers |
|
5 | 9 | from django.core.urlresolvers import reverse |
|
6 | 10 | from django.http import HttpResponseRedirect |
@@ -211,6 +215,7 b' def thread(request, post_id):' | |||
|
211 | 215 | context['bumplimit_progress'] = str( |
|
212 | 216 | float(context['posts_left']) / |
|
213 | 217 | neboard.settings.MAX_POSTS_PER_THREAD * 100) |
|
218 | context["last_update"] = int(time.time() * 1000) | |
|
214 | 219 | |
|
215 | 220 | return render(request, 'boards/thread.html', context) |
|
216 | 221 | |
@@ -409,14 +414,17 b' def api_get_post(request, post_id):' | |||
|
409 | 414 | return HttpResponse(content=json) |
|
410 | 415 | |
|
411 | 416 | |
|
412 |
def api_get_threaddiff(request, thread_id, last_ |
|
|
417 | def api_get_threaddiff(request, thread_id, last_update_time): | |
|
413 | 418 | thread = get_object_or_404(Post, id=thread_id) |
|
414 | posts = Post.objects.filter(thread=thread, id__gt=last_post_id) | |
|
419 | ||
|
420 | filter_time = datetime.fromtimestamp(float(last_update_time) / 1000) | |
|
421 | added_posts = Post.objects.filter(thread=thread, pub_time__gt=filter_time) | |
|
415 | 422 | |
|
416 | 423 | json_data = { |
|
417 | 'added': [] | |
|
424 | 'added': [], | |
|
425 | 'last_update' : int(time.time() * 1000), | |
|
418 | 426 | } |
|
419 | for post in posts: | |
|
427 | for post in added_posts: | |
|
420 | 428 | json_data['added'].append(get_post(request, post.id).content.strip()) |
|
421 | 429 | |
|
422 | 430 | return HttpResponse(content=json.dumps(json_data)) |
General Comments 0
You need to be logged in to leave comments.
Login now