using LightlessSync.API.Data; using LightlessSync.API.Data.Enum; using LightlessSync.API.Data.Extensions; using LightlessSync.API.Dto.Group; using LightlessSync.API.Dto.User; using LightlessSyncShared.Models; using static LightlessSyncServer.Hubs.LightlessHub; namespace LightlessSyncServer.Utils; public static class Extensions { public static void UpdateProfileFromDto(this GroupProfile profile, GroupProfileDto dto, string? base64PictureString = null, string? base64BannerString = null) { ArgumentNullException.ThrowIfNull(profile); ArgumentNullException.ThrowIfNull(dto); if (profile == null || dto == null) return; profile.Base64GroupProfileImage = string.IsNullOrWhiteSpace(base64PictureString) ? null : base64PictureString; profile.Base64GroupBannerImage = string.IsNullOrWhiteSpace(base64BannerString) ? null : base64BannerString; if (dto.Tags != null) profile.Tags = dto.Tags; if (dto.Description != null) profile.Description = dto.Description; if (dto.IsNsfw.HasValue) profile.IsNSFW = dto.IsNsfw.Value; } public static void UpdateProfileFromDto(this UserProfileData profile, UserProfileDto dto, string? base64PictureString, string? base64BannerString = null) { ArgumentNullException.ThrowIfNull(profile); ArgumentNullException.ThrowIfNull(dto); if (profile == null || dto == null) return; profile.Base64ProfileImage = string.IsNullOrWhiteSpace(base64PictureString) ? null : base64PictureString; profile.Base64BannerImage = string.IsNullOrWhiteSpace(base64BannerString) ? null : base64BannerString; if (dto.Tags != null) profile.Tags = dto.Tags; if (dto.Description != null) profile.UserDescription = dto.Description; if (dto.IsNSFW.HasValue) profile.IsNSFW = dto.IsNSFW.Value; } public static GroupProfileDto ToDTO(this GroupProfile groupProfile) { if (groupProfile == null) { return new GroupProfileDto(Group: null, Description: null, Tags: null, PictureBase64: null, BannerBase64: null, IsNsfw: false, IsDisabled: false); } var groupData = groupProfile.Group?.ToGroupData(); return new GroupProfileDto( groupData, groupProfile.Description, groupProfile.Tags, groupProfile.Base64GroupProfileImage, groupProfile.Base64GroupBannerImage, groupProfile.IsNSFW, groupProfile.ProfileDisabled ); } public static UserProfileDto ToDTO(this UserProfileData userProfileData) { if (userProfileData == null) { return new UserProfileDto(User: null, Disabled: false, IsNSFW: null, ProfilePictureBase64: null, BannerPictureBase64: null, Description: null, Tags: []); } var userData = userProfileData.User?.ToUserData(); return new UserProfileDto( userData, userProfileData.ProfileDisabled, userProfileData.IsNSFW, userProfileData.Base64ProfileImage, userProfileData.Base64BannerImage, userProfileData.UserDescription, userProfileData.Tags ); } public static GroupData ToGroupData(this Group group) { if (group == null) return null; return new GroupData(group.GID, group.Alias, group.CreatedDate); } public static UserData ToUserData(this GroupPair pair) { if (pair == null) return null; return new UserData(pair.GroupUser.UID, pair.GroupUser.Alias); } public static UserData ToUserData(this User user) { if (user == null) return null; return new UserData(user.UID, user.Alias); } public static IndividualPairStatus ToIndividualPairStatus(this UserInfo userInfo) { if (userInfo.IndividuallyPaired) return IndividualPairStatus.Bidirectional; if (!userInfo.IndividuallyPaired && userInfo.GIDs.Contains(Constants.IndividualKeyword, StringComparer.Ordinal)) return IndividualPairStatus.OneSided; return IndividualPairStatus.None; } public static GroupPermissions ToEnum(this Group group) { var permissions = GroupPermissions.NoneSet; permissions.SetPreferDisableAnimations(group.PreferDisableAnimations); permissions.SetPreferDisableSounds(group.PreferDisableSounds); permissions.SetPreferDisableVFX(group.PreferDisableVFX); permissions.SetDisableInvites(!group.InvitesEnabled); return permissions; } public static GroupUserPreferredPermissions ToEnum(this GroupPairPreferredPermission groupPair) { var permissions = GroupUserPreferredPermissions.NoneSet; permissions.SetDisableAnimations(groupPair.DisableAnimations); permissions.SetDisableSounds(groupPair.DisableSounds); permissions.SetPaused(groupPair.IsPaused); permissions.SetDisableVFX(groupPair.DisableVFX); return permissions; } public static GroupPairUserInfo ToEnum(this GroupPair groupPair) { var groupUserInfo = GroupPairUserInfo.None; groupUserInfo.SetPinned(groupPair.IsPinned); groupUserInfo.SetModerator(groupPair.IsModerator); return groupUserInfo; } public static UserPermissions ToUserPermissions(this UserPermissionSet? permissions, bool setSticky = false) { if (permissions == null) return UserPermissions.NoneSet; UserPermissions perm = UserPermissions.NoneSet; perm.SetPaused(permissions.IsPaused); perm.SetDisableAnimations(permissions.DisableAnimations); perm.SetDisableSounds(permissions.DisableSounds); perm.SetDisableVFX(permissions.DisableVFX); if (setSticky) perm.SetSticky(permissions.Sticky); return perm; } }