diff --git a/pinry/core/feeds.py b/pinry/core/feeds.py index 0340373..2d3e839 100644 --- a/pinry/core/feeds.py +++ b/pinry/core/feeds.py @@ -3,8 +3,10 @@ from __future__ import unicode_literals from django.contrib.syndication.views import Feed from django.contrib.sites.models import get_current_site from django.shortcuts import get_object_or_404 +from django.contrib.auth.models import User from django_images.models import Thumbnail +from taggit.models import Tag from .models import Pin @@ -21,6 +23,7 @@ class LatestPins(Feed): description = 'The latest pins from around the internet.' domain_name = None + item_enclosure_mime_type = 'image/jpeg' def get_object(self, request): @@ -53,3 +56,94 @@ class LatestPins(Feed): def item_enclosure_length(self, item): return filter_generator_for('standard')(item.image).image.size + + +class LatestUserPins(Feed): + description = 'The latest pins from around the internet.' + + domain_name = None + + item_enclosure_mime_type = 'image/jpeg' + + def get_object(self, request, user): + """ + Doing this as a fix for Django's not including the domain name in enclosure urls. + """ + request_type = 'http' + if request.is_secure(): request_type = 'https' + self.domain_name = ''.join([request_type, '://', get_current_site(request).domain]) + return get_object_or_404(User, username=user) + + def title(self, obj): + return 'Latest Pins from ' + obj.username + + def link(self, obj): + return '/pins/user/' + obj.username + '/' + + def items(self, obj): + return Pin.objects.filter(submitter=obj).order_by('-published')[:15] + + def item_pubdate(self, item): + return item.published + + def item_link(self, item): + return item.url + + def item_title(self, item): + return item.url + + def item_description(self, item): + tags = ', '.join(tag.name for tag in item.tags.all()) + return ''.join(['Description: ', item.description or 'None', ' | Tags: ', tags or 'None']) + + def item_enclosure_url(self, item): + return self.domain_name + unicode(filter_generator_for('standard')(item.image).image.url) + + def item_enclosure_length(self, item): + return filter_generator_for('standard')(item.image).image.size + + +class LatestTagPins(Feed): + link = '/' + description = 'The latest pins from around the internet.' + + domain_name = None + + item_enclosure_mime_type = 'image/jpeg' + + def get_object(self, request, tag): + """ + Doing this as a fix for Django's not including the domain name in enclosure urls. + """ + request_type = 'http' + if request.is_secure(): request_type = 'https' + self.domain_name = ''.join([request_type, '://', get_current_site(request).domain]) + return get_object_or_404(Tag, name=tag) + + def title(self, obj): + return 'Latest Pins in ' + obj.name + + def link(self, obj): + return '/pins/tag/' + obj.name + '/' + + def items(self, obj): + return Pin.objects.filter(tags=obj).order_by('-published')[:15] + + def item_pubdate(self, item): + return item.published + + def item_link(self, item): + return item.url + + def item_title(self, item): + return item.url + + def item_description(self, item): + tags = ', '.join(tag.name for tag in item.tags.all()) + return ''.join(['Description: ', item.description or 'None', ' | Tags: ', tags or 'None']) + + def item_enclosure_url(self, item): + return self.domain_name + unicode(filter_generator_for('standard')(item.image).image.url) + + def item_enclosure_length(self, item): + return filter_generator_for('standard')(item.image).image.size diff --git a/pinry/core/urls.py b/pinry/core/urls.py index a428b49..338c139 100644 --- a/pinry/core/urls.py +++ b/pinry/core/urls.py @@ -4,7 +4,7 @@ from django.views.generic import TemplateView from tastypie.api import Api from .api import ImageResource, ThumbnailResource, PinResource, UserResource -from .feeds import LatestPins +from .feeds import LatestPins, LatestUserPins, LatestTagPins from .views import CreateImage @@ -18,6 +18,8 @@ v1_api.register(UserResource()) urlpatterns = patterns('', url(r'^api/', include(v1_api.urls, namespace='api')), + url(r'feeds/latest-pins/tag/(?P(\w|-)+)/', LatestTagPins()), + url(r'feeds/latest-pins/user/(?P(\w|-)+)/', LatestUserPins()), url(r'feeds/latest-pins/', LatestPins()), url(r'^pins/pin-form/$', TemplateView.as_view(template_name='core/pin_form.html'), diff --git a/pinry/templates/base.html b/pinry/templates/base.html index 770d7bc..78a69f6 100644 --- a/pinry/templates/base.html +++ b/pinry/templates/base.html @@ -5,7 +5,13 @@ - + {% if request.resolver_match.kwargs.user %} + + {% elif request.resolver_match.kwargs.tag %} + + {% else %} + + {% endif %}