diff --git a/boards/models/attachment/__init__.py b/boards/models/attachment/__init__.py --- a/boards/models/attachment/__init__.py +++ b/boards/models/attachment/__init__.py @@ -6,14 +6,15 @@ from random import random from django.db import models -from boards.models.attachment.viewers import AbstractViewer, WebmViewer - +from boards.models.attachment.viewers import AbstractViewer, WebmViewer, \ + AudioViewer FILES_DIRECTORY = 'files/' FILE_EXTENSION_DELIMITER = '.' VIEWERS = ( WebmViewer, + AudioViewer, ) diff --git a/boards/models/attachment/viewers.py b/boards/models/attachment/viewers.py --- a/boards/models/attachment/viewers.py +++ b/boards/models/attachment/viewers.py @@ -1,6 +1,14 @@ from django.template.defaultfilters import filesizeformat from django.templatetags.static import static +FILE_STUB_IMAGE = 'images/file.png' + +FILE_TYPE_WEBM = 'webm' +FILE_TYPES_AUDIO = ( + 'ogg', + 'mp3', +) + class AbstractViewer: def __init__(self, file, file_type): @@ -8,33 +16,35 @@ class AbstractViewer: self.file_type = file_type @staticmethod - def get_viewer(file_type, file): - for viewer in VIEWERS: - if viewer.supports(file_type): - return viewer(file) - return AbstractViewer(file) - - @staticmethod def supports(file_type): - return true + return True def get_view(self): return '
'\ ''\ ''\ '
{}, {}
'\ - '
'.format(self.file.url, static('images/file.png'), self.file_type, - filesizeformat(self.file.size)) + ''.format(self.file.url, static(FILE_STUB_IMAGE), + self.file_type, filesizeformat(self.file.size)) class WebmViewer(AbstractViewer): @staticmethod def supports(file_type): - return file_type == 'webm' + return file_type == FILE_TYPE_WEBM def get_view(self): return '
'\ - '
'.format(self.file.url) + +class AudioViewer(AbstractViewer): + @staticmethod + def supports(file_type): + return file_type in FILE_TYPES_AUDIO + + def get_view(self): + return '
' \ + '
'.format(self.file.url)