Compare commits

..

13 Commits

Author SHA1 Message Date
defnotken
2ebdd6e0c7 Merge branch 'master' into fix-profiles-syncshell 2025-10-16 16:32:31 -05:00
CakeAndBanana
2407259769 update submodule 2025-10-16 23:15:51 +02:00
03af0b853c Lightfinder-profiles
Reviewed-on: #18
2025-10-16 22:25:51 +02:00
CakeAndBanana
b670cb69dd Updated submodule for dto 2025-10-15 23:25:54 +02:00
CakeAndBanana
50f3b0d644 Added default values for nsfw and disabled on set profile for groups 2025-10-15 23:24:43 +02:00
CakeAndBanana
3a6203844e Added support for nsfw and disabled for groups 2025-10-15 23:22:07 +02:00
CakeAndBanana
80086f6817 Merge branch 'fix-profiles-syncshell' of https://git.lightless-sync.org/Lightless-Sync/LightlessServer into fix-profiles-syncshell 2025-10-15 23:09:12 +02:00
defnotken
b36b1fb8f9 Add nsfw and disabled in db 2025-10-15 12:39:46 -05:00
CakeAndBanana
280cc2ebbb Fix submodule 2025-10-14 20:21:25 +02:00
CakeAndBanana
7909850ad5 Changed cancellation token. 2025-10-14 19:01:58 +02:00
CakeAndBanana
f60994fa58 update 2025-10-14 19:00:56 +02:00
CakeAndBanana
96f230cd21 merge 2025-10-14 19:00:45 +02:00
CakeAndBanana
59f3739b9c Fixed some issues with profiles on groups 2025-10-14 18:19:46 +02:00
9 changed files with 1270 additions and 22 deletions

2
.gitmodules vendored
View File

@@ -1,4 +1,4 @@
[submodule "LightlessAPI"] [submodule "LightlessAPI"]
path = LightlessAPI path = LightlessAPI
url = https://git.lightless-sync.org/Lightless-Sync/LightlessAPI url = https://git.lightless-sync.org/Lightless-Sync/LightlessAPI
branch = main branch = main

View File

@@ -209,7 +209,7 @@ public partial class LightlessHub
if (isOwnerResult.ReferredGroup == null) return (false, null); if (isOwnerResult.ReferredGroup == null) return (false, null);
var groupPairSelf = await DbContext.GroupPairs.SingleOrDefaultAsync(g => g.GroupGID == gid && g.GroupUserUID == UserUID).ConfigureAwait(false); var groupPairSelf = await DbContext.GroupPairs.SingleOrDefaultAsync(g => g.GroupGID == gid || g.Group.Alias == gid && g.GroupUserUID == UserUID).ConfigureAwait(false);
if (groupPairSelf == null || !groupPairSelf.IsModerator) return (false, null); if (groupPairSelf == null || !groupPairSelf.IsModerator) return (false, null);
return (true, isOwnerResult.ReferredGroup); return (true, isOwnerResult.ReferredGroup);
@@ -217,7 +217,7 @@ public partial class LightlessHub
private async Task<(bool isValid, Group ReferredGroup)> TryValidateOwner(string gid) private async Task<(bool isValid, Group ReferredGroup)> TryValidateOwner(string gid)
{ {
var group = await DbContext.Groups.SingleOrDefaultAsync(g => g.GID == gid).ConfigureAwait(false); var group = await DbContext.Groups.SingleOrDefaultAsync(g => g.GID == gid || g.Alias == gid).ConfigureAwait(false);
if (group == null) return (false, null); if (group == null) return (false, null);
return (string.Equals(group.OwnerUID, UserUID, StringComparison.Ordinal), group); return (string.Equals(group.OwnerUID, UserUID, StringComparison.Ordinal), group);

View File

@@ -746,23 +746,14 @@ public partial class LightlessHub
var cancellationToken = RequestAbortedToken; var cancellationToken = RequestAbortedToken;
var data = await DbContext.GroupProfiles var data = await DbContext.GroupProfiles
.FirstOrDefaultAsync(g => g.GroupGID == dto.Group.GID) .FirstOrDefaultAsync(g => g.Group.GID == dto.Group.GID || g.Group.Alias == dto.Group.GID, cancellationToken)
.ConfigureAwait(false); .ConfigureAwait(false);
var profileDto = new GroupProfileDto(dto.Group, Description: null, Tags: null, PictureBase64: null); var profileDto = new GroupProfileDto(dto.Group, Description: null, Tags: null, PictureBase64: null, IsNsfw: false, IsDisabled: false);
if (data is not null) if (data is not null)
{ {
profileDto = profileDto with profileDto = data.ToDTO();
{
Description = data.Description,
Tags = data.Tags,
PictureBase64 = data.Base64GroupProfileImage,
};
await Clients.User(UserUID)
.Client_GroupSendProfile(profileDto)
.ConfigureAwait(false);
} }
return profileDto; return profileDto;
@@ -779,15 +770,39 @@ public partial class LightlessHub
if (!hasRights) return; if (!hasRights) return;
var groupProfileDb = await DbContext.GroupProfiles var groupProfileDb = await DbContext.GroupProfiles
.FirstOrDefaultAsync(g => g.GroupGID == dto.Group.GID, .FirstOrDefaultAsync(g => g.Group.GID == dto.Group.GID || g.Group.Alias == dto.Group.GID,
RequestAbortedToken) RequestAbortedToken)
.ConfigureAwait(false); .ConfigureAwait(false);
if (groupProfileDb != null) if (groupProfileDb != null)
{ {
groupProfileDb.Description = dto.Description; var groupPairs = DbContext.GroupPairs.Where(p => p.GroupGID == groupProfileDb.GroupGID).Select(p => p.GroupUserUID).ToList();
groupProfileDb.Tags = dto.Tags;
groupProfileDb.Base64GroupProfileImage = dto.PictureBase64; if (string.Equals("", dto.PictureBase64, StringComparison.OrdinalIgnoreCase))
{
groupProfileDb.Base64GroupProfileImage = null;
}
else if (dto.PictureBase64 != null)
{
groupProfileDb.Base64GroupProfileImage = dto.PictureBase64;
}
if (dto.Tags != null)
{
groupProfileDb.Tags = dto.Tags;
}
if (dto.Description != null)
{
groupProfileDb.Description = dto.Description;
}
if (dto.IsNsfw != null)
{
groupProfileDb.IsNSFW = dto.IsNsfw.Value;
}
await Clients.Users(groupPairs).Client_GroupSendProfile(groupProfileDb.ToDTO()).ConfigureAwait(false);
} }
else else
{ {
@@ -797,6 +812,8 @@ public partial class LightlessHub
Description = dto.Description, Description = dto.Description,
Tags = dto.Tags, Tags = dto.Tags,
Base64GroupProfileImage = dto.PictureBase64, Base64GroupProfileImage = dto.PictureBase64,
IsNSFW = false,
ProfileDisabled = false,
}; };
await DbContext.GroupProfiles.AddAsync(groupProfile, await DbContext.GroupProfiles.AddAsync(groupProfile,
@@ -990,6 +1007,4 @@ public partial class LightlessHub
return results; return results;
} }
} }

View File

@@ -1,6 +1,7 @@
using LightlessSync.API.Data; using LightlessSync.API.Data;
using LightlessSync.API.Data.Enum; using LightlessSync.API.Data.Enum;
using LightlessSync.API.Data.Extensions; using LightlessSync.API.Data.Extensions;
using LightlessSync.API.Dto.Group;
using LightlessSyncShared.Models; using LightlessSyncShared.Models;
using static LightlessSyncServer.Hubs.LightlessHub; using static LightlessSyncServer.Hubs.LightlessHub;
@@ -8,6 +9,11 @@ namespace LightlessSyncServer.Utils;
public static class Extensions public static class Extensions
{ {
public static GroupProfileDto ToDTO(this GroupProfile groupProfile)
{
return new GroupProfileDto(groupProfile.Group.ToGroupData(), groupProfile.Description, groupProfile.Tags, groupProfile.Base64GroupProfileImage, groupProfile.IsNSFW, groupProfile.ProfileDisabled);
}
public static GroupData ToGroupData(this Group group) public static GroupData ToGroupData(this Group group)
{ {
return new GroupData(group.GID, group.Alias, group.CreatedDate); return new GroupData(group.GID, group.Alias, group.CreatedDate);

View File

@@ -0,0 +1,40 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace LightlessSyncServer.Migrations
{
/// <inheritdoc />
public partial class AddGroupDisabledAndNSFW : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "is_nsfw",
table: "group_profiles",
type: "boolean",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<bool>(
name: "profile_disabled",
table: "group_profiles",
type: "boolean",
nullable: false,
defaultValue: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "is_nsfw",
table: "group_profiles");
migrationBuilder.DropColumn(
name: "profile_disabled",
table: "group_profiles");
}
}
}

View File

@@ -597,6 +597,14 @@ namespace LightlessSyncServer.Migrations
.HasColumnType("text") .HasColumnType("text")
.HasColumnName("description"); .HasColumnName("description");
b.Property<bool>("IsNSFW")
.HasColumnType("boolean")
.HasColumnName("is_nsfw");
b.Property<bool>("ProfileDisabled")
.HasColumnType("boolean")
.HasColumnName("profile_disabled");
b.Property<string>("Tags") b.Property<string>("Tags")
.HasColumnType("text") .HasColumnType("text")
.HasColumnName("tags"); .HasColumnName("tags");

View File

@@ -15,4 +15,6 @@ public class GroupProfile
public string Description { get; set; } public string Description { get; set; }
public string Tags { get; set; } public string Tags { get; set; }
public string Base64GroupProfileImage { get; set; } public string Base64GroupProfileImage { get; set; }
public bool IsNSFW { get; set; } = false;
public bool ProfileDisabled { get; set; } = false;
} }