126 lines
4.5 KiB
C#
126 lines
4.5 KiB
C#
using GraphicsManager.Enums;
|
|
using GraphicsManager.Objects;
|
|
using Luski.net.Structures.Public;
|
|
using OpenTK.Mathematics;
|
|
using OpenTK.Windowing.Common.Input;
|
|
|
|
namespace Luski.GUI.MainScreen.UI.PublicServers;
|
|
|
|
public class PublicChat : UserControl
|
|
{
|
|
|
|
public FlowLayout MessageFlow;
|
|
private Label title, desc;
|
|
private Textbox tb;
|
|
private SocketChannel? Channel;
|
|
|
|
public PublicChat()
|
|
{
|
|
UserControl titlecon;
|
|
Size = new((int)(980 * Globals.Settings.Scale), (int)(866 * Globals.Settings.Scale));
|
|
BackgroundColor = new(50, 50, 50, 255);
|
|
Anchor = ObjectAnchor.All;
|
|
Controls.Add(MessageFlow = new()
|
|
{
|
|
Size = new(Size.X, (int)(761 * Globals.Settings.Scale)),
|
|
Location = new(0, (int)(52 * Globals.Settings.Scale)),
|
|
BackgroundColor = new(40,40,40,255),
|
|
Anchor = ObjectAnchor.All,
|
|
HScrollPixels = Globals.Settings.PerScrollPixels
|
|
});
|
|
Controls.Add(titlecon = new UserControl(){Anchor = ObjectAnchor.Left | ObjectAnchor.Top | ObjectAnchor.Right, Size = new((int)(980 * Globals.Settings.Scale), (int)(52 * Globals.Settings.Scale)), BackgroundColor = BackgroundColor});
|
|
titlecon.Controls.Add(title = new Label(Globals.DefaultFont)
|
|
{
|
|
//Location = new(
|
|
// (int)((26 - (Globals.DefaultFont.PixelHeight / 2)) * Globals.Settings.Scale),
|
|
// (int)((26 * Globals.Settings.Scale) - (Globals.DefaultFont.PixelHeight/2.0)))
|
|
});
|
|
titlecon.Controls.Add(desc = new Label(Globals.DefaultFont){ Color = new(161,161,161,255), Location = new(title.Location.X + title.Size.X + 5, title.Location.Y)});
|
|
Controls.Add(tb = new Textbox(Globals.DefaultFont, Globals.DefaultFont)
|
|
{
|
|
InsideColor = new(28, 28, 28, 255),
|
|
BorderColor = Color4.DarkCyan,
|
|
Location = new((int)(10 * Globals.Settings.Scale), (int)(824 * Globals.Settings.Scale)),
|
|
Size = new((int)(960 * Globals.Settings.Scale), (int)(34 * Globals.Settings.Scale)),
|
|
Anchor = ObjectAnchor.Bottom | ObjectAnchor.Left | ObjectAnchor.Right,
|
|
HoverMouse = MouseCursor.IBeam
|
|
});
|
|
//tb.KeyPress += TbOnKeyPress;
|
|
//Globals.Luski.MainServer.MessageReceived += LuskiOnMessageReceived;
|
|
}
|
|
|
|
private SocketMessage? lastm;
|
|
private long? lastUser;
|
|
private ChatMessage? LastChatMessage;
|
|
|
|
public async Task LoadChannel(SocketChannel channel)
|
|
{
|
|
Channel = channel;
|
|
title.Text = channel.Name;
|
|
desc.Text = channel.Description;
|
|
this.tb.WatermarkText = $"Message {channel.Name}";
|
|
}
|
|
|
|
public void ClearChat()
|
|
{
|
|
MessageFlow.Controls.Clear();
|
|
lastm = null;
|
|
lastUser = null;
|
|
LastChatMessage = null;
|
|
}
|
|
|
|
public async Task AddMessages(IEnumerable<SocketMessage> messages, bool reverse = true)
|
|
{
|
|
if (reverse)
|
|
{
|
|
foreach (SocketMessage message in messages.Reverse())
|
|
{
|
|
await AddMessage(message);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (SocketMessage message in messages)
|
|
{
|
|
await AddMessage(message);
|
|
}
|
|
}
|
|
}
|
|
|
|
public async Task AddMessage(SocketMessage Message)
|
|
{
|
|
bool hasbeentenmin = false;
|
|
if (lastm is not null)
|
|
hasbeentenmin =
|
|
new DateTime(2022, 1, 1, 0, 0, 0, 0).AddMilliseconds(lastm.ID >> 22).ToLocalTime().AddMinutes(10) <
|
|
new DateTime(2022, 1, 1, 0, 0, 0, 0).AddMilliseconds(Message.ID >> 22).ToLocalTime();
|
|
lastm = Message;
|
|
if (lastUser is null || lastUser != Message.AuthorID || hasbeentenmin)
|
|
{
|
|
if (Window is null || !Globals.ms.InvokeRequired)
|
|
{
|
|
MessageFlow.Controls.Add(LastChatMessage = await ChatMessage.MakeChatMessage(Message));
|
|
}
|
|
else
|
|
{
|
|
LastChatMessage = await ChatMessage.MakeChatMessage(Message);
|
|
Globals.ms.Invoke(() =>
|
|
{
|
|
MessageFlow.Controls.Add(LastChatMessage);
|
|
Window.DrawFrame();
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Window is null || !Globals.ms.InvokeRequired)
|
|
{
|
|
await LastChatMessage!.AddMessage(Message);
|
|
}
|
|
else
|
|
Globals.ms.Invoke(() => { LastChatMessage!.AddMessage(Message); Window!.DrawFrame(); });
|
|
}
|
|
|
|
lastUser = Message.AuthorID;
|
|
}
|
|
} |