diff --git a/NUS Downloader/Database.cs b/NUS Downloader/Database.cs index 6ea6b85..0056c63 100644 --- a/NUS Downloader/Database.cs +++ b/NUS Downloader/Database.cs @@ -23,7 +23,7 @@ namespace NUS_Downloader private string[] VcConsoles = new string[11] { "C64", "GEN", "MSX", "N64", "NEO", "NES", "SMS", "SNES", "TG16", "TGCD", "ARC" }; - MemoryStream databaseStream; + private string databaseString; private Image green = Properties.Resources.bullet_green; private Image orange = Properties.Resources.bullet_orange; @@ -34,43 +34,43 @@ namespace NUS_Downloader public void LoadDatabaseToStream(string databaseFile) { // Load database.xml into MemoryStream - string databasestr = File.ReadAllText(databaseFile); - System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); + databaseString = File.ReadAllText(databaseFile); + /*System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); byte[] databasebytes = encoding.GetBytes(databasestr); // Load the memory stream databaseStream = new MemoryStream(databasebytes); - databaseStream.Seek(0, SeekOrigin.Begin); + databaseStream.Seek(0, SeekOrigin.Begin);*/ } public string GetDatabaseVersion() { - if (databaseStream.Length < 1) + if (databaseString.Length < 1) { throw new Exception("Load the database into a memory stream first!"); } XmlDocument xDoc = new XmlDocument(); - xDoc.Load(databaseStream); + xDoc.LoadXml(databaseString); XmlNodeList DatabaseList = xDoc.GetElementsByTagName("database"); XmlAttributeCollection Attributes = DatabaseList[0].Attributes; return Attributes[0].Value; } - public ToolStripItemCollection LoadSystemTitles() + public ToolStripMenuItem[] LoadSystemTitles() { - if (databaseStream.Length < 1) + if (databaseString.Length < 1) { throw new Exception("Load the database into a memory stream first!"); } XmlDocument xDoc = new XmlDocument(); - xDoc.Load(databaseStream); - - ToolStripItemCollection systemTitleCollection = new ToolStripItemCollection(null, null); + xDoc.LoadXml(databaseString); XmlNodeList SystemTitlesXMLNodes = xDoc.GetElementsByTagName(SystemTag); + ToolStripMenuItem[] systemTitleCollection = new ToolStripMenuItem[SystemTitlesXMLNodes.Count]; + for (int x = 0; x < SystemTitlesXMLNodes.Count; x++) { ToolStripMenuItem XMLToolStripItem = new ToolStripMenuItem(); @@ -157,25 +157,23 @@ namespace NUS_Downloader } } //AddToolStripItemToStrip(i, XMLToolStripItem, XMLAttributes); - systemTitleCollection.Add(XMLToolStripItem); + systemTitleCollection[x] = XMLToolStripItem; } return systemTitleCollection; } - public ToolStripItemCollection LoadIosTitles() + public ToolStripMenuItem[] LoadIosTitles() { - if (databaseStream.Length < 1) + if (databaseString.Length < 1) { throw new Exception("Load the database into a memory stream first!"); } XmlDocument xDoc = new XmlDocument(); - xDoc.Load(databaseStream); - - ToolStripItemCollection iosTitleCollection = new ToolStripItemCollection(null, null); - + xDoc.LoadXml(databaseString); XmlNodeList IosTitlesXMLNodes = xDoc.GetElementsByTagName(IosTag); + ToolStripMenuItem[] iosTitleCollection = new ToolStripMenuItem[IosTitlesXMLNodes.Count]; for (int x = 0; x < IosTitlesXMLNodes.Count; x++) { @@ -228,25 +226,28 @@ namespace NUS_Downloader XMLToolStripItem.Text = descname; //Huh } - iosTitleCollection.Add(XMLToolStripItem); + iosTitleCollection[x] = XMLToolStripItem; } return iosTitleCollection; } - public ToolStripItemCollection[] LoadVirtualConsoleTitles() + public ToolStripMenuItem[][] LoadVirtualConsoleTitles() { - if (databaseStream.Length < 1) + if (databaseString.Length < 1) { throw new Exception("Load the database into a memory stream first!"); } XmlDocument xDoc = new XmlDocument(); - xDoc.Load(databaseStream); - - ToolStripItemCollection[] vcTitleCollection = new ToolStripItemCollection[VcConsoles.Length]; - + xDoc.LoadXml(databaseString); XmlNodeList VirtualConsoleXMLNodes = xDoc.GetElementsByTagName(VcTag); + ToolStripMenuItem[][] vcTitleCollection = new ToolStripMenuItem[VcConsoles.Length][]; + + for (int j = 0; j < vcTitleCollection.Length; j++) + { + vcTitleCollection[j] = new ToolStripMenuItem[0]; + } for (int x = 0; x < VirtualConsoleXMLNodes.Count; x++) { @@ -337,26 +338,27 @@ namespace NUS_Downloader for (int a = 0; a < VcConsoles.Length; a++) { if (XMLAttributes[0].Value == VcConsoles[a]) - vcTitleCollection[a].Add(XMLToolStripItem); + { + Array.Resize(ref vcTitleCollection[a], vcTitleCollection[a].Length + 1); + vcTitleCollection[a][vcTitleCollection[a].Length - 1] = XMLToolStripItem; + } } } return vcTitleCollection; } - public ToolStripItemCollection LoadWiiWareTitles() + public ToolStripMenuItem[] LoadWiiWareTitles() { - if (databaseStream.Length < 1) + if (databaseString.Length < 1) { throw new Exception("Load the database into a memory stream first!"); } XmlDocument xDoc = new XmlDocument(); - xDoc.Load(databaseStream); - - ToolStripItemCollection wwTitleCollection = new ToolStripItemCollection(null, null); - + xDoc.LoadXml(databaseString); XmlNodeList WiiWareTitlesXMLNodes = xDoc.GetElementsByTagName(WwTag); + ToolStripMenuItem[] wwTitleCollection = new ToolStripMenuItem[WiiWareTitlesXMLNodes.Count]; for (int x = 0; x < WiiWareTitlesXMLNodes.Count; x++) { @@ -444,7 +446,7 @@ namespace NUS_Downloader } } - wwTitleCollection.Add(XMLToolStripItem); + wwTitleCollection[x] = XMLToolStripItem; } return wwTitleCollection; @@ -475,13 +477,13 @@ namespace NUS_Downloader 58 (Some Homebrew) */ - if (databaseStream.Length < 1) + if (databaseString.Length < 1) { throw new Exception("Load the database into a memory stream first!"); } XmlDocument xDoc = new XmlDocument(); - xDoc.Load(databaseStream); + xDoc.LoadXml(databaseString); XmlNodeList XMLRegionList = xDoc.GetElementsByTagName("REGIONS"); XmlNodeList ChildrenOfTheNode = XMLRegionList[0].ChildNodes; diff --git a/NUS Downloader/Form1.cs b/NUS Downloader/Form1.cs index 5081a2f..fd15f5f 100644 --- a/NUS Downloader/Form1.cs +++ b/NUS Downloader/Form1.cs @@ -50,7 +50,7 @@ namespace NUS_Downloader // Cross-thread Windows Formsing private delegate void AddToolStripItemToStripCallback( - int type, ToolStripMenuItem additionitem, XmlAttributeCollection attributes); + ToolStripMenuItem menulist, ToolStripMenuItem additionitem); private delegate void WriteStatusCallback(string Update); private delegate void BootChecksCallback(); private delegate void SetEnableForDownloadCallback(bool enabled); @@ -183,6 +183,7 @@ namespace NUS_Downloader databaseButton.Text = "Download DB"; */ DatabaseEnabled(false); updateDatabaseToolStripMenuItem.Enabled = true; + updateDatabaseToolStripMenuItem.Visible = true; updateDatabaseToolStripMenuItem.Text = "Download Database"; } else @@ -767,6 +768,58 @@ namespace NUS_Downloader /// private void FillDatabaseStrip(BackgroundWorker worker) { + // Something needs to be done to remove this i guess + //Control.CheckForIllegalCrossThreadCalls = false; + + Database databaseObj = new Database(); + databaseObj.LoadDatabaseToStream(Path.Combine(CURRENT_DIR, "database.xml")); + + ToolStripMenuItem[] systemItems = databaseObj.LoadSystemTitles(); + for (int a = 0; a < systemItems.Length; a++) + { + systemItems[a].DropDownItemClicked += new ToolStripItemClickedEventHandler(sysitem_versionclicked); + AddToolStripItemToStrip(SystemMenuList, systemItems[a]); + //SystemMenuList.DropDownItems.Add(systemItems[a]); + } + SetPropertyThreadSafe(SystemMenuList, true, "Enabled"); + SetPropertyThreadSafe(SystemMenuList, true, "Visible"); + + ToolStripMenuItem[] iosItems = databaseObj.LoadIosTitles(); + for (int a = 0; a < iosItems.Length; a++) + { + iosItems[a].DropDownItemClicked += new ToolStripItemClickedEventHandler(sysitem_versionclicked); + AddToolStripItemToStrip(IOSMenuList, iosItems[a]); + //IOSMenuList.DropDownItems.Add(iosItems[a]); + } + SetPropertyThreadSafe(IOSMenuList, true, "Enabled"); + SetPropertyThreadSafe(IOSMenuList, true, "Visible"); + + ToolStripMenuItem[][] vcItems = databaseObj.LoadVirtualConsoleTitles(); + for (int a = 0; a < vcItems.Length; a++) + { + for (int b = 0; b < vcItems[a].Length; b++) + { + vcItems[a][b].DropDownItemClicked += new ToolStripItemClickedEventHandler(wwitem_regionclicked); + AddToolStripItemToStrip((ToolStripMenuItem)VCMenuList.DropDownItems[a], vcItems[a][b]); + //tsmi.DropDownItems.Add(vcItems[a][b]); + + } + } + SetPropertyThreadSafe(VCMenuList, true, "Enabled"); + SetPropertyThreadSafe(VCMenuList, true, "Visible"); + + ToolStripMenuItem[] wwItems = databaseObj.LoadWiiWareTitles(); + for (int a = 0; a < wwItems.Length; a++) + { + wwItems[a].DropDownItemClicked += new ToolStripItemClickedEventHandler(sysitem_versionclicked); + AddToolStripItemToStrip(WiiWareMenuList, wwItems[a]); + //WiiWareMenuList.DropDownItems.Add(wwItems[a]); + } + SetPropertyThreadSafe(WiiWareMenuList, true, "Enabled"); + SetPropertyThreadSafe(WiiWareMenuList, true, "Visible"); + + + /* // Load database.xml into memorystream to perhaps reduce disk reads? string databasestr = File.ReadAllText(Path.Combine(CURRENT_DIR, "database.xml")); System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); @@ -899,7 +952,7 @@ namespace NUS_Downloader SetPropertyThreadSafe(IOSMenuList, true, "Enabled"); break; case "SYS": - SetPropertyThreadSafe(SystemMenuList, true, "Enabled"); + break; case "VC": SetPropertyThreadSafe(VCMenuList, true, "Enabled"); @@ -908,7 +961,7 @@ namespace NUS_Downloader SetPropertyThreadSafe(WiiWareMenuList, true, "Enabled"); break; } - } + }*/ } /// @@ -917,17 +970,20 @@ namespace NUS_Downloader /// The type. /// The additionitem. /// The attributes. - private void AddToolStripItemToStrip(int type, ToolStripMenuItem additionitem, XmlAttributeCollection attributes) + private void AddToolStripItemToStrip(ToolStripMenuItem menulist, ToolStripMenuItem additionitem) { - Debug.WriteLine(String.Format("Adding item (Type: {0})...", type)); - // Check if thread-safe + Debug.WriteLine(String.Format("Adding item")); + if (this.InvokeRequired) { Debug.WriteLine("InvokeRequired..."); AddToolStripItemToStripCallback atsitsc = new AddToolStripItemToStripCallback(AddToolStripItemToStrip); - this.Invoke(atsitsc, new object[] {type, additionitem, attributes}); + this.Invoke(atsitsc, new object[] {menulist, additionitem}); return; } + + menulist.DropDownItems.Add(additionitem); + /* // Deal with VC list depth... if (type == 2) { @@ -1014,7 +1070,7 @@ namespace NUS_Downloader break; } additionitem.DropDownItemClicked += new ToolStripItemClickedEventHandler(sysitem_versionclicked); - } + }*/ } private void deepitem_clicked(object sender, ToolStripItemClickedEventArgs e) @@ -2069,7 +2125,8 @@ namespace NUS_Downloader { for (int a = 0; a < databaseStrip.Items.Count; a++) { - databaseStrip.Items[a].Enabled = false; + databaseStrip.Items[a].Enabled = enabled; + databaseStrip.Items[a].Visible = enabled; } } diff --git a/NUS Downloader/Latest/NUS Downloader.exe b/NUS Downloader/Latest/NUS Downloader.exe index 85c8082..0e65346 100644 Binary files a/NUS Downloader/Latest/NUS Downloader.exe and b/NUS Downloader/Latest/NUS Downloader.exe differ