##// END OF EJS Templates
Update thread by time, not post id. This will help with getting updated posts
neko259 -
r363:69d0a4bf thread_autoupdate
parent child Browse files
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 + '/' + lastPostId + '/';
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).hide();
27 post.appendTo(lastPost.parent()).show('slow');
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_post_id>\w+)/$',
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_post_id):
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