server level files directly, don't try to render them on the fly

This commit is contained in:
Laura Klünder 2016-12-19 15:19:10 +01:00
parent b669e75af1
commit cf6b850de6

View file

@ -1,46 +1,22 @@
import os
import mimetypes
from django.conf import settings
from django.core.files import File
from django.http import HttpResponse
from PIL import Image
from c3nav.mapdata.utils.misc import get_render_path
class LevelComposer:
images = {}
images_mtimes = {}
@classmethod
def _get_image(cls, filename, cached=True):
mtime = None
if cached:
mtime = os.path.getmtime(filename)
if filename in cls.images:
if cls.images_mtimes[filename] == mtime:
return cls.images[filename]
img = Image.open(filename)
if cached:
cls.images[filename] = img
cls.images_mtimes[filename] = mtime
return img
def _get_public_level_image(self, level):
return self._get_image(get_render_path('png', level.name, 'full', True))
def _get_complete_level_image(self, level):
return self._get_image(get_render_path('png', level.name, 'full', False))
def get_level_image(self, request, level):
if settings.DIRECT_EDITING:
img = self._get_complete_level_image(level)
img = get_render_path('png', level.name, 'full', True)
else:
img = self._get_public_level_image(level)
response = HttpResponse(content_type="image/png")
img.save(response, 'PNG')
img = get_render_path('png', level.name, 'full', False)
response = HttpResponse(content_type=mimetypes.guess_type(img)[0])
for chunk in File(open(img, 'rb')).chunks():
response.write(chunk)
return response