X-Git-Url: http://git.ithinksw.org/~jspiros/reader.git/blobdiff_plain/2c563a536795dae3cc7b973595612e245f66f33b..HEAD:/views.py diff --git a/views.py b/views.py index 0a1679b..5dd81c9 100644 --- a/views.py +++ b/views.py @@ -1,10 +1,106 @@ -from .models import Feed, Entry +from .models import Feed, Entry, Subscription, UserEntry from django.shortcuts import render_to_response from django.template import RequestContext +from django.http import HttpResponse +from django.contrib.auth.decorators import login_required +from django.utils import simplejson as json +from django.db.models import Q +from .utils import add_feed, unread_count +@login_required +def lib(request): + return render_to_response('reader/lib.js', context_instance=RequestContext(request), mimetype='text/javascript') + + +@login_required def home(request): return render_to_response('reader/home.html', { - 'entries': Entry.objects.all(), - 'feeds': Feed.objects.all(), - }, context_instance=RequestContext(request)) \ No newline at end of file + 'entries': Entry.objects.filter(feed__subscriptions__user=request.user), + 'feeds': Feed.objects.filter(subscriptions__user=request.user), + }, context_instance=RequestContext(request)) + + +@login_required +def get_subscriptions(request): + root = [] + for subscription in Subscription.objects.filter(user=request.user): + root.append({ + 'id': subscription.pk, + 'type': 'feed', + 'title': subscription.title, + 'unread': unread_count(request.user, feed=subscription.feed) + }) + root.append({ + 'id': -2, + 'type': 'all', + 'title': 'All Entries', + 'unread': unread_count(request.user), + }) + root.append({ + 'id': -1, + 'type': 'unread', + 'title': 'Unread Entries', + 'unread': unread_count(request.user), + }) + root.sort(key=lambda sub: sub['id']) + + return HttpResponse(json.dumps({'len': len(root), 'root': root}), mimetype='application/json') + + +@login_required +def add_subscription(request): + try: + url = request.POST['url'] + add_feed(url, user=request.user) + return HttpResponse() + except: + raise Http404 + + +@login_required +def get_entries(request): + if 'subscription_id' in request.POST: + subscription_id = str(request.POST['subscription_id']) + if subscription_id == '-2': + entries = Entry.objects.filter(feed__subscriptions__user=request.user) + elif subscription_id == '-1': + entries = Entry.objects.filter(feed__subscriptions__user=request.user).exclude(userentries__user=request.user, userentries__read=True) + elif subscription_id.startswith('tag:'): + pass + else: + try: + subscription = Subscription.objects.get(user=request.user, id=subscription_id) + entries = subscription.feed.entries.all() + except Subscription.DoesNotExist: + raise Http404 + else: + raise Http404 + + root = [] + for entry in entries: + root.append({ + 'id': entry.pk, + 'title': entry.title, + 'date': entry.published.isoformat(), + 'content': entry.content if entry.content else entry.summary, + 'link': entry.link if entry.link else entry.feed.link, + }) + root.sort(key=lambda entry: entry['date']) + root.reverse() + + return HttpResponse(json.dumps({'len': len(root), 'root': root}), mimetype='application/json') + + +@login_required +def read_entry(request): + if 'entry_id' in request.POST: + entry = Entry.objects.get(id=request.POST['entry_id']) + userentry, created = UserEntry.objects.get_or_create(entry=entry, user=request.user, defaults={ 'read': True }) + if not created: + userentry.read = True + userentry.save() + else: + raise Http404 + + return HttpResponse() \ No newline at end of file