From fd4cd52d2e78c8a621e6b06149e69842bb5ff255 Mon Sep 17 00:00:00 2001 From: azyges Date: Wed, 24 Sep 2025 05:05:57 +0900 Subject: [PATCH] lightfinder support, context pairing --- LightlessSyncAPI/Data/UserData.cs | 2 +- .../Dto/Group/GroupBroadcastRequestDto.cs | 11 +++++++++++ LightlessSyncAPI/Dto/Group/GroupJoinHashedDto.cs | 12 ++++++++++++ LightlessSyncAPI/Dto/User/BroadcastStatusBatchDto.cs | 9 +++++++++ LightlessSyncAPI/Dto/User/BroadcastStatusInfoDto.cs | 12 ++++++++++++ .../Dto/User/BroadcastStatusRequestDto.cs | 12 ++++++++++++ LightlessSyncAPI/SignalR/ILightlessHub.cs | 10 ++++++++++ 7 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 LightlessSyncAPI/Dto/Group/GroupBroadcastRequestDto.cs create mode 100644 LightlessSyncAPI/Dto/Group/GroupJoinHashedDto.cs create mode 100644 LightlessSyncAPI/Dto/User/BroadcastStatusBatchDto.cs create mode 100644 LightlessSyncAPI/Dto/User/BroadcastStatusInfoDto.cs create mode 100644 LightlessSyncAPI/Dto/User/BroadcastStatusRequestDto.cs diff --git a/LightlessSyncAPI/Data/UserData.cs b/LightlessSyncAPI/Data/UserData.cs index d993fa3..eb98245 100644 --- a/LightlessSyncAPI/Data/UserData.cs +++ b/LightlessSyncAPI/Data/UserData.cs @@ -3,7 +3,7 @@ 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) { [IgnoreMember] public string AliasOrUID => string.IsNullOrWhiteSpace(Alias) ? UID : Alias; 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/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/SignalR/ILightlessHub.cs b/LightlessSyncAPI/SignalR/ILightlessHub.cs index 99cd1b2..e8b2522 100644 --- a/LightlessSyncAPI/SignalR/ILightlessHub.cs +++ b/LightlessSyncAPI/SignalR/ILightlessHub.cs @@ -55,6 +55,7 @@ public interface ILightlessHub 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 GroupSetUserInfo(GroupPairUserInfoDto groupPair); @@ -63,6 +64,15 @@ public interface ILightlessHub 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();