aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/ShiftnetSites
diff options
context:
space:
mode:
authorRogueAI42 <[email protected]>2017-06-11 17:34:38 +1000
committerRogueAI42 <[email protected]>2017-06-11 17:38:53 +1000
commit107a98686a105468b5f200ebcbd27343c1210ce4 (patch)
treef6b8403368ddf0b4be2569c0ac8c237635e7b764 /ShiftOS.WinForms/ShiftnetSites
parentc3deaa23fffb7011efb2b5b0f7fc3e754d21f600 (diff)
downloadshiftos_thereturn-107a98686a105468b5f200ebcbd27343c1210ce4.tar.gz
shiftos_thereturn-107a98686a105468b5f200ebcbd27343c1210ce4.tar.bz2
shiftos_thereturn-107a98686a105468b5f200ebcbd27343c1210ce4.zip
ReflectMan Saves The Day..............
Refactored every part in the code that used that damn foreach loop. All assemblies are now loaded on startup into an array, and the results of GetType() on each are concatenated into another array. The parts of the code that were loading the assemblies and scanning them themselves now look to ReflectMan.Types, and all disk I/O is limited to the first time ReflectMan is accessed. While I was there I also replaced some other foreach loops with array comprehensions and such to speed things up - there is a noticeable improvement. It doesn't seem to have broken anything, but I'd appreciate if someone could do more stress testing for me.
Diffstat (limited to 'ShiftOS.WinForms/ShiftnetSites')
-rw-r--r--ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs30
-rw-r--r--ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs57
-rw-r--r--ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs69
3 files changed, 55 insertions, 101 deletions
diff --git a/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs b/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs
index c7830d0..c9b6f64 100644
--- a/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs
+++ b/ShiftOS.WinForms/ShiftnetSites/AppscapeMain.cs
@@ -207,33 +207,21 @@ namespace ShiftOS.WinForms.ShiftnetSites
if (result == true)
{
SaveSystem.CurrentSave.Codepoints -= upg.Cost;
- foreach (var exe in Directory.GetFiles(Environment.CurrentDirectory))
+ foreach (var type in ReflectMan.Types)
{
- if (exe.EndsWith(".exe") || exe.EndsWith(".dll"))
+ var attrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is AppscapeEntryAttribute) as AppscapeEntryAttribute;
+ if (attrib != null)
{
- try
+ if (attrib.Name == upg.Name)
{
- var asm = Assembly.LoadFile(exe);
- foreach (var type in asm.GetTypes())
- {
- var attrib = type.GetCustomAttributes(false).FirstOrDefault(x => x is AppscapeEntryAttribute) as AppscapeEntryAttribute;
- if (attrib != null)
- {
- if (attrib.Name == upg.Name)
- {
- var installer = new Applications.Installer();
- var installation = new AppscapeInstallation(upg.Name, attrib.DownloadSize, upg.ID);
- AppearanceManager.SetupWindow(installer);
- installer.InitiateInstall(installation);
- return;
- }
- }
- }
+ var installer = new Applications.Installer();
+ var installation = new AppscapeInstallation(upg.Name, attrib.DownloadSize, upg.ID);
+ AppearanceManager.SetupWindow(installer);
+ installer.InitiateInstall(installation);
+ return;
}
- catch { }
}
}
-
}
});
}
diff --git a/ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs b/ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs
index 6e692a7..10ba809 100644
--- a/ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs
+++ b/ShiftOS.WinForms/ShiftnetSites/MainHomepage.cs
@@ -39,49 +39,30 @@ namespace ShiftOS.WinForms.ShiftnetSites
{
//Get the Fundamentals List
flfundamentals.Controls.Clear();
- foreach (var exe in Directory.GetFiles(Environment.CurrentDirectory))
+ foreach (var type in Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IShiftnetSite)) && t.BaseType == typeof(UserControl) && Shiftorium.UpgradeAttributesUnlocked(t)))
{
- if (exe.EndsWith(".exe") || exe.EndsWith(".dll"))
+ var attrs = type.GetCustomAttributes(false);
+ var attribute = attrs.FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute;
+ if (attribute != null)
{
- try
+ if (attrs.OfType<ShiftnetFundamentalAttribute>().Any())
{
- var asm = Assembly.LoadFile(exe);
- foreach (var type in asm.GetTypes())
+ var dash = new Label();
+ dash.Text = " - ";
+ dash.AutoSize = true;
+ flfundamentals.Controls.Add(dash);
+ dash.Show();
+ var link = new LinkLabel();
+ link.Text = attribute.Name;
+ link.Click += (o, a) =>
{
- if (type.GetInterfaces().Contains(typeof(IShiftnetSite)))
- {
- if (type.BaseType == typeof(UserControl))
- {
- var attribute = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute;
- if (attribute != null)
- {
- if (Shiftorium.UpgradeAttributesUnlocked(type))
- {
- if (type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetFundamentalAttribute) != null)
- {
- var dash = new Label();
- dash.Text = " - ";
- dash.AutoSize = true;
- flfundamentals.Controls.Add(dash);
- dash.Show();
- var link = new LinkLabel();
- link.Text = attribute.Name;
- link.Click += (o, a) =>
- {
- GoToUrl?.Invoke(attribute.Url);
- };
- flfundamentals.Controls.Add(link);
- flfundamentals.SetFlowBreak(link, true);
- link.Show();
- link.LinkColor = SkinEngine.LoadedSkin.ControlTextColor;
- }
- }
- }
- }
- }
- }
+ GoToUrl?.Invoke(attribute.Url);
+ };
+ flfundamentals.Controls.Add(link);
+ flfundamentals.SetFlowBreak(link, true);
+ link.Show();
+ link.LinkColor = SkinEngine.LoadedSkin.ControlTextColor;
}
- catch { }
}
}
diff --git a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs
index 1593117..9b1c3b4 100644
--- a/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs
+++ b/ShiftOS.WinForms/ShiftnetSites/ShiftSoft_Ping.cs
@@ -34,53 +34,38 @@ namespace ShiftOS.WinForms.ShiftnetSites
public void SetupListing()
{
fllist.Controls.Clear();
- foreach(var exec in Directory.GetFiles(Environment.CurrentDirectory))
+ foreach (var type in Array.FindAll(ReflectMan.Types, t => t.GetInterfaces().Contains(typeof(IShiftnetSite))))
{
- if(exec.ToLower().EndsWith(".exe") || exec.ToLower().EndsWith(".dll"))
+ var attr = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute;
+ if (attr != null)
{
- try
+ if (attr.Url.StartsWith("shiftnet/"))
{
- var asm = Assembly.LoadFile(exec);
- var types = asm.GetTypes();
- foreach (var type in types)
+ var lnk = new LinkLabel();
+ lnk.LinkColor = SkinEngine.LoadedSkin.ControlTextColor;
+ lnk.Text = attr.Name;
+ var desc = new Label();
+ desc.AutoSize = true;
+ lnk.AutoSize = true;
+ desc.MaximumSize = new Size(this.Width / 3, 0);
+ desc.Text = attr.Description;
+ desc.Padding = new Padding
{
- if (type.GetInterfaces().Contains(typeof(IShiftnetSite)))
- {
- var attr = type.GetCustomAttributes(false).FirstOrDefault(x => x is ShiftnetSiteAttribute) as ShiftnetSiteAttribute;
- if (attr != null)
- {
- if (attr.Url.StartsWith("shiftnet/"))
- {
- var lnk = new LinkLabel();
- lnk.LinkColor = SkinEngine.LoadedSkin.ControlTextColor;
- lnk.Text = attr.Name;
- var desc = new Label();
- desc.AutoSize = true;
- lnk.AutoSize = true;
- desc.MaximumSize = new Size(this.Width / 3, 0);
- desc.Text = attr.Description;
- desc.Padding = new Padding
- {
- Bottom = 25,
- Top = 0,
- Left = 10,
- Right = 10
- };
- lnk.Click += (o, a) =>
- {
- GoToUrl?.Invoke(attr.Url);
- };
- fllist.Controls.Add(lnk);
- fllist.Controls.Add(desc);
- ControlManager.SetupControls(lnk);
- lnk.Show();
- desc.Show();
- }
- }
- }
- }
+ Bottom = 25,
+ Top = 0,
+ Left = 10,
+ Right = 10
+ };
+ lnk.Click += (o, a) =>
+ {
+ GoToUrl?.Invoke(attr.Url);
+ };
+ fllist.Controls.Add(lnk);
+ fllist.Controls.Add(desc);
+ ControlManager.SetupControls(lnk);
+ lnk.Show();
+ desc.Show();
}
- catch { }
}
}
}