mirror of
https://github.com/JogmansonReal/Radicade.git
synced 2026-10-25 23:18:56 -07:00
Radicade Public Code
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
namespace RadicadeServer.RecNet.Board
|
||||
{
|
||||
public class BoardAnnouncement
|
||||
{
|
||||
public string Message { get; set; } = null!;
|
||||
public string MoreInfoUrl { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace RadicadeServer.RecNet.Board
|
||||
{
|
||||
public class BoardVideo
|
||||
{
|
||||
public string BlobName { get; set; } = null!;
|
||||
public string Title { get; set; } = null!;
|
||||
public string Description { get; set; } = null!;
|
||||
public string ThumbnailBlobName { get; set; } = null!;
|
||||
public string SourceUrl { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace RadicadeServer.RecNet.Board
|
||||
{
|
||||
public class CommunityBoard
|
||||
{
|
||||
public FeaturedPlayer FeaturedPlayer { get; set; } = null!;
|
||||
public FeaturedRoomGroup FeaturedRoomGroup { get; set; } = null!;
|
||||
public BoardAnnouncement CurrentAnnouncement { get; set; } = null!;
|
||||
public List<InstagramImage> InstagramImages { get; set; } = null!;
|
||||
public List<BoardVideo> Videos { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using RadicadeServer.API.Notifications;
|
||||
using RadicadeServer.RecNet.Enums.Messages;
|
||||
using RadicadeServer.RecNet.Notifications;
|
||||
|
||||
namespace RadicadeServer.RecNet.Board
|
||||
{
|
||||
public static class CommunityBoardBroadcast
|
||||
{
|
||||
public const string UpdateNotificationId = "CommunityBoardUpdate";
|
||||
|
||||
public static IReadOnlyList<Notification> BuildFrames(CommunityBoard? board)
|
||||
{
|
||||
if (board == null)
|
||||
return Array.Empty<Notification>();
|
||||
|
||||
return new List<Notification>
|
||||
{
|
||||
new Notification
|
||||
{
|
||||
Id = UpdateNotificationId,
|
||||
Msg = board
|
||||
},
|
||||
new Notification
|
||||
{
|
||||
Id = NotificationType.CommunityBoardAnnouncementUpdate,
|
||||
Msg = board.CurrentAnnouncement ?? new BoardAnnouncement
|
||||
{
|
||||
Message = string.Empty,
|
||||
MoreInfoUrl = string.Empty
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static async Task PushAsync(CommunityBoard? board)
|
||||
{
|
||||
foreach (var frame in BuildFrames(board))
|
||||
await Notify.SendGlobalNotify(frame);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RadicadeServer.DB;
|
||||
using RadicadeServer.Extensions;
|
||||
using RadicadeServer.RecNet.Board;
|
||||
|
||||
namespace RadicadeServer.API.Board.V2
|
||||
{
|
||||
[Route("api/communityboard/v2")]
|
||||
public class CommunityBoardV2 : Controller
|
||||
{
|
||||
private readonly RecDBContext db;
|
||||
|
||||
public CommunityBoardV2(RecDBContext context)
|
||||
{
|
||||
db = context;
|
||||
}
|
||||
|
||||
[HttpGet("current")]
|
||||
public async Task<ActionResult<CommunityBoard>> GetCurrentCommunityBoard()
|
||||
{
|
||||
var config = await db.ServerConfig.FirstOrDefaultAsync(x => x.Key == "CommunityBoard");
|
||||
var board = config?.Value?.FromJson<CommunityBoard>() ?? CreateDefaultBoard();
|
||||
NormalizeBoard(board);
|
||||
return Ok(board);
|
||||
}
|
||||
|
||||
private static CommunityBoard CreateDefaultBoard()
|
||||
{
|
||||
return new CommunityBoard
|
||||
{
|
||||
FeaturedPlayer = new FeaturedPlayer
|
||||
{
|
||||
Id = 0,
|
||||
TitleOverride = string.Empty,
|
||||
UrlOverride = string.Empty
|
||||
},
|
||||
FeaturedRoomGroup = new FeaturedRoomGroup
|
||||
{
|
||||
FeaturedRoomGroupId = 0,
|
||||
Name = string.Empty,
|
||||
Rooms = new List<FeaturedRoom>()
|
||||
},
|
||||
CurrentAnnouncement = new BoardAnnouncement
|
||||
{
|
||||
Message = string.Empty,
|
||||
MoreInfoUrl = string.Empty
|
||||
},
|
||||
InstagramImages = new List<InstagramImage>(),
|
||||
Videos = new List<BoardVideo>()
|
||||
};
|
||||
}
|
||||
|
||||
private static void NormalizeBoard(CommunityBoard board)
|
||||
{
|
||||
board.FeaturedPlayer ??= new FeaturedPlayer
|
||||
{
|
||||
Id = 0,
|
||||
TitleOverride = string.Empty,
|
||||
UrlOverride = string.Empty
|
||||
};
|
||||
board.FeaturedRoomGroup ??= new FeaturedRoomGroup
|
||||
{
|
||||
FeaturedRoomGroupId = 0,
|
||||
Name = string.Empty,
|
||||
Rooms = new List<FeaturedRoom>()
|
||||
};
|
||||
board.FeaturedRoomGroup.Rooms ??= new List<FeaturedRoom>();
|
||||
board.CurrentAnnouncement ??= new BoardAnnouncement
|
||||
{
|
||||
Message = string.Empty,
|
||||
MoreInfoUrl = string.Empty
|
||||
};
|
||||
board.InstagramImages ??= new List<InstagramImage>();
|
||||
board.Videos ??= new List<BoardVideo>();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
foreach (var video in board.Videos)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(video.SourceUrl) && !string.IsNullOrWhiteSpace(video.BlobName))
|
||||
video.SourceUrl = $"{DBConfig.ServerUrl}/cdn/video/{video.BlobName.TrimStart('/')}";
|
||||
}
|
||||
|
||||
var playable = board.Videos
|
||||
.Where(video => !string.IsNullOrWhiteSpace(video.SourceUrl) || !string.IsNullOrWhiteSpace(video.BlobName))
|
||||
.ToList();
|
||||
board.Videos = playable;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace RadicadeServer.RecNet.Enums.Board
|
||||
{
|
||||
public enum ExternalContentType
|
||||
{
|
||||
YouTube
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace RadicadeServer.RecNet.Board
|
||||
{
|
||||
public class FeaturedPlayer
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string TitleOverride { get; set; } = null!;
|
||||
public string UrlOverride { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace RadicadeServer.RecNet.Board
|
||||
{
|
||||
public class FeaturedRoom
|
||||
{
|
||||
public long RoomId { get; set; }
|
||||
public string RoomName { get; set; } = null!;
|
||||
public string ImageName { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace RadicadeServer.RecNet.Board
|
||||
{
|
||||
public class FeaturedRoomGroup
|
||||
{
|
||||
public long FeaturedRoomGroupId { get; set; }
|
||||
public string Name { get; set; } = null!;
|
||||
public List<FeaturedRoom> Rooms { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace RadicadeServer.RecNet.Board
|
||||
{
|
||||
public class InstagramImage
|
||||
{
|
||||
public string ImageName { get; set; } = null!;
|
||||
public string ImageUrl { get; set; } = null!;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user