Factor out thumbnail()

This commit is contained in:
Erik Johnston 2015-07-23 15:59:32 +01:00
parent 33d83f3615
commit 459085184c

View File

@ -225,12 +225,8 @@ class BaseMediaResource(Resource):
else: else:
return () return ()
@defer.inlineCallbacks def _generate_thumbnail(self, input_path, t_path, t_width, t_height,
def _generate_local_exact_thumbnail(self, media_id, t_width, t_height,
t_method, t_type): t_method, t_type):
input_path = self.filepaths.local_media_filepath(media_id)
def thumbnail():
thumbnailer = Thumbnailer(input_path) thumbnailer = Thumbnailer(input_path)
m_width = thumbnailer.width m_width = thumbnailer.width
m_height = thumbnailer.height m_height = thumbnailer.height
@ -242,11 +238,6 @@ class BaseMediaResource(Resource):
) )
return return
t_path = self.filepaths.local_media_thumbnail(
media_id, t_width, t_height, t_type, t_method
)
self._makedirs(t_path)
if t_method == "crop": if t_method == "crop":
t_len = thumbnailer.crop(t_path, t_width, t_height, t_type) t_len = thumbnailer.crop(t_path, t_width, t_height, t_type)
elif t_method == "scale": elif t_method == "scale":
@ -254,12 +245,24 @@ class BaseMediaResource(Resource):
else: else:
t_len = None t_len = None
return t_len, t_path return t_len
res = yield threads.deferToThread(thumbnail) @defer.inlineCallbacks
def _generate_local_exact_thumbnail(self, media_id, t_width, t_height,
t_method, t_type):
input_path = self.filepaths.local_media_filepath(media_id)
if res: t_path = self.filepaths.local_media_thumbnail(
t_len, t_path = res media_id, t_width, t_height, t_type, t_method
)
self._makedirs(t_path)
t_len = yield threads.deferToThread(
self._generate_thumbnail,
input_path, t_path, t_width, t_height, t_method, t_type
)
if t_len:
yield self.store.store_local_thumbnail( yield self.store.store_local_thumbnail(
media_id, t_width, t_height, t_type, t_method, t_len media_id, t_width, t_height, t_type, t_method, t_len
) )
@ -271,36 +274,17 @@ class BaseMediaResource(Resource):
t_width, t_height, t_method, t_type): t_width, t_height, t_method, t_type):
input_path = self.filepaths.remote_media_filepath(server_name, file_id) input_path = self.filepaths.remote_media_filepath(server_name, file_id)
def thumbnail():
thumbnailer = Thumbnailer(input_path)
m_width = thumbnailer.width
m_height = thumbnailer.height
if m_width * m_height >= self.max_image_pixels:
logger.info(
"Image too large to thumbnail %r x %r > %r",
m_width, m_height, self.max_image_pixels
)
return
t_path = self.filepaths.remote_media_thumbnail( t_path = self.filepaths.remote_media_thumbnail(
server_name, file_id, t_width, t_height, t_type, t_method server_name, file_id, t_width, t_height, t_type, t_method
) )
self._makedirs(t_path) self._makedirs(t_path)
if t_method == "crop": t_len = yield threads.deferToThread(
t_len = thumbnailer.crop(t_path, t_width, t_height, t_type) self._generate_thumbnail,
elif t_method == "scale": input_path, t_path, t_width, t_height, t_method, t_type
t_len = thumbnailer.scale(t_path, t_width, t_height, t_type) )
else:
t_len = None
return t_path, t_len if t_len:
res = yield threads.deferToThread(thumbnail)
if res:
t_path, t_len = res
yield self.store.store_remote_media_thumbnail( yield self.store.store_remote_media_thumbnail(
server_name, media_id, file_id, server_name, media_id, file_id,
t_width, t_height, t_type, t_method, t_len t_width, t_height, t_type, t_method, t_len