Show More
@@ -77,4 +77,5 b' function addQuickReply(postId) {' | |||||
77 |
|
77 | |||
78 | $(document).ready(function(){ |
|
78 | $(document).ready(function(){ | |
79 | addGalleryPanel(); |
|
79 | addGalleryPanel(); | |
|
80 | initAutoupdate(); | |||
80 | }); |
|
81 | }); |
@@ -1,6 +1,17 b'' | |||||
1 | var THREAD_UPDATE_DELAY = 10000; |
|
1 | var THREAD_UPDATE_DELAY = 10000; | |
2 |
|
2 | |||
3 | var loading = false; |
|
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 | function updateThread() { |
|
16 | function updateThread() { | |
6 | if (loading) { |
|
17 | if (loading) { | |
@@ -13,9 +24,8 b' function updateThread() {' | |||||
13 |
|
24 | |||
14 | var lastPost = threadPosts.last(); |
|
25 | var lastPost = threadPosts.last(); | |
15 | var threadId = threadPosts.first().attr('id'); |
|
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 | $.getJSON(diffUrl) |
|
29 | $.getJSON(diffUrl) | |
20 | .success(function(data) { |
|
30 | .success(function(data) { | |
21 | var addedPosts = data.added; |
|
31 | var addedPosts = data.added; | |
@@ -23,15 +33,31 b' function updateThread() {' | |||||
23 | for (var i = 0; i < addedPosts.length; i++) { |
|
33 | for (var i = 0; i < addedPosts.length; i++) { | |
24 | var postText = addedPosts[i]; |
|
34 | var postText = addedPosts[i]; | |
25 |
|
35 | |||
26 |
var post = $(postText) |
|
36 | var post = $(postText); | |
27 |
post.appendTo(lastPost.parent()) |
|
37 | post.appendTo(lastPost.parent()); | |
28 | addRefLinkPreview(post[0]); |
|
38 | addRefLinkPreview(post[0]); | |
29 |
|
39 | |||
30 | lastPost = post; |
|
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 | loading = false; |
|
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 | setInterval(updateThread, THREAD_UPDATE_DELAY); |
|
62 | setInterval(updateThread, THREAD_UPDATE_DELAY); | |
|
63 | } |
@@ -152,7 +152,7 b'' | |||||
152 |
|
152 | |||
153 | {% get_current_language as LANGUAGE_CODE %} |
|
153 | {% get_current_language as LANGUAGE_CODE %} | |
154 |
|
154 | |||
155 | <span class="metapanel"> |
|
155 | <span class="metapanel" data-last-update="{{ last_update }}"> | |
156 | {% cache 600 thread_meta posts.0.last_edit_time moderator LANGUAGE_CODE %} |
|
156 | {% cache 600 thread_meta posts.0.last_edit_time moderator LANGUAGE_CODE %} | |
157 | {{ posts.0.get_reply_count }} {% trans 'replies' %}, |
|
157 | {{ posts.0.get_reply_count }} {% trans 'replies' %}, | |
158 | {{ posts.0.get_images_count }} {% trans 'images' %}. |
|
158 | {{ posts.0.get_images_count }} {% trans 'images' %}. |
@@ -53,6 +53,6 b" urlpatterns = patterns(''," | |||||
53 |
|
53 | |||
54 | # API |
|
54 | # API | |
55 | url(r'^api/post/(?P<post_id>\w+)/$', views.get_post, name="get_post"), |
|
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 | views.api_get_threaddiff, name="get_thread_diff"), |
|
57 | views.api_get_threaddiff, name="get_thread_diff"), | |
58 | ) |
|
58 | ) |
@@ -1,6 +1,10 b'' | |||||
1 | import hashlib |
|
1 | import hashlib | |
2 | import json |
|
2 | import json | |
3 | import string |
|
3 | import string | |
|
4 | import time | |||
|
5 | ||||
|
6 | from datetime import datetime | |||
|
7 | ||||
4 | from django.core import serializers |
|
8 | from django.core import serializers | |
5 | from django.core.urlresolvers import reverse |
|
9 | from django.core.urlresolvers import reverse | |
6 | from django.http import HttpResponseRedirect |
|
10 | from django.http import HttpResponseRedirect | |
@@ -211,6 +215,7 b' def thread(request, post_id):' | |||||
211 | context['bumplimit_progress'] = str( |
|
215 | context['bumplimit_progress'] = str( | |
212 | float(context['posts_left']) / |
|
216 | float(context['posts_left']) / | |
213 | neboard.settings.MAX_POSTS_PER_THREAD * 100) |
|
217 | neboard.settings.MAX_POSTS_PER_THREAD * 100) | |
|
218 | context["last_update"] = int(time.time() * 1000) | |||
214 |
|
219 | |||
215 | return render(request, 'boards/thread.html', context) |
|
220 | return render(request, 'boards/thread.html', context) | |
216 |
|
221 | |||
@@ -409,14 +414,17 b' def api_get_post(request, post_id):' | |||||
409 | return HttpResponse(content=json) |
|
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 | thread = get_object_or_404(Post, id=thread_id) |
|
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 | json_data = { |
|
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 | json_data['added'].append(get_post(request, post.id).content.strip()) |
|
428 | json_data['added'].append(get_post(request, post.id).content.strip()) | |
421 |
|
429 | |||
422 | return HttpResponse(content=json.dumps(json_data)) |
|
430 | return HttpResponse(content=json.dumps(json_data)) |
General Comments 0
You need to be logged in to leave comments.
Login now