Luski/Luski/GUI/MainScreen.cs

146 lines
5.1 KiB
C#
Raw Normal View History

2023-01-02 20:39:35 -05:00
using System.ComponentModel;
using System.Reflection;
using GraphicsManager;
using GraphicsManager.Enums;
using GraphicsManager.Interfaces;
using GraphicsManager.Objects;
using GraphicsManager.Objects.Core;
2023-01-03 10:04:47 -05:00
using Luski.GUI.MainScreen.Interfaces;
using Luski.GUI.MainScreen.UI;
2023-01-02 20:39:35 -05:00
using Luski.GUI.StartPage.UI;
using Luski.net;
2023-01-05 12:19:30 -05:00
using Luski.net.Enums;
using Luski.net.Interfaces;
2023-01-03 10:04:47 -05:00
using Luski.net.JsonTypes;
2023-01-02 20:39:35 -05:00
using OpenTK.Graphics.OpenGL4;
using OpenTK.Mathematics;
using OpenTK.Windowing.Desktop;
using OpenTK.Windowing.Common;
namespace Luski.GUI.MainScreen;
public class MainScreen : Window
{
private static readonly NativeWindowSettings Settings = new()
{
Title = "Luski Login",
WindowBorder = WindowBorder.Fixed,
APIVersion = new Version(3, 2),
StartFocused = true,
Size = new OpenTK.Mathematics.Vector2i(481, 838),
};
2023-01-03 10:04:47 -05:00
FlowLayout? channelpicker;
2023-01-05 12:19:30 -05:00
private RoundedButton? FriendManagerBtn;
private Chat? chat;
2023-01-02 20:39:35 -05:00
public MainScreen() : base(Settings)
{
Login login;
Controls.Add(login = new Login());
login.ChangeToApp += LoginOnChangeToApp;
2023-01-05 12:19:30 -05:00
Thread t = new(_ => Encryption.GenerateKeys());
t.Start();
2023-01-02 20:39:35 -05:00
}
2023-01-03 10:04:47 -05:00
public void AddGroup(SocketGroupChannel group)
{
Group friend = new(group);
friend.ClickCon += ChannelOnClickCon;
channelpicker!.Controls.Add(friend);
chans.Add(friend);
}
private readonly List<Friend> fr = new();
private List<IChannelPick> chans = new();
public void AddFriend(SocketRemoteUser user)
{
//add to friend pannel as well;
if (user.Channel is not null)
{
Friend friend = new(user);
friend.ClickCon += ChannelOnClickCon;
fr.Add(friend);
channelpicker!.Controls.Add(friend);
chans.Add(friend);
}
}
private Task ChannelOnClickCon(IChannelPick arg)
{
2023-01-05 12:19:30 -05:00
chat!.UpdateTitle(arg);
chat.Clear();
IReadOnlyList<SocketMessage> messages = arg.Channel.GetMessages(200).Result;
foreach (SocketMessage message in messages.Reverse())
{
chat.AddMessage(message);
}
2023-01-03 10:04:47 -05:00
return Task.CompletedTask;
}
2023-01-02 20:39:35 -05:00
private Task LoginOnChangeToApp()
{
Controls.Clear();
Title = "Luski";
Size = new(2048, 1334);
WindowBorder = WindowBorder.Resizable;
BackgroundColor = new Color4(34, 34, 34, 255);
2023-01-05 12:19:30 -05:00
Controls.Add(new Rectangle(new Texture(Globals.Luski.CurrentUser.GetAvatar().Result)) { Anchor = ObjectAnchor.Bottom | ObjectAnchor.Left, Size = new(70, 70), Location = new(94, 1248)});
Controls.Add(new Label(){ Anchor = ObjectAnchor.Bottom | ObjectAnchor.Left, Location = new(172, 1271), Text = Globals.Luski.CurrentUser.Username});
FlowLayout ser;
Controls.Add(ser = new FlowLayout()
{
BackgroundColor = new(26, 26, 26, 255),
Size = new(80,1334),
Anchor = ObjectAnchor.Top | ObjectAnchor.Left | ObjectAnchor.Bottom,
});
ser.Controls.Add(new Rectangle(Globals.LuskiTexture)
{
Size = new(80,80)
});
2023-01-03 10:04:47 -05:00
Controls.Add(channelpicker = new FlowLayout()
{
BackgroundColor = new(34,34,34,255),
2023-01-05 12:19:30 -05:00
Size = new(448, 1232),
Location = new(80, 0),
2023-01-03 10:04:47 -05:00
Anchor = ObjectAnchor.Top | ObjectAnchor.Left | ObjectAnchor.Bottom
});
2023-01-05 12:19:30 -05:00
channelpicker.Controls.Add(FriendManagerBtn = new RoundedButton() {Text = "Friends", Size = new(50, 80), InsideColor = new(28, 28, 28, 255), BorderColor = Color4.DarkCyan});
FriendManagerBtn.Clicked += FriendManagerBtnOnClicked;
2023-01-03 10:04:47 -05:00
foreach (SocketGroupChannel ch in Globals.Luski.CurrentUser.Channels.Where(s => s is SocketGroupChannel).Cast<SocketGroupChannel>())
{
AddGroup(ch);
}
foreach (SocketRemoteUser item in Globals.Luski.CurrentUser.Friends)
{
if (item.Channel is not null) AddFriend(item);
}
2023-01-05 12:19:30 -05:00
Controls.Add(chat = new() {Location = new(528,0)});
SocketTextChannel chan = Globals.Luski.GetChannel<SocketTextChannel>(Globals.Luski.CurrentUser.SelectedChannel).Result;
chat.UpdateTitle(chans.First(s => s.Channel.Id == chan.Id));
IReadOnlyList<SocketMessage> messages = chan.GetMessages(200).Result;
foreach (SocketMessage message in messages.Reverse())
{
chat.AddMessage(message);
}
Globals.Luski.UserStatusUpdate += LuskiOnUserStatusUpdate;
2023-01-02 20:39:35 -05:00
DrawFrame();
return Task.CompletedTask;
}
2023-01-05 12:19:30 -05:00
private Task LuskiOnUserStatusUpdate(IUser before, IUser After)
{
if (before is not SocketRemoteUser Before || Before.FriendStatus != FriendStatus.Friends) return Task.CompletedTask;
Label stat = fr.Where(s => s.User.Id == before.Id).First()!.Status;
Invoke(new Action(() =>
{
stat.Text = After.Status.ToString();
}));
return Task.CompletedTask;
}
private Task FriendManagerBtnOnClicked(IRenderObject arg)
{
//open the friend UI
return Task.CompletedTask;
}
2023-01-02 20:39:35 -05:00
}