Update Celery to 4.3
[wolnelektury.git] / src / catalogue / feeds.py
1 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
2 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
3 #
4 from django.contrib.sites.models import Site
5 from django.contrib.syndication.views import Feed
6 from django.urls import reverse
7
8 from catalogue import models
9
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': type, 'all': 'all' in request.GET}
33
34     def title(self, args):
35         return self.titles[args['type']]
36
37     def link(self, args):
38         return reverse('audiobook_feed', args=(args['type'],))
39
40     def items(self, args):
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=args['type'])
46         if not args['all']:
47             objects = objects[:50]
48         return objects
49
50     def item_title(self, item):
51         return item.name
52
53     def item_categories(self, item):
54         return sorted(item.book.authors().values_list('name', flat=True))
55
56     def item_description(self, item):
57         lines = []
58         artist = item.extra_info.get('artist_name', None)
59         if artist is not None:
60             lines.append(u'Czyta: %s' % artist)
61         director = item.extra_info.get('director_name', None)
62         if director is not None:
63             lines.append(u'Reżyseria: %s' % director)
64         return u'<br/>\n'.join(lines)
65
66     def item_link(self, item):
67         return item.book.get_absolute_url()
68
69     def item_guid(self, item):
70         return absolute_url(item.file.url)
71
72     def item_enclosure_url(self, item):
73         return absolute_url(item.file.url)
74
75     def item_enclosure_length(self, item):
76         return item.file.size
77
78     def item_enclosure_mime_type(self, item):
79         return self.mime_types[item.type]
80
81     def item_pubdate(self, item):
82         return item.uploaded_at