|
|
from django.core.urlresolvers import reverse
|
|
|
from django.shortcuts import render
|
|
|
|
|
|
from boards.abstracts.paginator import get_paginator
|
|
|
from boards.abstracts.settingsmanager import get_settings_manager
|
|
|
from boards.models import Post
|
|
|
from boards.views.base import BaseBoardView
|
|
|
from boards.views.posting_mixin import PostMixin
|
|
|
|
|
|
POSTS_PER_PAGE = 10
|
|
|
|
|
|
PARAMETER_CURRENT_PAGE = 'current_page'
|
|
|
PARAMETER_PAGINATOR = 'paginator'
|
|
|
PARAMETER_POSTS = 'posts'
|
|
|
|
|
|
PARAMETER_PREV_LINK = 'prev_page_link'
|
|
|
PARAMETER_NEXT_LINK = 'next_page_link'
|
|
|
|
|
|
TEMPLATE = 'boards/feed.html'
|
|
|
DEFAULT_PAGE = 1
|
|
|
|
|
|
|
|
|
class FeedView(PostMixin, BaseBoardView):
|
|
|
|
|
|
def get(self, request):
|
|
|
page = request.GET.get('page', DEFAULT_PAGE)
|
|
|
tripcode = request.GET.get('tripcode', None)
|
|
|
favorites = 'favorites' in request.GET
|
|
|
|
|
|
params = self.get_context_data(request=request)
|
|
|
|
|
|
settings_manager = get_settings_manager(request)
|
|
|
|
|
|
posts = Post.objects.exclude(
|
|
|
threads__tags__in=settings_manager.get_hidden_tags()).order_by(
|
|
|
'-pub_time').prefetch_related('images', 'thread', 'threads')
|
|
|
if tripcode:
|
|
|
posts = posts.filter(tripcode=tripcode)
|
|
|
if favorites:
|
|
|
fav_thread_ops = Post.objects.filter(id__in=settings_manager.get_fav_threads().keys())
|
|
|
fav_threads = [op.get_thread() for op in fav_thread_ops]
|
|
|
posts = posts.filter(threads__in=fav_threads)
|
|
|
|
|
|
paginator = get_paginator(posts, POSTS_PER_PAGE)
|
|
|
paginator.current_page = int(page)
|
|
|
|
|
|
params[PARAMETER_POSTS] = paginator.page(page).object_list
|
|
|
|
|
|
paginator.set_url(reverse('feed'), request.GET.dict())
|
|
|
|
|
|
self.get_page_context(paginator, params, page)
|
|
|
|
|
|
return render(request, TEMPLATE, params)
|
|
|
|
|
|
# TODO Dedup this into PagedMixin
|
|
|
def get_page_context(self, paginator, params, page):
|
|
|
"""
|
|
|
Get pagination context variables
|
|
|
"""
|
|
|
|
|
|
params[PARAMETER_PAGINATOR] = paginator
|
|
|
current_page = paginator.page(int(page))
|
|
|
params[PARAMETER_CURRENT_PAGE] = current_page
|
|
|
if current_page.has_previous():
|
|
|
params[PARAMETER_PREV_LINK] = paginator.get_page_url(
|
|
|
current_page.previous_page_number())
|
|
|
if current_page.has_next():
|
|
|
params[PARAMETER_NEXT_LINK] = paginator.get_page_url(
|
|
|
current_page.next_page_number())
|
|
|
|
|
|
|