Files
2023-03-12 14:42:15 -04:00

166 lines
5.3 KiB
C#

using System.Diagnostics;
using static Discord_Client_Custom.Connections.MsgRequests;
using System.Text.Json.Nodes;
using System.Drawing.Imaging;
using Discord_Client_Custom.Channels;
using Discord_Client_Custom.Connections;
using Discord_Client_Custom.client_internals;
using System.Runtime.CompilerServices;
namespace Discord_Client_Custom
{
public partial class mainPage : Form
{
private Connection con;
public Client clientMain;
internal ChannelObj channelCurrent;
public mainPage()
{
InitializeComponent();
}
private async static void dm_btn_click(object sender, EventArgs e)
{
string cid = (string)((Button)sender).Tag;
//Format and present messages
//MessageBox.Show(cid);
var o = await MsgRequests.getMessages(cid);
var p = (mainPage)((Button)sender).Parent.Parent;
p.dmFlowContent.Tag = cid;
p.channelCurrent = new ChannelObj(o, cid, p.dmFlowContent, ((Button)sender).Image, p.clientMain.getUserMain());
}
private ComboBox createStatusBar()
{
var cb = new ComboBox();
cb.Items.Add("online");
cb.Items.Add("idle");
cb.Items.Add("dnd");
cb.Items.Add("offline");
cb.SelectedIndexChanged += (object o, EventArgs a) =>
{
Debug.WriteLine("Status updated to " + cb.Text);
string s = cb.Text;
if (s == "do not disturb") s = "dnd";
else if (s == "offline") s = "invisible";
con.setStatusUpdate(s);
};
return cb;
}
public void insertMessageObj(object msgObj)
{
// Threading fix
this.Invoke(delegate
{
JsonNode response = JsonNode.Parse(msgObj.ToString());
JsonNode msg = JsonNode.Parse(response["d"].ToString());
if (dmFlowContent.Tag == null || msg["channel_id"].ToString() != dmFlowContent.Tag.ToString())
{
//Debug.WriteLine(dmFlowContent.Tag + "\n" + msg["channel_id"].ToString());
//Add a notif icon on the dmFlowPannel or something
Debug.WriteLine(false);
}
else
{
user u = new user(msg["author"]);
string avatarUrl = u.getAvatar();
string iconUrl = "https://cdn.discordapp.com/avatars/" + u.getId() + "/" + u.getAvatar() + ".png?size=32";
//null user
if (avatarUrl == null)
{
iconUrl = "https://discord.com/assets/1f0bfc0865d324c2587920a7d80c609b.png";
}
channelCurrent.insertMessage(dmFlowContent, iconUrl, msg);
}
});
}
public async void start(JsonNode uInfoRaw)
{
clientMain = new Client(uInfoRaw);
var dmsRaw = con.uInfoRaw["private_channels"].AsArray().ToArray(); // (await getChannels()).AsArray().ToArray();
if (dmsRaw == null) { throw new NotImplementedException(); }
for (int i = 0; i < dmsRaw.Length; i++)
{
var o = dmsRaw[i];
if ((int)o["type"] == 3) { continue; }
var co = new ChannelObj(dmsRaw[i]);
Label lab = new Label();
lab.Text = co.getName();
lab.Location = new Point(30, 30 * i);
lab.Tag = co.getId();
//Button
Button btn = new Button();
btn.Location = new Point(50, 50 + 30 * i);
btn.Tag = co.getId();
var s = new Size(175, 40);
btn.Size = s;
btn.Image = await co.getIcon();
btn.Text = co.getName();
btn.ImageAlign = ContentAlignment.MiddleLeft;
btn.TextImageRelation = TextImageRelation.ImageBeforeText;
btn.TextAlign = ContentAlignment.MiddleCenter;
btn.Click += dm_btn_click;
//dmFlowPannel.Controls.Add(lab);
dmFlowPannel.Controls.Add(btn);
}
// Add status update menu
var cb = createStatusBar();
cb.Location = new Point(5, dmFlowContent.Height + 5);
cb.SelectedText = clientMain.getUserMain().getStatus()["status"].ToString();
this.Controls.Add(cb);
}
private async void dmFlowPannel_Paint(object sender, EventArgs e)
{
}
private async void dmFlowContent_Paint(object sender, EventArgs e)
{
}
private async void mainPage_Load(object sender, EventArgs e)
{
/*if (Environment.GetEnvironmentVariable("userToken") == null)
{
string promptValue = Prompt.ShowDialog("Please enter token", "prompt");
Environment.SetEnvironmentVariable("userToken", promptValue);
}*/
con = new Connection(this);
Task.Run(() => { con.connect(dmFlowPannel); });
while (con.uInfoRaw == null) { }
start(con.uInfoRaw);
}
}
}