summary refs log tree commit diff
path: root/synapse/media/v1/base_resource.py
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2014-12-10 15:46:18 +0000
committerMark Haines <mark.haines@matrix.org>2014-12-10 15:46:18 +0000
commite5275d856ee7a1d7aeccd3ea6ab97b49456d24c9 (patch)
tree80ad9c576d4f11988ff674d45ed17a7c2cd9fda8 /synapse/media/v1/base_resource.py
parentThumbnail uploaded and cached images (diff)
downloadsynapse-e5275d856ee7a1d7aeccd3ea6ab97b49456d24c9.tar.xz
Get the code actually working
Diffstat (limited to 'synapse/media/v1/base_resource.py')
-rw-r--r--synapse/media/v1/base_resource.py31
1 files changed, 20 insertions, 11 deletions
diff --git a/synapse/media/v1/base_resource.py b/synapse/media/v1/base_resource.py
index 1e57a1465f..81f2456343 100644
--- a/synapse/media/v1/base_resource.py
+++ b/synapse/media/v1/base_resource.py
@@ -37,6 +37,7 @@ class BaseMediaResource(Resource):
 
     def __init__(self, hs, filepaths):
         Resource.__init__(self)
+        self.auth = hs.get_auth()
         self.client = hs.get_http_client()
         self.clock = hs.get_clock()
         self.server_name = hs.hostname
@@ -120,6 +121,12 @@ class BaseMediaResource(Resource):
             send_cors=True
         )
 
+    @staticmethod
+    def _makedirs(filepath):
+        dirname = os.path.dirname(filepath)
+        if not os.path.exists(dirname):
+            os.makedirs(dirname)
+
     @defer.inlineCallbacks
     def _download_remote_file(self, server_name, media_id):
         file_id = random_string(24)
@@ -127,13 +134,13 @@ class BaseMediaResource(Resource):
         fname = self.filepaths.remote_media_filepath(
             server_name, file_id
         )
-        os.makedirs(os.path.dirname(fname))
+        self._makedirs(fname)
 
         try:
             with open(fname, "wb") as f:
                 request_path = "/".join((
                     "/_matrix/media/v1/download", server_name, media_id,
-                )),
+                ))
                 length, headers = yield self.client.get_file(
                     server_name, request_path, output_stream=f,
                 )
@@ -147,7 +154,7 @@ class BaseMediaResource(Resource):
                 time_now_ms=self.clock.time_msec(),
                 upload_name=None,
                 media_length=length,
-                file_id=file_id,
+                filesystem_id=file_id,
             )
         except:
             os.remove(fname)
@@ -158,7 +165,7 @@ class BaseMediaResource(Resource):
             "media_length": length,
             "upload_name": None,
             "created_ts": time_now_ms,
-            "file_id": file_id,
+            "filesystem_id": file_id,
         }
 
         yield self._generate_remote_thumbnails(
@@ -215,7 +222,7 @@ class BaseMediaResource(Resource):
         if not requirements:
             return
 
-        input_path = self.filepaths.local_media_path(media_id)
+        input_path = self.filepaths.local_media_filepath(media_id)
         thumbnailer = Thumbnailer(input_path)
         m_width = thumbnailer.width
         m_height = thumbnailer.height
@@ -235,6 +242,7 @@ class BaseMediaResource(Resource):
             t_path = self.filepaths.local_media_thumbnail(
                 media_id, t_width, t_height, t_type, t_method
             )
+            self._makedirs(t_path)
             t_len = thumbnailer.scale(t_path, t_width, t_height, t_type)
             yield self.store.store_local_thumbnail(
                 media_id, t_width, t_height, t_type, t_method, t_len
@@ -250,6 +258,7 @@ class BaseMediaResource(Resource):
             t_path = self.filepaths.local_media_thumbnail(
                 media_id, t_width, t_height, t_type, t_method
             )
+            self._makedirs(t_path)
             t_len = thumbnailer.crop(t_path, t_width, t_height, t_type)
             yield self.store.store_local_thumbnail(
                 media_id, t_width, t_height, t_type, t_method, t_len
@@ -264,11 +273,11 @@ class BaseMediaResource(Resource):
     def _generate_remote_thumbnails(self, server_name, media_id, media_info):
         media_type = media_info["media_type"]
         file_id = media_info["filesystem_id"]
-        requirements = self._get_requirements(media_type)
+        requirements = self._get_thumbnail_requirements(media_type)
         if not requirements:
             return
 
-        input_path = self.filepaths.remote_media_path(server_name, file_id)
+        input_path = self.filepaths.remote_media_filepath(server_name, file_id)
         thumbnailer = Thumbnailer(input_path)
         m_width = thumbnailer.width
         m_height = thumbnailer.height
@@ -286,9 +295,9 @@ class BaseMediaResource(Resource):
         for t_width, t_height, t_type in scales:
             t_method = "scale"
             t_path = self.filepaths.remote_media_thumbnail(
-                server_name, media_id, file_id,
-                media_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)
             t_len = thumbnailer.scale(t_path, t_width, t_height, t_type)
             yield self.store.store_remote_media_thumbnail(
                 server_name, media_id, file_id,
@@ -303,9 +312,9 @@ class BaseMediaResource(Resource):
                 continue
             t_method = "crop"
             t_path = self.filepaths.remote_media_thumbnail(
-                server_name, media_id, 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)
             t_len = thumbnailer.crop(t_path, t_width, t_height, t_type)
             yield self.store.store_remote_media_thumbnail(
                 server_name, media_id, file_id,