import re import json import time from datetime import datetime from datetime import date from datetime import timedelta from django.conf import settings from django.http import HttpResponse from django.shortcuts import render_to_response from backend.models import SJLike from backend.models import SJRoom from backend.models import SJContent from backend.models import SJSearch from backend.models import SJUserProfile from backend.views import is_number from backend.views import is_image from backend.views import videos_response_list from backend.views import ROOM_VIDEO_LOG_SIZE from django.db.models import Q LIMIT = 40 BLOCKED_DOMAINS = { 'dvdbeaver.com': True, '4chan.org': True, 'yahoo.com': True, 'adultswim.com': True, } def bg(request): """ Backgrounds view """ query = Q(content_type='background') if request.GET.get('start', None): if is_number(request.GET['start']): query &= Q(id__lt=int(request.GET['start'])) limit = LIMIT if request.GET.get('limit', None): if is_number(request.GET['limit']): limit = int(request.GET['limit']) backgrounds = SJContent.objects.filter(query).order_by('-id')[0:limit] filtered_backgrounds = [] for b in backgrounds: s = b.settings url = s['url'] if not url.startswith('http:'): continue domain = '' try: domain = '.'.join(url.split('/')[2].split('.')[-2:]) except: continue if domain in BLOCKED_DOMAINS: continue b.domain = domain filtered_backgrounds.append(b) return render_to_response( 'backgrounds.html', { 'SERVER_HOST': settings.SERVER_HOST, 'SERVER_PORT': settings.SERVER_PORT, 'lowest_id': backgrounds[limit - 1].id, 'backgrounds': filtered_backgrounds, 'domain': domain, } ) def topvideos(request): """ Top videos view """ today = datetime.fromtimestamp(time.mktime(date.today().timetuple())) tomorrow = today + timedelta(days=1) yersterday = today - timedelta(days=1) videos = SJContent.objects.filter(content_type='video') top_today = videos.filter(Q(datetime__gt=today) & Q(datetime__lt=tomorrow))[0:ROOM_VIDEO_LOG_SIZE] top_yesterday = videos.filter(Q(datetime__gt=yersterday) & Q(datetime__lt=today))[0:ROOM_VIDEO_LOG_SIZE] top_alltime = videos[0:ROOM_VIDEO_LOG_SIZE] response = render_to_response( 'topvideos.html', { 'SERVER_HOST': settings.SERVER_HOST, 'SERVER_PORT': settings.SERVER_PORT, 'top_today': json.dumps(videos_response_list(top_today)), 'top_yesterday': json.dumps(videos_response_list(top_yesterday)), 'top_alltime': json.dumps(videos_response_list(top_alltime)), } ) response['Pragma'] = 'no-cache' return response def directory(request): """ Directory view """ r = [] for u in SJUserProfile.objects.order_by('-score'): r.append({ 'id': u.id, 'name': u.nickname, 'score': u.score }) response = render_to_response( 'directory.html', { 'SERVER_HOST': settings.SERVER_HOST, 'SERVER_PORT': settings.SERVER_PORT, 'directory': json.dumps(r), } ) response['Pragma'] = 'no-cache' return response