Files
PCK-Studio/MinecraftUSkinEditor/Forms/Utilities/pckCenter.cs
2022-06-09 02:19:48 +02:00

553 lines
21 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Media.Imaging;
using RichPresenceClient;
using API.PCKCenter.model;
using API.PCKCenter;
namespace PckStudio.Forms
{
public partial class pckCenter : MetroFramework.Forms.MetroForm
{
string[] mods;
string hosturl = "http://pckstudio.xyz/studio/PCK/api/";
string loadDirectory = "http://pckstudio.xyz/studio/PCK/api/pckCenterList.txt";
static string appData = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/PCK Studio/";
LocalActions LAct = new LocalActions();
string cacheDir;
bool nobleLoaded = true;
bool newLoaded = true;
bool devPicksLoaded = true;
bool communityLoaded = true;
bool TexLoaded = true;
bool isVita = false;
public pckCenter()
{
InitializeComponent();
//listViewNav.SmallImageList = imgList;
cacheDir = appData + "\\cache\\mods\\";
if (!Directory.Exists(cacheDir))
{
Directory.CreateDirectory(cacheDir);
}
if(isVita)
loadDirectory = File.ReadAllText(appData + "\\settings.ini").Split(new[] { "\r\n", "\n" }, StringSplitOptions.None)[1] + "/studio/PCK/api/pckCenterVitaList.txt";
}
private void reload(bool checkNeeded)
{
try
{
using (WebClient client = new WebClient())
{
try
{
if ((client.DownloadString(hosturl + "pckCenterAvailable.txt")) == "1")
{
}
else if ((client.DownloadString(hosturl + "pckCenterAvailable.txt")) == "0")
{
MessageBox.Show("PCK Center is currently down for maintenance, sorry for any inconveniences");
radioButtonMine.Checked = true;
return;
}
else
{
}
}
catch (Exception connect)
{
MessageBox.Show(connect.ToString());
}
}
using (WebClient client = new WebClient())
{
string parseContent = client.DownloadString(loadDirectory);
string id = "";
mods = parseContent.Split('\n');
int controlCount = pckLayout.Controls.Count;
for (int i = controlCount - 1; i >= 0; i--)
{
Control control = pckLayout.Controls[i];
pckLayout.Controls.Remove(control);
control.Dispose();
}
PCKCenterJSON PJSON = new PCKCenterJSON();
PJSON.Data = new Dictionary<string, EntryInfo>();
int x = 0;
foreach (string mod in mods)
{
try
{
if (File.Exists(cacheDir + mod + ".png") && checkNeeded == true)
{
//image cache
string imgname = hosturl + "pcks/" + mod + ".png";
if (isVita)
imgname = hosturl + "pcks/vita" + mod + ".png";
HttpWebRequest textureFile = (HttpWebRequest)WebRequest.Create(imgname);
HttpWebResponse textureFileResponse = (HttpWebResponse)textureFile.GetResponse();
DateTime localImageModifiedTime = File.GetLastWriteTime(cacheDir + mod + ".png");
DateTime onlineImageModifiedTime = textureFileResponse.LastModified;
textureFileResponse.Dispose();
if (localImageModifiedTime >= onlineImageModifiedTime)
{
}
else
{
if (isVita)
client.DownloadFile(hosturl + "pcks/vita/" + mod + ".png", cacheDir + mod + ".png");
else
client.DownloadFile(hosturl + "pcks/" + mod + ".png", cacheDir + mod + ".png");
}
}
else if (mod.Length == 0) { }
else if (File.Exists(cacheDir + mod + ".png") && checkNeeded == false)
{
}
else
{
// MessageBox.Show(mod + ".png");
client.DownloadFile(hosturl + "pcks/" + mod + ".png", cacheDir + mod + ".png");
}
if (File.Exists(cacheDir + mod + ".desc") && checkNeeded == true)
{
//desc cache
HttpWebRequest descFile = (HttpWebRequest)WebRequest.Create(hosturl + "pcks/" + mod + ".desc");
HttpWebResponse descFileResponse = (HttpWebResponse)descFile.GetResponse();
DateTime localDescModifiedTime = File.GetLastWriteTime(cacheDir + mod + ".desc");
DateTime onlineDescModifiedTime = descFileResponse.LastModified;
descFileResponse.Dispose();
if (localDescModifiedTime >= onlineDescModifiedTime)
{
}
else
{
client.DownloadFile(hosturl + "pcks/" + mod + ".desc", cacheDir + mod + ".desc");
}
}
else if (File.Exists(cacheDir + mod + ".png") && checkNeeded == false)
{
}
else if (mod.Length == 0) { }
else
{
client.DownloadFile(hosturl + "pcks/" + mod + ".desc", cacheDir + mod + ".desc");
}
if (mod.Length != 0)
{
string[] parseDesc = File.ReadAllText(cacheDir + mod + ".desc").Split('\n');
Bitmap bmp = new Bitmap(Image.FromFile(cacheDir + mod + ".png"));
string pckName = parseDesc[0];
string author = parseDesc[1];
string desc = parseDesc[2];
string direct = parseDesc[3];
string ad = parseDesc[4];
bool IsVita = (parseDesc[5] == "true" || parseDesc[5] == "True");
string Packname = parseDesc[6];
EntryInfo EInfo = new EntryInfo();
EInfo.Name = pckName;
EInfo.Author = author;
EInfo.Description = desc;
PJSON.Data.Add((++x).ToString(), EInfo);
File.Copy(cacheDir + mod + ".png", cacheDir + "images/" + ++x + ".png");
PckPreview pckPreview = new PckPreview(pckName, author, desc, direct, ad, bmp, 0, mod, null, IsVita, Packname);
pckLayout.Controls.Add(pckPreview);
}
}
catch (Exception err) { Console.WriteLine(err.Message); }
x++;
}
LAct.SaveLocalJSON(PJSON, loadDirectory.Replace(hosturl + "pckCenter", "").Replace(".txt", ""), isVita);
}
}
catch (Exception err)
{
MessageBox.Show("Couldn't connect to PCK Center servers.. \n" + err.Message.ToString() + "\n" + err.ToString()) ;
}
}
private void radioButtonNew_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonNew.Checked == true)
{
loadDirectory = hosturl + "pckCenterNew.txt";
if (isVita)
loadDirectory = hosturl + "pckCenterVitaNew.txt";
if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
{
reload(newLoaded);
newLoaded = false;
}
else { MessageBox.Show("No Packs Avaliable!"); }
}
}
private void radioButtonDevPicks_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonDevPicks.Checked == true)
{
loadDirectory = hosturl + "pckCenterPicks.txt";
if (isVita)
loadDirectory = hosturl + "pckCenterVitaPicks.txt";
if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
{
reload(devPicksLoaded);
devPicksLoaded = false;
}
else { MessageBox.Show("No Packs Avaliable!"); }
}
}
private void radioButtonCommunity_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonCommunity.Checked == true)
{
loadDirectory = hosturl + "pckCenterCommunity.txt";
if(isVita)
loadDirectory = hosturl + "pckCenterVitaCommunity.txt";
if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
{
reload(communityLoaded);
communityLoaded = false;
}
else { MessageBox.Show("No Packs Avaliable!"); }
}
}
private void radioButtonMine_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonMine.Checked == true)
{
loadCollectdion();
}
}
private void loadCollectdion()
{
int controlCount = pckLayout.Controls.Count;
for (int i = controlCount - 1; i >= 0; i--)
{
Control control = pckLayout.Controls[i];
pckLayout.Controls.Remove(control);
control.Dispose();
}
pckLayout.Enabled = false;
List<string> pckFiles = Directory.GetFiles(appData + "/PCK Center/myPcks/", "*.*", SearchOption.AllDirectories).Where(file => new string[] { ".pck" }.Contains(Path.GetExtension(file))).ToList();
foreach (string pck in pckFiles)
{
string pckName = "";
string author = "";
string desc = "";
string direct = "";
string ad = "";
string mod = Path.GetFileName(pck);
mod = Path.GetFileNameWithoutExtension(mod);
string[] parseDesc = File.ReadAllText(appData + "/PCK Center/myPcks/" + mod + ".desc").Split('\n');
pckName += parseDesc[0];
author += parseDesc[1];
desc += parseDesc[2];
direct += parseDesc[3];
ad += parseDesc[4];
string filename = appData + "/PCK Center/myPcks/" + mod + ".png";
Bitmap bmp = null;
using (FileStream memStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
bmp = (Bitmap)Image.FromStream(memStream);
}
PckPreview pckPreview = new PckPreview(pckName, author, desc, direct, ad, bmp, 1, mod, loadCollectdion, PSVitaPCKCheckbox.Checked, "");
pckLayout.Controls.Add(pckPreview);
}
pckLayout.Enabled = true;
}
private void radioButtonAll_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonAll.Checked == true)
{
loadDirectory = hosturl + "pckCenterList.txt";
if (isVita)
loadDirectory = hosturl + "pckCenterVitaList.txt";
if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
{
reload(nobleLoaded);
nobleLoaded = false;
}
else { MessageBox.Show("No Packs Avaliable!"); }
}
}
private void pckCenter_Load(object sender, EventArgs e)
{
Directory.CreateDirectory(appData + "/PCK Center/myPcks/");
reload(nobleLoaded);
nobleLoaded = false;
try
{
RPC.SetRPC("Viewing the PCK Center", "Program by PhoenixARC", "pcklogo", "PCK Studio", "pcklogo");
}
catch
{
Console.WriteLine("ERROR WITH RPC");
}
}
private void pckLayout_MouseUp(object sender, MouseEventArgs e)
{
}
private void pckLayout_MouseMove_1(object sender, MouseEventArgs e)
{
}
//Down to Collection //Redownload //Yea
private void pckLayout_MouseClick(object sender, MouseEventArgs e)
{
}
private void pckLayout_MouseDown(object sender, MouseEventArgs e)
{
}
private void pckLayout_ControlRemoved(object sender, ControlEventArgs e)
{
}
private void buttonSubmit_Click(object sender, EventArgs e)
{
if(!isVita)
System.Diagnostics.Process.Start("mailto:phoenixarc.canarynotifs@gmail.com?subject=PCK%20Submission&body=Pack%20name(%E3%83%91%E3%83%83%E3%82%AF%E5%90%8D)%3A%0A%0Aauthor(%E8%91%97%E8%80%85)%3A%0A%0Adescription(%E8%AA%AC%E6%98%8E)%3A%0A%0Aimage(%E7%94%BB%E5%83%8F)%3A");
if(isVita)
System.Diagnostics.Process.Start("mailto:phoenixarc.canarynotifs@gmail.com?subject=PCK%20Submission--Vita--&body=Pack%20name(%E3%83%91%E3%83%83%E3%82%AF%E5%90%8D)%3A%0A%0Aauthor(%E8%91%97%E8%80%85)%3A%0A%0Adescription(%E8%AA%AC%E6%98%8E)%3A%0A%0Aimage(%E7%94%BB%E5%83%8F)%3A%3A%0A%0APack%20To%20Replace%3A%0A%0A");
}
private void radioButtonTex_CheckedChanged(object sender, EventArgs e)
{
if (radioButtonTex.Checked == true)
{
loadDirectory = hosturl + "pckCenterTex.txt";
if (isVita)
loadDirectory = hosturl + "pckCenterVitaTex.txt";
if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
{
reload(TexLoaded);
TexLoaded = false;
}
else { MessageBox.Show("No Packs Avaliable!"); }
}
}
private void PSVitaPCKCheckbox_CheckedChanged(object sender, EventArgs e)
{
isVita = PSVitaPCKCheckbox.Checked;
nobleLoaded = true;
newLoaded = true;
devPicksLoaded = true;
communityLoaded = true;
TexLoaded = true;
radioButtonAll.Checked = true;
loadDirectory = hosturl + "pckCenterList.txt";
if (isVita)
{
hosturl += "";
loadDirectory = hosturl + "pckCenterVitaList.txt";
}
if (!string.IsNullOrWhiteSpace(new WebClient().DownloadString(loadDirectory)))
{
reload(nobleLoaded);
nobleLoaded = false;
}
else { MessageBox.Show("No Packs Avaliable!"); }
}
}
public class PckPreview : UserControl
{
string name;
string author;
string desc;
string direct;
string ad;
int mode;
string mod;
bool IsVita;
string Pack;
Bitmap icon;
PictureBox iconBox = new PictureBox();
public MyNameLabel nameLabel = new MyNameLabel();
MyTablePanel layout = new MyTablePanel();
MethodInvoker reloader;
public PckPreview(string name, string author, string desc, string direct, string ad, Bitmap icon, int mode, string mod, MethodInvoker Reloader, bool vita, string packName) : base()
{
this.reloader = Reloader;
nameLabel.parentPreview = this;
layout.parentPreview = this;
this.name = name;
this.author = author;
this.desc = desc;
this.direct = direct;
this.ad = ad;
this.mode = mode;
this.mod = mod;
this.icon = icon;
this.IsVita = vita;
this.Pack = packName;
layout.BackColor = Color.White;
this.Size = new Size(250, 280);
nameLabel.Dock = DockStyle.Fill;
nameLabel.Location = new Point(0,0);
nameLabel.Size = new Size(230, 30);
iconBox.Image = icon;
//iconBox.Dock = DockStyle.Fill;
iconBox.Anchor = AnchorStyles.None;
nameLabel.Text = name;
iconBox.SizeMode = PictureBoxSizeMode.StretchImage;
iconBox.Size = new Size(230, 230);
layout.Margin = new Padding(0, 0, 0, 0);
this.Margin = new Padding(20, 15, 20, 15);
nameLabel.ForeColor = Color.Black;
nameLabel.TextAlign = ContentAlignment.MiddleCenter;
nameLabel.Font = new Font(nameLabel.Font.FontFamily, 14);
layout.Controls.Add(iconBox, 0, 1);
layout.Controls.Add(nameLabel, 0, 0);
layout.Parent = this;
layout.Dock = DockStyle.Fill;
iconBox.Enabled = false;
}
public void setHover(bool hover)
{
if (hover)
{
layout.BackColor = Color.LightGray;
}
else
{
layout.BackColor = Color.White;
}
layout.Refresh();
}
public void onClick()
{
layout.BackColor = Color.Gray;
layout.Refresh();
pckCenterOpen openPck = new pckCenterOpen(name, author, desc, direct, ad, icon, mode, mod, reloader, IsVita, Pack);
openPck.ShowDialog();
}
public void onDoubleClick()
{
}
}
public class MyTablePanel : TableLayoutPanel
{
public PckPreview parentPreview;
protected override void OnMouseEnter(EventArgs e)
{
if (parentPreview != null)
{
parentPreview.setHover(true);
base.OnMouseLeave(e);
}
}
protected override void OnMouseLeave(EventArgs e)
{
if(parentPreview != null)
{
parentPreview.setHover(false);
base.OnMouseLeave(e);
}
}
protected override void OnMouseClick(MouseEventArgs e)
{
if (parentPreview != null)
{
parentPreview.onClick();
base.OnMouseClick(e);
}
}
protected override void OnMouseDoubleClick(MouseEventArgs e)
{
if (parentPreview != null)
{
parentPreview.onDoubleClick();
base.OnMouseDoubleClick(e);
}
}
}
public class MyNameLabel : Label
{
public PckPreview parentPreview;
protected override void OnMouseEnter(EventArgs e)
{
parentPreview.setHover(true);
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
parentPreview.setHover(false);
base.OnMouseLeave(e);
}
protected override void OnMouseClick(MouseEventArgs e)
{
parentPreview.onClick();
base.OnMouseClick(e);
}
}
}