mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-15 00:43:51 +01:00
Regenerate exact thumbnails if missing
This commit is contained in:
parent
90550f598e
commit
b106080fb4
3 changed files with 58 additions and 11 deletions
|
@ -509,7 +509,7 @@ class MediaRepository:
|
|||
t_height: int,
|
||||
t_method: str,
|
||||
t_type: str,
|
||||
url_cache: str,
|
||||
url_cache: Optional[str],
|
||||
) -> Optional[str]:
|
||||
input_path = await self.media_storage.ensure_media_is_in_local_cache(
|
||||
FileInfo(None, media_id, url_cache=url_cache)
|
||||
|
|
|
@ -114,6 +114,7 @@ class ThumbnailResource(DirectServeJsonResource):
|
|||
m_type,
|
||||
thumbnail_infos,
|
||||
media_id,
|
||||
media_id,
|
||||
url_cache=media_info["url_cache"],
|
||||
server_name=None,
|
||||
)
|
||||
|
@ -269,6 +270,7 @@ class ThumbnailResource(DirectServeJsonResource):
|
|||
method,
|
||||
m_type,
|
||||
thumbnail_infos,
|
||||
media_id,
|
||||
media_info["filesystem_id"],
|
||||
url_cache=None,
|
||||
server_name=server_name,
|
||||
|
@ -282,6 +284,7 @@ class ThumbnailResource(DirectServeJsonResource):
|
|||
desired_method: str,
|
||||
desired_type: str,
|
||||
thumbnail_infos: List[Dict[str, Any]],
|
||||
media_id: str,
|
||||
file_id: str,
|
||||
url_cache: Optional[str] = None,
|
||||
server_name: Optional[str] = None,
|
||||
|
@ -317,8 +320,52 @@ class ThumbnailResource(DirectServeJsonResource):
|
|||
return
|
||||
|
||||
responder = await self.media_storage.fetch_media(file_info)
|
||||
if responder:
|
||||
await respond_with_responder(
|
||||
request, responder, file_info.thumbnail_type, file_info.thumbnail_length
|
||||
request,
|
||||
responder,
|
||||
file_info.thumbnail_type,
|
||||
file_info.thumbnail_length,
|
||||
)
|
||||
return
|
||||
|
||||
# If we can't find the thumbnail we regenerate it. This can happen
|
||||
# if e.g. we've deleted the thumbnails but still have the original
|
||||
# image somewhere.
|
||||
#
|
||||
# Since we have an entry for the thumbnail in the DB we a) know we
|
||||
# have have successfully generated the thumbnail in the past (so we
|
||||
# don't need to worry about repeatedly failing to generate
|
||||
# thumbnails), and b) have already calculated that appropriate
|
||||
# width/height/method so we can just call the "generate exact"
|
||||
# methods.
|
||||
|
||||
if server_name:
|
||||
await self.media_repo.generate_remote_exact_thumbnail(
|
||||
server_name,
|
||||
file_id=file_id,
|
||||
media_id=media_id,
|
||||
t_width=file_info.thumbnail_width,
|
||||
t_height=file_info.thumbnail_height,
|
||||
t_method=file_info.thumbnail_method,
|
||||
t_type=file_info.thumbnail_type,
|
||||
)
|
||||
else:
|
||||
await self.media_repo.generate_local_exact_thumbnail(
|
||||
media_id=media_id,
|
||||
t_width=file_info.thumbnail_width,
|
||||
t_height=file_info.thumbnail_height,
|
||||
t_method=file_info.thumbnail_method,
|
||||
t_type=file_info.thumbnail_type,
|
||||
url_cache=url_cache,
|
||||
)
|
||||
|
||||
responder = await self.media_storage.fetch_media(file_info)
|
||||
await respond_with_responder(
|
||||
request,
|
||||
responder,
|
||||
file_info.thumbnail_type,
|
||||
file_info.thumbnail_length,
|
||||
)
|
||||
else:
|
||||
logger.info("Failed to find any generated thumbnails")
|
||||
|
|
|
@ -344,16 +344,16 @@ class MediaRepositoryStore(MediaRepositoryBackgroundUpdateStore):
|
|||
thumbnail_method,
|
||||
thumbnail_length,
|
||||
):
|
||||
await self.db_pool.simple_insert(
|
||||
"local_media_repository_thumbnails",
|
||||
{
|
||||
await self.db_pool.simple_upsert(
|
||||
table="local_media_repository_thumbnails",
|
||||
keyvalues={
|
||||
"media_id": media_id,
|
||||
"thumbnail_width": thumbnail_width,
|
||||
"thumbnail_height": thumbnail_height,
|
||||
"thumbnail_method": thumbnail_method,
|
||||
"thumbnail_type": thumbnail_type,
|
||||
"thumbnail_length": thumbnail_length,
|
||||
},
|
||||
values={"thumbnail_length": thumbnail_length},
|
||||
desc="store_local_thumbnail",
|
||||
)
|
||||
|
||||
|
@ -498,18 +498,18 @@ class MediaRepositoryStore(MediaRepositoryBackgroundUpdateStore):
|
|||
thumbnail_method,
|
||||
thumbnail_length,
|
||||
):
|
||||
await self.db_pool.simple_insert(
|
||||
"remote_media_cache_thumbnails",
|
||||
{
|
||||
await self.db_pool.simple_upsert(
|
||||
table="remote_media_cache_thumbnails",
|
||||
keyvalues={
|
||||
"media_origin": origin,
|
||||
"media_id": media_id,
|
||||
"thumbnail_width": thumbnail_width,
|
||||
"thumbnail_height": thumbnail_height,
|
||||
"thumbnail_method": thumbnail_method,
|
||||
"thumbnail_type": thumbnail_type,
|
||||
"thumbnail_length": thumbnail_length,
|
||||
"filesystem_id": filesystem_id,
|
||||
},
|
||||
values={"thumbnail_length": thumbnail_length},
|
||||
insertion_values={"filesystem_id": filesystem_id},
|
||||
desc="store_remote_media_thumbnail",
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue