##// END OF EJS Templates
Treat .mpeg files as video
neko259 -
r1342:ed9d0078 default
parent child Browse files
Show More
@@ -1,83 +1,84 b''
1 1 from django.template.defaultfilters import filesizeformat
2 2 from django.contrib.staticfiles.templatetags.staticfiles import static
3 3
4 4 FILE_STUB_IMAGE = 'images/file.png'
5 5
6 6 FILE_TYPES_VIDEO = (
7 7 'webm',
8 8 'mp4',
9 'mpeg',
9 10 )
10 11 FILE_TYPE_SVG = 'svg'
11 12 FILE_TYPES_AUDIO = (
12 13 'ogg',
13 14 'mp3',
14 15 'opus',
15 16 )
16 17
17 18 PLAIN_FILE_FORMATS = {
18 19 'pdf': 'pdf',
19 20 'djvu': 'djvu',
20 21 'txt': 'txt',
21 22 }
22 23
23 24
24 25 def get_viewers():
25 26 return AbstractViewer.__subclasses__()
26 27
27 28
28 29 class AbstractViewer:
29 30 def __init__(self, file, file_type):
30 31 self.file = file
31 32 self.file_type = file_type
32 33
33 34 @staticmethod
34 35 def supports(file_type):
35 36 return True
36 37
37 38 def get_view(self):
38 39 return '<div class="image">'\
39 40 '{}'\
40 41 '<div class="image-metadata"><a href="{}" download >{}, {}</a></div>'\
41 42 '</div>'.format(self.get_format_view(), self.file.url,
42 43 self.file_type, filesizeformat(self.file.size))
43 44
44 45 def get_format_view(self):
45 46 if self.file_type in PLAIN_FILE_FORMATS:
46 47 image = 'images/fileformats/{}.png'.format(
47 48 PLAIN_FILE_FORMATS[self.file_type])
48 49 else:
49 50 image = FILE_STUB_IMAGE
50 51
51 52 return '<a href="{}">'\
52 53 '<img src="{}" width="200" height="150"/>'\
53 54 '</a>'.format(self.file.url, static(image))
54 55
55 56
56 57 class VideoViewer(AbstractViewer):
57 58 @staticmethod
58 59 def supports(file_type):
59 60 return file_type in FILE_TYPES_VIDEO
60 61
61 62 def get_format_view(self):
62 63 return '<video width="200" height="150" controls src="{}"></video>'\
63 64 .format(self.file.url)
64 65
65 66
66 67 class AudioViewer(AbstractViewer):
67 68 @staticmethod
68 69 def supports(file_type):
69 70 return file_type in FILE_TYPES_AUDIO
70 71
71 72 def get_format_view(self):
72 73 return '<audio controls src="{}"></audio>'.format(self.file.url)
73 74
74 75
75 76 class SvgViewer(AbstractViewer):
76 77 @staticmethod
77 78 def supports(file_type):
78 79 return file_type == FILE_TYPE_SVG
79 80
80 81 def get_format_view(self):
81 82 return '<a class="thumb" href="{}">'\
82 83 '<img class="post-image-preview" width="200" height="150" src="{}" />'\
83 84 '</a>'.format(self.file.url, self.file.url)
General Comments 0
You need to be logged in to leave comments. Login now