Merge branch 'master' of git@github.com:fnp/wolnelektury
[wolnelektury.git] / apps / catalogue / feeds.py
1 # -*- coding: utf-8 -*-
2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
4 #
5 from django.contrib.sites.models import Site
6 from django.contrib.syndication.views import Feed
7 from django.core.urlresolvers import reverse
8
9 from catalogue import models
10
11 def absolute_url(url):
12     return "http://%s%s" % (Site.objects.get_current().domain, url)
13
14
15 class AudiobookFeed(Feed):
16     description = "Audiobooki ostatnio dodane do serwisu Wolne Lektury."
17
18     mime_types = {
19         'mp3': 'audio/mpeg',
20         'ogg': 'audio/ogg',
21         'daisy': 'application/zip',
22     }
23
24     titles = {
25         'all': 'WolneLektury.pl - audiobooki we wszystkich formatach',
26         'mp3': 'WolneLektury.pl - audiobooki w formacie MP3',
27         'ogg': 'WolneLektury.pl - audiobooki w formacie Ogg Vorbis',
28         'daisy': 'WolneLektury.pl - audiobooki w formacie DAISY',
29     }
30
31     def get_object(self, request, type):
32         return type
33
34     def title(self, type):
35         return self.titles[type]
36
37     def link(self, type):
38         return reverse('audiobook_feed', args=(type,))
39
40     def items(self, type):
41         objects = models.BookMedia.objects.order_by('-uploaded_at')
42         if type == 'all':
43             objects = objects.filter(type__in=('mp3', 'ogg', 'daisy'))
44         else:
45             objects = objects.filter(type=type)
46         return objects[:20]
47
48     def item_title(self, item):
49         return item.name
50
51     def item_description(self, item):
52         lines = []
53         artist = item.get_extra_info_value().get('artist_name', None)
54         if artist is not None:
55             lines.append(u'Czyta: %s' % artist)
56         director = item.get_extra_info_value().get('artist_name', None)
57         if director is not None:
58             lines.append(u'Reżyseruje: %s' % director)
59         return u'<br/>\n'.join(lines)
60
61     def item_link(self, item):
62         if item.book_set.exists():
63             return item.book_set.all()[0].get_absolute_url()
64         else:
65             return item.file.url
66
67     def item_guid(self, item):
68         return absolute_url(item.file.url)
69
70     def item_enclosure_url(self, item):
71         return absolute_url(item.file.url)
72
73     def item_enclosure_length(self, item):
74         return item.file.size
75
76     def item_enclosure_mime_type(self, item):
77         return self.mime_types[item.type]
78
79     def item_pubdate(self, item):
80         return item.uploaded_at