|
@@ -0,0 +1,67 @@
|
|
|
+from django.core.management.base import BaseCommand, CommandError
|
|
|
+from django.conf import settings
|
|
|
+from path import path
|
|
|
+try:
|
|
|
+ from PIL import Image
|
|
|
+ has_pil = True
|
|
|
+except ImportError:
|
|
|
+ has_pil = False
|
|
|
+from misago.models import User
|
|
|
+from misago.utils.avatars import resizeimage
|
|
|
+
|
|
|
+class Command(BaseCommand):
|
|
|
+ help = 'Regenerates avatar images for new dimensions'
|
|
|
+ def handle(self, *args, **options):
|
|
|
+ if not has_pil:
|
|
|
+ raise CommandError('genavatars requires Python Imaging Library to be installed in order to run')
|
|
|
+ self.scale_user_avatars()
|
|
|
+ self.scale_gallery_avatars()
|
|
|
+ self.stdout.write('\n\nAvatar images have been regenerated.\n')
|
|
|
+
|
|
|
+ def scale_image(self, image_src, image_dir=None):
|
|
|
+ image_name = path.basename(path(image_src))
|
|
|
+ if not image_dir:
|
|
|
+ image_dir = path.dirname(path(image_src)) + '/%s_'
|
|
|
+ for size in settings.AVATAR_SIZES[1:]:
|
|
|
+ resizeimage(image_src, size, image_dir % size + image_name)
|
|
|
+
|
|
|
+ def scale_user_avatars(self):
|
|
|
+ for user in User.objects.filter(avatar_type='upload').iterator():
|
|
|
+ for image in path(settings.MEDIA_ROOT).joinpath('avatars').files('*_%s' % user.avatar_image):
|
|
|
+ if not image.isdir():
|
|
|
+ image.remove()
|
|
|
+ self.scale_image(settings.MEDIA_ROOT + 'avatars/' + user.avatar_image)
|
|
|
+
|
|
|
+ def scale_gallery_avatars(self):
|
|
|
+ try:
|
|
|
+ thumb_dir = path(settings.STATICFILES_DIRS[0]).joinpath('avatars').joinpath('_thumbs')
|
|
|
+ items = [thumb_dir]
|
|
|
+ for item in thumb_dir.walk():
|
|
|
+ items.append(item)
|
|
|
+ for item in reversed(items):
|
|
|
+ if item.isdir():
|
|
|
+ item.rmdir()
|
|
|
+ else:
|
|
|
+ item.remove()
|
|
|
+ except Exception:
|
|
|
+ pass
|
|
|
+ avatars_dir = path(settings.STATICFILES_DIRS[0]).joinpath('avatars')
|
|
|
+ avatars_len = len(avatars_dir)
|
|
|
+ avatars_list = []
|
|
|
+ for directory in avatars_dir.dirs():
|
|
|
+ avatars_list += directory.files('*.gif')
|
|
|
+ avatars_list += directory.files('*.jpg')
|
|
|
+ avatars_list += directory.files('*.jpeg')
|
|
|
+ avatars_list += directory.files('*.png')
|
|
|
+ thumb_dir = path(settings.STATICFILES_DIRS[0]).joinpath('avatars').joinpath('_thumbs')
|
|
|
+ thumb_dir.mkdir(777)
|
|
|
+ for size in settings.AVATAR_SIZES[1:]:
|
|
|
+ thumb_dir.joinpath(str(size)).mkdir(777)
|
|
|
+ for directory in avatars_dir.dirs():
|
|
|
+ dirname = path(directory[avatars_len:]).basename()
|
|
|
+ if dirname != '_thumbs':
|
|
|
+ for size in settings.AVATAR_SIZES[1:]:
|
|
|
+ thumb_dir.joinpath(str(size)).joinpath(dirname).mkdir(777)
|
|
|
+ for avatar in avatars_list:
|
|
|
+ self.scale_image(avatar,
|
|
|
+ thumb_dir + '/%s' + avatar.dirname()[avatars_len:] + '/')
|