From 1300a8ab0cd33655ff048b9df50413db7e68fb9a Mon Sep 17 00:00:00 2001
From: CreepyCrafter24 <33260128+CreepyCrafter24@users.noreply.github.com>
Date: Mon, 11 Nov 2019 15:23:14 +0100
Subject: [PATCH] More ToDos
---
ToDo.txt => ToDo and Notes.txt | 14 ++-
UpTool2.sln | 2 +-
UpTool2/MainForm.cs | 185 ++++++++++++++++-----------------
3 files changed, 102 insertions(+), 99 deletions(-)
rename ToDo.txt => ToDo and Notes.txt (56%)
diff --git a/ToDo.txt b/ToDo and Notes.txt
similarity index 56%
rename from ToDo.txt
rename to ToDo and Notes.txt
index 3e8b009..3bce580 100644
--- a/ToDo.txt
+++ b/ToDo and Notes.txt
@@ -1,8 +1,16 @@
More Icons for Apps
More apps: Laptop Sim (when done)
Split up main File (MainForm.cs) to (more or less) independent modules
-Allow Repos to contain "Links" to seperate Repos/App files (Repo with only one app & without a repo tag)
Automatically push Meta.xml changes after building
-Show number of available updates
-NOTE: All command prompts will be removed soon (tm) Update your scripts to reflect this change (there may be some things provided for dialogs)
\ No newline at end of file
+
+
+
+
+
+NOTE: All command prompts will be removed soon (tm) Update your scripts to reflect this change (there may be some things provided for dialogs)
+
+Repo structure:
+
+ ##In-Line app definitions with , references to apps ( ) or repos ( ) see Repo.xml for example app definitions. A remote app consists only of the tag
+
\ No newline at end of file
diff --git a/UpTool2.sln b/UpTool2.sln
index b98ca06..c99d77d 100644
--- a/UpTool2.sln
+++ b/UpTool2.sln
@@ -11,7 +11,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.github\workflows\main.yml = .github\workflows\main.yml
Meta.xml = Meta.xml
Repo.xml = Repo.xml
- ToDo.txt = ToDo.txt
+ ToDo and Notes.txt = ToDo and Notes.txt
EndProjectSection
EndProject
Global
diff --git a/UpTool2/MainForm.cs b/UpTool2/MainForm.cs
index 8e165c1..4b0b42b 100644
--- a/UpTool2/MainForm.cs
+++ b/UpTool2/MainForm.cs
@@ -172,6 +172,7 @@ namespace UpTool2
toolTip.SetToolTip(action_update, "Update");
toolTip.SetToolTip(action_run, "Run");
getReposFromDisk();
+ int availableUpdates = 0;
foreach (App app in apps.Values)
{
Panel sidebarIcon = new Panel();
@@ -191,14 +192,17 @@ namespace UpTool2
action_remove.Enabled = Directory.Exists(dir + @"\Apps\" + app.ID.ToString());
action_update.Tag = app;
string xml = dir + @"\Apps\" + app.ID.ToString() + @"\info.xml";
- action_update.Enabled = (!app.local) && File.Exists(xml) && int.Parse(XDocument.Load(xml).Element("app").Element("Version").Value) < app.version;
+ action_update.Enabled = (!app.local) && File.Exists(getInfoPath(app)) && int.Parse(XDocument.Load(getInfoPath(app)).Element("app").Element("Version").Value) < app.version;
action_run.Tag = app;
action_run.Enabled = (!app.local) && app.runnable && Directory.Exists(dir + @"\Apps\" + app.ID.ToString());
};
+ if ((!app.local) && File.Exists(getInfoPath(app)) && int.Parse(XDocument.Load(getInfoPath(app)).Element("app").Element("Version").Value) < app.version)
+ availableUpdates++;
toolTip.SetToolTip(sidebarIcon, app.name);
sidebarPanel.Controls.Add(sidebarIcon);
}
updateSidebarV(null, null);
+ Text = "UpTool2 " + ((availableUpdates == 0) ? "(All up-to-date)" : "(" + availableUpdates.ToString() + " Updates)");
}
void getReposFromDisk()
@@ -208,7 +212,7 @@ namespace UpTool2
XDocument.Load(xml).Element("meta").Element("LocalRepo").Elements().ToList().ForEach(app =>
{
Guid id = Guid.Parse(app.Element("ID").Value);
- string locInPath = getAppPath(id) + "\\info.xml";
+ string locInPath = getInfoPath(id);
XElement locIn = File.Exists(locInPath) ? XDocument.Load(locInPath).Element("app") : app;
apps.Add(id, new App(
name: locIn.Element("Name").Value,
@@ -233,7 +237,7 @@ namespace UpTool2
Guid tmp = Guid.Parse(Path.GetFileName(s));
try
{
- XElement data = XDocument.Load(getAppPath(tmp) + @"\info.xml").Element("app");
+ XElement data = XDocument.Load(getInfoPath(tmp)).Element("app");
apps.Add(tmp, new App("(local) " + data.Element("Name").Value, data.Element("Description").Value, -1, "", true, "", tmp, Color.Red, Resources.C_64.ToBitmap(), data.Element("MainFile") != null, data.Element("MainFile") == null ? "" : data.Element("MainFile").Value));
}
catch (Exception e)
@@ -255,68 +259,71 @@ namespace UpTool2
meta.Add(new XElement("Repos"));
if (meta.Element("Repos").Elements("Repo").Count() == 0)
meta.Element("Repos").Add(new XElement("Repo", new XElement("Name", "UpTool2 official Repo"), new XElement("Link", "https://github.com/CreepyCrafter24/UpTool2/releases/download/Repo/Repo.xml")));
- string[] repArr = meta.Element("Repos").Elements("Repo").Select(s => s.Element("Link").Value).ToArray();
+ List repArr = meta.Element("Repos").Elements("Repo").Select(s => s.Element("Link").Value).ToList();
using (WebClient client = new WebClient())
{
- for (int i = 0; i < repArr.Length; i++)
+ int i = 0;
+ while (i < repArr.Count)
{
#if !DEBUG
try
{
#endif
XDocument repo = XDocument.Load(repArr[i]);
- foreach (XElement app in repo.Element("repo").Elements("app"))
+ repArr.AddRange(repo.Element("repo").Elements("repolink").Select(s => s.Value));
+ XElement[] tmp_apparray = repo.Element("repo").Elements("app").Where(app => tmp_apps_list.Where(a => a.Element("ID").Value == app.Element("ID").Value).Count() == 0 ||
+ tmp_apps_list.Where(a => a.Element("ID").Value == app.Element("ID").Value)
+ .Where(a => int.Parse(a.Element("Version").Value) >= int.Parse(app.Element("Version").Value)).Count() == 0).ToArray()
+ .Concat(repo.Element("repo").Elements("applink").Select(s => XDocument.Load(s.Value).Element("app"))).ToArray();
+ for (int i1 = 0; i1 < tmp_apparray.Length; i1++)
{
- if (tmp_apps_list.Where(a => a.Element("ID").Value == app.Element("ID").Value).Count() == 0 ||
- tmp_apps_list.Where(a => a.Element("ID").Value == app.Element("ID").Value)
- .Where(a => int.Parse(a.Element("Version").Value) >= int.Parse(app.Element("Version").Value)).Count() == 0)
+ XElement app = tmp_apparray[i1];
+ //"Sanity check"
+ int.Parse(app.Element("Version").Value);
+ Guid.Parse(app.Element("ID").Value);
+ //Create XElement
+ tmp_apps_list.Add(new XElement("App",
+ new XElement("Name", app.Element("Name").Value),
+ new XElement("Description", app.Element("Description").Value),
+ new XElement("Version", app.Element("Version").Value),
+ new XElement("ID", app.Element("ID").Value),
+ new XElement("File", app.Element("File").Value),
+ new XElement("Hash", app.Element("Hash").Value)
+ ));
+ if (app.Element("MainFile") != null)
+ tmp_apps_list.Last().Add(new XElement("MainFile", app.Element("MainFile").Value));
+ if (app.Element("Icon") != null)
{
- //"Sanity check"
- int.Parse(app.Element("Version").Value);
- Guid.Parse(app.Element("ID").Value);
- //Create XElement
- tmp_apps_list.Add(new XElement("App",
- new XElement("Name", app.Element("Name").Value),
- new XElement("Description", app.Element("Description").Value),
- new XElement("Version", app.Element("Version").Value),
- new XElement("ID", app.Element("ID").Value),
- new XElement("File", app.Element("File").Value),
- new XElement("Hash", app.Element("Hash").Value)
- ));
- if (app.Element("MainFile") != null)
- tmp_apps_list.Last().Add(new XElement("MainFile", app.Element("MainFile").Value));
- if (app.Element("Icon") != null)
+ try
{
- try
+ //Scale Image and save as Base64
+ Image src = Image.FromStream(client.OpenRead(app.Element("Icon").Value));
+ Bitmap dest = new Bitmap(70, 70);
+ dest.SetResolution(src.HorizontalResolution, src.VerticalResolution);
+ using (Graphics g = Graphics.FromImage(dest))
{
- //Scale Image and save as Base64
- Image src = Image.FromStream(client.OpenRead(app.Element("Icon").Value));
- Bitmap dest = new Bitmap(70, 70);
- dest.SetResolution(src.HorizontalResolution, src.VerticalResolution);
- using (Graphics g = Graphics.FromImage(dest))
+ g.CompositingMode = CompositingMode.SourceCopy;
+ g.CompositingQuality = CompositingQuality.HighQuality;
+ g.InterpolationMode = InterpolationMode.HighQualityBicubic;
+ g.SmoothingMode = SmoothingMode.HighQuality;
+ g.PixelOffsetMode = PixelOffsetMode.HighQuality;
+ using (var wrapMode = new ImageAttributes())
{
- g.CompositingMode = CompositingMode.SourceCopy;
- g.CompositingQuality = CompositingQuality.HighQuality;
- g.InterpolationMode = InterpolationMode.HighQualityBicubic;
- g.SmoothingMode = SmoothingMode.HighQuality;
- g.PixelOffsetMode = PixelOffsetMode.HighQuality;
- using (var wrapMode = new ImageAttributes())
- {
- wrapMode.SetWrapMode(WrapMode.TileFlipXY);
- g.DrawImage(src, new Rectangle(0, 0, 70, 70), 0, 0, src.Width, src.Height, GraphicsUnit.Pixel, wrapMode);
- }
- }
- using (var ms = new MemoryStream())
- {
- dest.Save(ms, ImageFormat.Png);
- tmp_apps_list.Last().Add(new XElement("Icon", Convert.ToBase64String(ms.ToArray())));
+ wrapMode.SetWrapMode(WrapMode.TileFlipXY);
+ g.DrawImage(src, new Rectangle(0, 0, 70, 70), 0, 0, src.Width, src.Height, GraphicsUnit.Pixel, wrapMode);
}
}
- catch { }
+ using (var ms = new MemoryStream())
+ {
+ dest.Save(ms, ImageFormat.Png);
+ tmp_apps_list.Last().Add(new XElement("Icon", Convert.ToBase64String(ms.ToArray())));
+ }
}
- if (tmp_apps_list.Where(a => a.Element("ID").Value == app.Element("ID").Value).Count() > 1)
- tmp_apps_list.Where(a => a.Element("ID").Value == app.Element("ID").Value).Reverse().Skip(1).ToList().ForEach(a => tmp_apps_list.Remove(a));
+ catch { }
}
+
+ if (tmp_apps_list.Where(a => a.Element("ID").Value == app.Element("ID").Value).Count() > 1)
+ tmp_apps_list.Where(a => a.Element("ID").Value == app.Element("ID").Value).Reverse().Skip(1).ToList().ForEach(a => tmp_apps_list.Remove(a));
}
#if !DEBUG
}
@@ -325,6 +332,7 @@ namespace UpTool2
MessageBox.Show(e.ToString(), "Failed to load repo: " + repArr[i]);
}
#endif
+ i++;
}
}
tmp_apps_list.Sort((x, y) => x.Element("Name").Value.CompareTo(y.Element("Name").Value));
@@ -440,57 +448,42 @@ namespace UpTool2
private void controls_local_Click(object sender, EventArgs e)
{
File.Copy(dir + @"\update.exe", dir + @"\UpTool2.exe", true);
- Shortcut.Create(Path.GetDirectoryName(Application.ExecutablePath) + "\\UpTool2.lnk", dir + @"\UpTool2.exe", null, null, null, null, null);
- Shortcut.Create(Environment.GetFolderPath(Environment.SpecialFolder.Programs) + "\\UpTool2.lnk", dir + @"\UpTool2.exe", null, null, null, null, null);
+ Type m_type = Type.GetTypeFromProgID("WScript.Shell");
+ object m_shell = Activator.CreateInstance(m_type);
+ IWshShortcut shortcut = (IWshShortcut)m_type.InvokeMember("CreateShortcut", System.Reflection.BindingFlags.InvokeMethod, null, m_shell, new object[] { Path.GetDirectoryName(Application.ExecutablePath) + "\\UpTool2.lnk" });
+ shortcut.TargetPath = dir + @"\UpTool2.exe";
+ shortcut.Save();
+ shortcut = (IWshShortcut)m_type.InvokeMember("CreateShortcut", System.Reflection.BindingFlags.InvokeMethod, null, m_shell, new object[] { Environment.GetFolderPath(Environment.SpecialFolder.Programs) + "\\UpTool2.lnk" });
+ shortcut.TargetPath = dir + @"\UpTool2.exe";
+ shortcut.Save();
Close();
}
- public class Shortcut
+ [ComImport, TypeLibType(0x1040), Guid("F935DC23-1CF0-11D0-ADB9-00C04FD58A0B")]
+ private interface IWshShortcut
{
-
- private static Type m_type = Type.GetTypeFromProgID("WScript.Shell");
- private static object m_shell = Activator.CreateInstance(m_type);
-
- [ComImport, TypeLibType((short)0x1040), Guid("F935DC23-1CF0-11D0-ADB9-00C04FD58A0B")]
- private interface IWshShortcut
- {
- [DispId(0)]
- string FullName { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0)] get; }
- [DispId(0x3e8)]
- string Arguments { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] set; }
- [DispId(0x3e9)]
- string Description { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] set; }
- [DispId(0x3ea)]
- string Hotkey { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] set; }
- [DispId(0x3eb)]
- string IconLocation { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] set; }
- [DispId(0x3ec)]
- string RelativePath { [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ec)] set; }
- [DispId(0x3ed)]
- string TargetPath { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] set; }
- [DispId(0x3ee)]
- int WindowStyle { [DispId(0x3ee)] get; [param: In] [DispId(0x3ee)] set; }
- [DispId(0x3ef)]
- string WorkingDirectory { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] set; }
- [TypeLibFunc((short)0x40), DispId(0x7d0)]
- void Load([In, MarshalAs(UnmanagedType.BStr)] string PathLink);
- [DispId(0x7d1)]
- void Save();
- }
-
- public static void Create(string fileName, string targetPath, string arguments, string workingDirectory, string description, string hotkey, string iconPath)
- {
- IWshShortcut shortcut = (IWshShortcut)m_type.InvokeMember("CreateShortcut", System.Reflection.BindingFlags.InvokeMethod, null, m_shell, new object[] { fileName });
- shortcut.Description = description;
- shortcut.TargetPath = targetPath;
- shortcut.WorkingDirectory = workingDirectory;
- shortcut.Arguments = arguments;
- if (!string.IsNullOrEmpty(hotkey))
- shortcut.Hotkey = hotkey;
- if (!string.IsNullOrEmpty(iconPath))
- shortcut.IconLocation = iconPath;
- shortcut.Save();
- }
+ [DispId(0)]
+ string FullName { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0)] get; }
+ [DispId(0x3e8)]
+ string Arguments { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] set; }
+ [DispId(0x3e9)]
+ string Description { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] set; }
+ [DispId(0x3ea)]
+ string Hotkey { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] set; }
+ [DispId(0x3eb)]
+ string IconLocation { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] set; }
+ [DispId(0x3ec)]
+ string RelativePath { [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ec)] set; }
+ [DispId(0x3ed)]
+ string TargetPath { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] set; }
+ [DispId(0x3ee)]
+ int WindowStyle { [DispId(0x3ee)] get; [param: In] [DispId(0x3ee)] set; }
+ [DispId(0x3ef)]
+ string WorkingDirectory { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] set; }
+ [TypeLibFunc((short)0x40), DispId(0x7d0)]
+ void Load([In, MarshalAs(UnmanagedType.BStr)] string PathLink);
+ [DispId(0x7d1)]
+ void Save();
}
#endregion
#region Definitions
@@ -558,8 +551,10 @@ namespace UpTool2
string appsPath => dir + @"\Apps";
string getAppPath(App app) => getAppPath(app.ID);
string getDataPath(App app) => getDataPath(app.ID);
+ string getInfoPath(App app) => getInfoPath(app.ID);
string getAppPath(Guid app) => appsPath + @"\" + app.ToString();
string getDataPath(Guid app) => getAppPath(app) + @"\app";
+ string getInfoPath(Guid app) => getAppPath(app) + "\\info.xml";
bool relE = true;
#endregion
}