server level files directly, don't try to render them on the fly
This commit is contained in:
parent
b669e75af1
commit
cf6b850de6
1 changed files with 8 additions and 32 deletions
|
@ -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
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue