[ADDED] Update displayed name when main is changed

This commit is contained in:
Peter Pfeufer 2022-09-07 23:01:07 +02:00
parent 8772349309
commit cd189927fe
No known key found for this signature in database
GPG Key ID: 6051D2C6AD4EBC27
3 changed files with 65 additions and 0 deletions

View File

@ -38,6 +38,12 @@ class SmfService(ServicesHook):
if SmfTasks.has_account(user): if SmfTasks.has_account(user):
SmfTasks.update_groups.delay(user.pk) SmfTasks.update_groups.delay(user.pk)
def sync_nickname(self, user):
logger.debug(f"Updating {self.name} displayed name for {user}")
if SmfTasks.has_account(user):
SmfTasks.update_display_name.apply_async(args=[user.pk], countdown=5) # cooldown on this task to ensure DB clean when syncing
def update_all_groups(self): def update_all_groups(self):
logger.debug('Update all %s groups called' % self.name) logger.debug('Update all %s groups called' % self.name)
SmfTasks.update_all_groups.delay() SmfTasks.update_all_groups.delay()

View File

@ -11,6 +11,8 @@ from packaging import version
from django.db import connections from django.db import connections
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User
from allianceauth.eveonline.models import EveCharacter from allianceauth.eveonline.models import EveCharacter
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -40,6 +42,8 @@ class SmfManager:
SQL_UPD_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s, real_name = %%s WHERE member_name = %%s" % TABLE_PREFIX SQL_UPD_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s, real_name = %%s WHERE member_name = %%s" % TABLE_PREFIX
SQL_UPD_DISPLAY_NAME = r"UPDATE %smembers SET real_name = %%s WHERE member_name = %%s" % TABLE_PREFIX
SQL_DIS_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s WHERE member_name = %%s" % TABLE_PREFIX SQL_DIS_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s WHERE member_name = %%s" % TABLE_PREFIX
SQL_USER_ID_FROM_USERNAME = r"SELECT id_member from %smembers WHERE member_name = %%s" % TABLE_PREFIX SQL_USER_ID_FROM_USERNAME = r"SELECT id_member from %smembers WHERE member_name = %%s" % TABLE_PREFIX
@ -273,6 +277,27 @@ class SmfManager:
logger.error(f"Unable to delete smf user {username} - user not found on smf.") logger.error(f"Unable to delete smf user {username} - user not found on smf.")
return False return False
@classmethod
def update_display_name(cls, user: User):
logger.debug(f"Updating SMF displayed name for user {user}")
cursor = connections['smf'].cursor()
smf_username = user.smf.username
try:
display_name = user.profile.main_character.character_name
except Exception as exc:
logger.exception(
f"Unable to find a main character name for {user}, skipping... ({exc})"
)
display_name = smf_username
if cls.check_user(smf_username):
cursor.execute(cls.SQL_UPD_DISPLAY_NAME, [display_name, smf_username])
logger.info(f"Updated displayed name for smf user {smf_username}")
return True
logger.error(f"Unable to update smf user {smf_username} - user not found on smf.")
return False
@classmethod @classmethod
def update_groups(cls, username, groups): def update_groups(cls, username, groups):
userid = cls.get_user_id(username) userid = cls.get_user_id(username)

View File

@ -57,6 +57,40 @@ class SmfTasks:
else: else:
logger.debug("User does not have an smf account") logger.debug("User does not have an smf account")
@staticmethod
@shared_task(bind=True, name="smf.update_display_name", base=QueueOnce)
def update_display_name(self, pk):
user = User.objects.get(pk=pk)
logger.debug(f"Updating SMF displayed name user {user}")
if SmfTasks.has_account(user):
try:
if not SmfManager.update_display_name(user):
raise Exception("SMF Displayed Name Sync failed")
logger.debug(f"Updated user {user} SMF displayed name.")
return True
except SmfUser.DoesNotExist:
logger.info(
f"SMF displayed name sync failed for {user}, "
"user does not have a SMF account"
)
except:
logger.exception(
f"SMF displayed name sync failed for {user}, retrying in 10 mins"
)
raise self.retry(countdown=60 * 10)
else:
logger.debug(f"User {user} does not have a SMF account, skipping")
return False
@staticmethod
@shared_task(name="smf.update_all_display_names")
def update_all_display_names():
logger.debug("Updating ALL SMF display names")
for smf_user in SmfUser.objects.exclude(username__exact=''):
SmfTasks.update_display_name.delay(smf_user)
@staticmethod @staticmethod
@shared_task(name="smf.update_all_groups") @shared_task(name="smf.update_all_groups")
def update_all_groups(): def update_all_groups():