diff --git a/LightlessSyncAPI/Data/GroupData.cs b/LightlessSyncAPI/Data/GroupData.cs index a8ccca2..6fc07ba 100644 --- a/LightlessSyncAPI/Data/GroupData.cs +++ b/LightlessSyncAPI/Data/GroupData.cs @@ -3,8 +3,8 @@ namespace LightlessSync.API.Data; [MessagePackObject(keyAsPropertyName: true)] -public record GroupData(string GID, string? Alias = null) +public record GroupData(string GID, string? Alias = null, DateTime? CreatedAt = null) { [IgnoreMember] - public string AliasOrGID => string.IsNullOrWhiteSpace(Alias) ? GID : Alias; + public string AliasOrGID => Alias ?? GID; } \ No newline at end of file diff --git a/LightlessSyncAPI/Data/UserData.cs b/LightlessSyncAPI/Data/UserData.cs index d993fa3..cd1a19c 100644 --- a/LightlessSyncAPI/Data/UserData.cs +++ b/LightlessSyncAPI/Data/UserData.cs @@ -1,9 +1,16 @@ -using MessagePack; +using MessagePack; namespace LightlessSync.API.Data; [MessagePackObject(keyAsPropertyName: true)] -public record UserData(string UID, string? Alias = null) +public record UserData( + string UID, + string? Alias = null, + bool IsAdmin = false, + bool IsModerator = false, + bool HasVanity = false, + string? TextColorHex = "", + string? TextGlowColorHex = "") { [IgnoreMember] public string AliasOrUID => string.IsNullOrWhiteSpace(Alias) ? UID : Alias; diff --git a/LightlessSyncAPI/Dto/ConnectionDto.cs b/LightlessSyncAPI/Dto/ConnectionDto.cs index eea8666..d52a83f 100644 --- a/LightlessSyncAPI/Dto/ConnectionDto.cs +++ b/LightlessSyncAPI/Dto/ConnectionDto.cs @@ -10,6 +10,9 @@ public record ConnectionDto(UserData User) public int ServerVersion { get; set; } public bool IsAdmin { get; set; } public bool IsModerator { get; set; } + public bool HasVanity { get; set; } + public string? TextColorHex { get; set; } + public string? TextGlowColorHex { get; set; } public ServerInfo ServerInfo { get; set; } = new(); public DefaultPermissionsDto DefaultPreferredPermissions { get; set; } = new(); } diff --git a/LightlessSyncAPI/Dto/Group/GroupBroadcastRequestDto.cs b/LightlessSyncAPI/Dto/Group/GroupBroadcastRequestDto.cs new file mode 100644 index 0000000..657f42d --- /dev/null +++ b/LightlessSyncAPI/Dto/Group/GroupBroadcastRequestDto.cs @@ -0,0 +1,11 @@ +using MessagePack; + +namespace LightlessSync.API.Dto.Group; + +[MessagePackObject(keyAsPropertyName: true)] +public sealed class GroupBroadcastRequestDto +{ + public required string GID { get; init; } + public string? HashedCID { get; set; } + public required bool Enabled { get; init; } +} diff --git a/LightlessSyncAPI/Dto/Group/GroupJoinHashedDto.cs b/LightlessSyncAPI/Dto/Group/GroupJoinHashedDto.cs new file mode 100644 index 0000000..5e63e5e --- /dev/null +++ b/LightlessSyncAPI/Dto/Group/GroupJoinHashedDto.cs @@ -0,0 +1,12 @@ +using LightlessSync.API.Data; +using LightlessSync.API.Data.Enum; +using MessagePack; + +namespace LightlessSync.API.Dto.Group; + +[MessagePackObject(keyAsPropertyName: true)] +public record GroupJoinHashedDto( + GroupData Group, + string HashedPassword, + GroupUserPreferredPermissions GroupUserPreferredPermissions +); diff --git a/LightlessSyncAPI/Dto/Group/GroupPairDto.cs b/LightlessSyncAPI/Dto/Group/GroupPairDto.cs index e1f4ef0..100e2b9 100644 --- a/LightlessSyncAPI/Dto/Group/GroupPairDto.cs +++ b/LightlessSyncAPI/Dto/Group/GroupPairDto.cs @@ -9,4 +9,5 @@ public record GroupPairDto(GroupData Group, UserData User) : GroupDto(Group) public string UID => User.UID; public string? UserAlias => User.Alias; public string UserAliasOrUID => User.AliasOrUID; + } \ No newline at end of file diff --git a/LightlessSyncAPI/Dto/Group/GroupProfileDto.cs b/LightlessSyncAPI/Dto/Group/GroupProfileDto.cs new file mode 100644 index 0000000..03d2b7c --- /dev/null +++ b/LightlessSyncAPI/Dto/Group/GroupProfileDto.cs @@ -0,0 +1,6 @@ +using LightlessSync.API.Data; + +namespace LightlessSync.API.Dto.Group +{ + public record GroupProfileDto(GroupData Group, string? Description, string? Tags, string? PictureBase64) : GroupDto(Group); +} diff --git a/LightlessSyncAPI/Dto/User/BroadcastStatusBatchDto.cs b/LightlessSyncAPI/Dto/User/BroadcastStatusBatchDto.cs new file mode 100644 index 0000000..39961b5 --- /dev/null +++ b/LightlessSyncAPI/Dto/User/BroadcastStatusBatchDto.cs @@ -0,0 +1,9 @@ +using MessagePack; + +namespace LightlessSync.API.Dto.User; + +[MessagePackObject(keyAsPropertyName: true)] +public sealed class BroadcastStatusBatchDto +{ + public Dictionary Results { get; init; } = new(); +} diff --git a/LightlessSyncAPI/Dto/User/BroadcastStatusInfoDto.cs b/LightlessSyncAPI/Dto/User/BroadcastStatusInfoDto.cs new file mode 100644 index 0000000..88698d4 --- /dev/null +++ b/LightlessSyncAPI/Dto/User/BroadcastStatusInfoDto.cs @@ -0,0 +1,12 @@ +using MessagePack; + +namespace LightlessSync.API.Dto.User; + +[MessagePackObject(keyAsPropertyName: true)] +public sealed class BroadcastStatusInfoDto +{ + public required string HashedCID { get; init; } + public required bool IsBroadcasting { get; init; } + public TimeSpan? TTL { get; init; } + public string? GID { get; init; } +} \ No newline at end of file diff --git a/LightlessSyncAPI/Dto/User/BroadcastStatusRequestDto.cs b/LightlessSyncAPI/Dto/User/BroadcastStatusRequestDto.cs new file mode 100644 index 0000000..49213da --- /dev/null +++ b/LightlessSyncAPI/Dto/User/BroadcastStatusRequestDto.cs @@ -0,0 +1,12 @@ +using MessagePack; + +namespace LightlessSync.API.Dto.User; + +[MessagePackObject(keyAsPropertyName: true)] +public sealed class BroadcastStatusRequestDto +{ + public required string HashedCID { get; init; } + public required bool Enabled { get; init; } + public string? GID { get; init; } +} + diff --git a/LightlessSyncAPI/Dto/User/UserPairNotificationDto.cs b/LightlessSyncAPI/Dto/User/UserPairNotificationDto.cs new file mode 100644 index 0000000..8cf52a4 --- /dev/null +++ b/LightlessSyncAPI/Dto/User/UserPairNotificationDto.cs @@ -0,0 +1,10 @@ +using MessagePack; + +namespace LightlessSync.API.Dto.User; + +[MessagePackObject(keyAsPropertyName: true)] +public sealed class UserPairNotificationDto +{ + public required string myHashedCid { get; init; } + public required string message { get; init; } +} \ No newline at end of file diff --git a/LightlessSyncAPI/Dto/User/UserVanityColorsDto.cs b/LightlessSyncAPI/Dto/User/UserVanityColorsDto.cs new file mode 100644 index 0000000..9b9232a --- /dev/null +++ b/LightlessSyncAPI/Dto/User/UserVanityColorsDto.cs @@ -0,0 +1,6 @@ +using MessagePack; + +namespace LightlessSync.API.Dto.User; + +[MessagePackObject(keyAsPropertyName: true)] +public record UserVanityColorsDto(string? TextColorHex, string? TextGlowColorHex); diff --git a/LightlessSyncAPI/SignalR/ILightlessHub.cs b/LightlessSyncAPI/SignalR/ILightlessHub.cs index 99cd1b2..e96513c 100644 --- a/LightlessSyncAPI/SignalR/ILightlessHub.cs +++ b/LightlessSyncAPI/SignalR/ILightlessHub.cs @@ -1,4 +1,4 @@ -using LightlessSync.API.Data; +using LightlessSync.API.Data; using LightlessSync.API.Data.Enum; using LightlessSync.API.Dto; using LightlessSync.API.Dto.CharaData; @@ -21,8 +21,10 @@ public interface ILightlessHub Task Client_GroupPairJoined(GroupPairFullInfoDto groupPairInfoDto); Task Client_GroupPairLeft(GroupPairDto groupPairDto); Task Client_GroupSendFullInfo(GroupFullInfoDto groupInfo); + Task Client_GroupSendProfile (GroupProfileDto groupInfo); Task Client_GroupSendInfo(GroupInfoDto groupInfo); Task Client_ReceiveServerMessage(MessageSeverity messageSeverity, string message); + Task Client_ReceiveBroadcastPairRequest(UserPairNotificationDto dto); Task Client_UpdateSystemInfo(SystemInfoDto systemInfo); Task Client_UserAddClientPair(UserPairDto dto); Task Client_UserReceiveCharacterData(OnlineUserCharaDataDto dataDto); @@ -49,25 +51,39 @@ public interface ILightlessHub Task GroupChangeOwnership(GroupPairDto groupPair); Task GroupChangePassword(GroupPasswordDto groupPassword); Task GroupClear(GroupDto group); + Task GroupClearFinder(GroupDto group); Task GroupCreate(); Task> GroupCreateTempInvite(GroupDto group, int amount); Task GroupDelete(GroupDto group); Task> GroupGetBannedUsers(GroupDto group); Task GroupJoin(GroupPasswordDto passwordedGroup); Task GroupJoinFinalize(GroupJoinDto passwordedGroup); + Task GroupJoinHashed(GroupJoinHashedDto dto); Task GroupLeave(GroupDto group); Task GroupRemoveUser(GroupPairDto groupPair); + Task GroupGetProfile(GroupDto dto); + Task GroupSetProfile(GroupProfileDto dto); Task GroupSetUserInfo(GroupPairUserInfoDto groupPair); Task> GroupsGetAll(); Task GroupUnbanUser(GroupPairDto groupPair); Task GroupPrune(GroupDto group, int days, bool execute); Task UserAddPair(UserDto user); + Task TryPairWithContentId(string otherCid, string myCid); + + Task SetBroadcastStatus(string hashedCid, bool enabled, GroupBroadcastRequestDto? groupDto = null); + Task SetGroupBroadcastStatus(GroupBroadcastRequestDto dto); + Task> GetBroadcastedGroups(List broadcastEntries); + Task IsUserBroadcasting(string hashedCid); + Task AreUsersBroadcasting(List hashedCids); + Task GetBroadcastTtl(string hashedCid); + Task UserDelete(); Task> UserGetOnlinePairs(CensusDataDto? censusDataDto); Task> UserGetPairedClients(); Task UserGetProfile(UserDto dto); Task UserPushData(UserCharaDataMessageDto dto); + Task UserUpdateVanityColors(UserVanityColorsDto dto); Task UserRemovePair(UserDto userDto); Task UserSetProfile(UserProfileDto userDescription); Task UserUpdateDefaultPermissions(DefaultPermissionsDto defaultPermissionsDto); @@ -88,4 +104,4 @@ public interface ILightlessHub Task GposeLobbyPushCharacterData(CharaDataDownloadDto charaDownloadDto); Task GposeLobbyPushPoseData(PoseData poseData); Task GposeLobbyPushWorldData(WorldData worldData); -} \ No newline at end of file +}