mirror of https://github.com/zulip/zulip.git
storage: Reformat hashed medium static avatar files.
This commit reformats hashed medium static avatar files("-medium.png" files). Unlike user-uploaded avatar files, avatars served alongside static files are hashed by Django. To implement the URL patterns for finding medium-size avatar URLs that are hardcoded into current versions of the mobile apps, the medium avatar files need to be adjusted to include the "-medium" string just before the file type. For example, the URL format will now be: Before: welcome-bot-medium.123123321.png After: welcome-bot.123123123-medium.png
This commit is contained in:
parent
068ab6e11e
commit
433968cbb6
|
@ -24,6 +24,25 @@ else:
|
||||||
return os.path.join(settings.STATIC_ROOT, path)
|
return os.path.join(settings.STATIC_ROOT, path)
|
||||||
|
|
||||||
|
|
||||||
|
def reformat_medium_filename(hashed_name: str) -> str:
|
||||||
|
"""
|
||||||
|
Because the protocol for getting medium-size avatar URLs
|
||||||
|
was never fully documented, the mobile apps use a
|
||||||
|
substitution of the form s/.png/-medium.png/ to get the
|
||||||
|
medium-size avatar URLs. Thus, we must ensure the hashed
|
||||||
|
filenames for system bot avatars follow this naming convention.
|
||||||
|
"""
|
||||||
|
|
||||||
|
name_parts = hashed_name.rsplit(".", 1)
|
||||||
|
base_name = name_parts[0]
|
||||||
|
|
||||||
|
if len(name_parts) != 2 or "-medium" not in base_name:
|
||||||
|
return hashed_name
|
||||||
|
extension = name_parts[1].replace("png", "medium.png")
|
||||||
|
base_name = base_name.replace("-medium", "")
|
||||||
|
return f"{base_name}-{extension}"
|
||||||
|
|
||||||
|
|
||||||
class IgnoreBundlesManifestStaticFilesStorage(ManifestStaticFilesStorage):
|
class IgnoreBundlesManifestStaticFilesStorage(ManifestStaticFilesStorage):
|
||||||
@override
|
@override
|
||||||
def hashed_name(
|
def hashed_name(
|
||||||
|
@ -45,7 +64,11 @@ class IgnoreBundlesManifestStaticFilesStorage(ManifestStaticFilesStorage):
|
||||||
# so they can hit our Nginx caching block for static files.
|
# so they can hit our Nginx caching block for static files.
|
||||||
# We don't need to worry about stale caches since these are
|
# We don't need to worry about stale caches since these are
|
||||||
# only used by the system bots.
|
# only used by the system bots.
|
||||||
return super().hashed_name(name, content, filename)
|
if not name.endswith("-medium.png"):
|
||||||
|
return super().hashed_name(name, content, filename)
|
||||||
|
|
||||||
|
hashed_medium_file = super().hashed_name(name, content, filename)
|
||||||
|
return reformat_medium_filename(hashed_medium_file)
|
||||||
if name == "generated/emoji/emoji_api.json":
|
if name == "generated/emoji/emoji_api.json":
|
||||||
# Unlike most .json files, we do want to hash this file;
|
# Unlike most .json files, we do want to hash this file;
|
||||||
# its hashed URL is returned as part of the API. See
|
# its hashed URL is returned as part of the API. See
|
||||||
|
|
Loading…
Reference in New Issue