diff --git a/NUS Downloader/Form1.Designer.cs b/NUS Downloader/Form1.Designer.cs
index 23da2cf..e241734 100644
--- a/NUS Downloader/Form1.Designer.cs
+++ b/NUS Downloader/Form1.Designer.cs
@@ -79,6 +79,7 @@ namespace NUS_Downloader
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.proxySettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
+ this.openNUSDDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.moreExtrasToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.runFolderFixToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.wiiBrewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -87,7 +88,6 @@ namespace NUS_Downloader
this.removeNUSDFilesFoldersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.databaseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.localTicketInventoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.openNUSDDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.donateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutNUSDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.proxyBox = new System.Windows.Forms.GroupBox();
@@ -127,10 +127,11 @@ namespace NUS_Downloader
this.packbox = new System.Windows.Forms.CheckBox();
this.decryptbox = new System.Windows.Forms.CheckBox();
this.localuse = new System.Windows.Forms.CheckBox();
+ this.serverLbl = new System.Windows.Forms.Label();
this.titleidbox = new wmgCMS.WaterMarkTextBox();
this.dlprogress = new wyDay.Controls.Windows7ProgressBar();
this.titleversion = new wmgCMS.WaterMarkTextBox();
- this.serverLbl = new System.Windows.Forms.Label();
+ this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
this.databaseStrip.SuspendLayout();
this.extrasStrip.SuspendLayout();
this.proxyBox.SuspendLayout();
@@ -229,7 +230,7 @@ namespace NUS_Downloader
// SystemMenuList
//
this.SystemMenuList.AutoSize = false;
- this.SystemMenuList.Image = global::NUS_Downloader.Properties.Resources.wii16x16_copy;
+ this.SystemMenuList.Image = ((System.Drawing.Image)(resources.GetObject("SystemMenuList.Image")));
this.SystemMenuList.Name = "SystemMenuList";
this.SystemMenuList.Size = new System.Drawing.Size(158, 22);
this.SystemMenuList.Text = "System";
@@ -244,7 +245,7 @@ namespace NUS_Downloader
//
// IOSMenuList
//
- this.IOSMenuList.Image = global::NUS_Downloader.Properties.Resources.wii16x16_copy;
+ this.IOSMenuList.Image = ((System.Drawing.Image)(resources.GetObject("IOSMenuList.Image")));
this.IOSMenuList.Name = "IOSMenuList";
this.IOSMenuList.Size = new System.Drawing.Size(163, 22);
this.IOSMenuList.Text = "IOS";
@@ -271,7 +272,7 @@ namespace NUS_Downloader
this.TurboGrafx16MenuList,
this.TurboGrafxCDMenuList,
this.VCArcadeMenuList});
- this.VCMenuList.Image = global::NUS_Downloader.Properties.Resources.wii16x16_copy;
+ this.VCMenuList.Image = ((System.Drawing.Image)(resources.GetObject("VCMenuList.Image")));
this.VCMenuList.Name = "VCMenuList";
this.VCMenuList.Size = new System.Drawing.Size(163, 22);
this.VCMenuList.Text = "Virtual Console";
@@ -352,7 +353,7 @@ namespace NUS_Downloader
//
// WiiWareMenuList
//
- this.WiiWareMenuList.Image = global::NUS_Downloader.Properties.Resources.wii16x16_copy;
+ this.WiiWareMenuList.Image = ((System.Drawing.Image)(resources.GetObject("WiiWareMenuList.Image")));
this.WiiWareMenuList.Name = "WiiWareMenuList";
this.WiiWareMenuList.Size = new System.Drawing.Size(163, 22);
this.WiiWareMenuList.Text = "WiiWare";
@@ -453,9 +454,10 @@ namespace NUS_Downloader
this.openNUSDDirectoryToolStripMenuItem,
this.moreExtrasToolStripMenuItem,
this.donateToolStripMenuItem,
+ this.toolStripSeparator7,
this.aboutNUSDToolStripMenuItem});
this.extrasStrip.Name = "extrasStrip";
- this.extrasStrip.Size = new System.Drawing.Size(178, 170);
+ this.extrasStrip.Size = new System.Drawing.Size(178, 154);
this.extrasStrip.Text = "Hidden";
this.extrasStrip.Closed += new System.Windows.Forms.ToolStripDropDownClosedEventHandler(this.anyStrip_Closed);
this.extrasStrip.Opening += new System.ComponentModel.CancelEventHandler(this.extrasStrip_Opening);
@@ -486,6 +488,14 @@ namespace NUS_Downloader
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(174, 6);
//
+ // openNUSDDirectoryToolStripMenuItem
+ //
+ this.openNUSDDirectoryToolStripMenuItem.Image = global::NUS_Downloader.Properties.Resources.folder;
+ this.openNUSDDirectoryToolStripMenuItem.Name = "openNUSDDirectoryToolStripMenuItem";
+ this.openNUSDDirectoryToolStripMenuItem.Size = new System.Drawing.Size(177, 22);
+ this.openNUSDDirectoryToolStripMenuItem.Text = "Open NUSD Directory";
+ this.openNUSDDirectoryToolStripMenuItem.Click += new System.EventHandler(this.openNUSDDirectoryToolStripMenuItem_Click);
+ //
// moreExtrasToolStripMenuItem
//
this.moreExtrasToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -551,20 +561,13 @@ namespace NUS_Downloader
this.localTicketInventoryToolStripMenuItem.Text = "Local Ticket Inventory";
this.localTicketInventoryToolStripMenuItem.Click += new System.EventHandler(this.localTicketInventoryToolStripMenuItem_Click);
//
- // openNUSDDirectoryToolStripMenuItem
- //
- this.openNUSDDirectoryToolStripMenuItem.Image = global::NUS_Downloader.Properties.Resources.folder;
- this.openNUSDDirectoryToolStripMenuItem.Name = "openNUSDDirectoryToolStripMenuItem";
- this.openNUSDDirectoryToolStripMenuItem.Size = new System.Drawing.Size(177, 22);
- this.openNUSDDirectoryToolStripMenuItem.Text = "Open NUSD Directory";
- this.openNUSDDirectoryToolStripMenuItem.Click += new System.EventHandler(this.openNUSDDirectoryToolStripMenuItem_Click);
- //
// donateToolStripMenuItem
//
this.donateToolStripMenuItem.Image = global::NUS_Downloader.Properties.Resources.money;
this.donateToolStripMenuItem.Name = "donateToolStripMenuItem";
this.donateToolStripMenuItem.Size = new System.Drawing.Size(177, 22);
this.donateToolStripMenuItem.Text = "Donate!";
+ this.donateToolStripMenuItem.Visible = false;
this.donateToolStripMenuItem.Click += new System.EventHandler(this.donateToolStripMenuItem_Click);
//
// aboutNUSDToolStripMenuItem
@@ -993,6 +996,20 @@ namespace NUS_Downloader
this.localuse.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
this.localuse.UseVisualStyleBackColor = true;
//
+ // serverLbl
+ //
+ this.serverLbl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.serverLbl.Location = new System.Drawing.Point(233, 38);
+ this.serverLbl.Name = "serverLbl";
+ this.serverLbl.Size = new System.Drawing.Size(29, 20);
+ this.serverLbl.TabIndex = 57;
+ this.serverLbl.Text = "Wii";
+ this.serverLbl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.serverLbl.TextChanged += new System.EventHandler(this.serverLbl_TextChanged);
+ this.serverLbl.Click += new System.EventHandler(this.serverLbl_Click);
+ this.serverLbl.MouseEnter += new System.EventHandler(this.serverLbl_MouseEnter);
+ this.serverLbl.MouseLeave += new System.EventHandler(this.serverLbl_MouseLeave);
+ //
// titleidbox
//
this.titleidbox.Font = new System.Drawing.Font("Tahoma", 8.25F);
@@ -1027,19 +1044,10 @@ namespace NUS_Downloader
this.titleversion.WaterMarkText = "Version";
this.titleversion.TextChanged += new System.EventHandler(this.titleversion_TextChanged);
//
- // serverLbl
+ // toolStripSeparator7
//
- this.serverLbl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.serverLbl.Location = new System.Drawing.Point(233, 38);
- this.serverLbl.Name = "serverLbl";
- this.serverLbl.Size = new System.Drawing.Size(29, 20);
- this.serverLbl.TabIndex = 57;
- this.serverLbl.Text = "Wii";
- this.serverLbl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.serverLbl.TextChanged += new System.EventHandler(this.serverLbl_TextChanged);
- this.serverLbl.Click += new System.EventHandler(this.serverLbl_Click);
- this.serverLbl.MouseEnter += new System.EventHandler(this.serverLbl_MouseEnter);
- this.serverLbl.MouseLeave += new System.EventHandler(this.serverLbl_MouseLeave);
+ this.toolStripSeparator7.Name = "toolStripSeparator7";
+ this.toolStripSeparator7.Size = new System.Drawing.Size(174, 6);
//
// Form1
//
@@ -1185,6 +1193,7 @@ namespace NUS_Downloader
private System.Windows.Forms.ToolStripMenuItem wiiRegionCodesMenu;
private System.Windows.Forms.ToolStripMenuItem dsiRegionCodesMenu;
private System.Windows.Forms.Label serverLbl;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
}
}
diff --git a/NUS Downloader/Form1.cs b/NUS Downloader/Form1.cs
index 7947973..ba6f021 100644
--- a/NUS Downloader/Form1.cs
+++ b/NUS Downloader/Form1.cs
@@ -638,10 +638,10 @@ namespace NUS_Downloader
{
SetTextThreadSafe(statusbox, " --- " + titleidbox.Text + " ---");
}
- }*/
+ }
else
- WriteStatus(" --- " + titleidbox.Text + " ---");
-
+ WriteStatus(" --- " + titleidbox.Text + " ---");*/
+
// Running Downloads in background so no form freezing
NUSDownloader.RunWorkerAsync();
@@ -682,7 +682,6 @@ namespace NUS_Downloader
// WebClient configuration
WebClient nusWC = new WebClient();
nusWC = ConfigureWithProxy(nusWC);
- nusWC.Headers.Add("User-Agent", "wii libnup/1.0"); // Set UserAgent to Wii value
// Create\Configure NusClient
libWiiSharp.NusClient nusClient = new libWiiSharp.NusClient();
@@ -1741,7 +1740,7 @@ namespace NUS_Downloader
/// Database as a String
private void RetrieveNewDatabase(object sender, DoWorkEventArgs e)
{
- // Retrieve Wiibrew database page source code
+ // Retrieve Wiibrew/DSiBrew database page source code
WebClient databasedl = new WebClient();
// Proxy
@@ -1811,7 +1810,7 @@ namespace NUS_Downloader
if (File.Exists(databaseFilename))
{
WriteStatus(" - Overwriting your current database...");
- WriteStatus(" - The old database will become 'old*database.xml' in case the new one is faulty.");
+ WriteStatus(String.Format(" - The old database will become 'old{0}' in case the new one is faulty.", databaseFilename));
string olddatabase = File.ReadAllText(databaseFilename);
File.WriteAllText("old" + databaseFilename, olddatabase);
@@ -1820,8 +1819,8 @@ namespace NUS_Downloader
}
else
{
- WriteStatus(" - database.xml has been created.");
- File.WriteAllText("database.xml", database);
+ WriteStatus(String.Format(" - {0} has been created.", databaseFilename));
+ File.WriteAllText(databaseFilename, database);
isCreation = true;
}
@@ -2423,15 +2422,15 @@ namespace NUS_Downloader
WriteStatus("Various contributions by lukegb");
WriteStatus(String.Empty);
- if (NUSDFileExists("key.bin") == false)
+ if (NUSDFileExists("key.bin") == true)
WriteStatus("Wii Decryption: Local (key.bin)");
-
- if (NUSDFileExists("kkey.bin") == false)
+
+ if (NUSDFileExists("kkey.bin") == true)
WriteStatus("Wii Korea Decryption: Local (kkey.bin)");
-
-
- if (NUSDFileExists("dsikey.bin") == false)
+
+
+ if (NUSDFileExists("dsikey.bin") == true)
WriteStatus("DSi Decryption: Local (dsikey.bin)");
diff --git a/NUS Downloader/Form1.resx b/NUS Downloader/Form1.resx
index 3a65736..df3e553 100644
--- a/NUS Downloader/Form1.resx
+++ b/NUS Downloader/Form1.resx
@@ -123,13 +123,265 @@
159, 17
+
+
+
+ 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
+ 71CQAAAAAElFTkSuQmCC
+
+
+
+
+ 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
+ 71CQAAAAAElFTkSuQmCC
+
+
+
+
+ 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
+ 71CQAAAAAElFTkSuQmCC
+
+
+
+
+ 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
+ 71CQAAAAAElFTkSuQmCC
+
+
285, 17
394, 17
-
AAABAAYAEBAAAAAAIABoBAAAZgAAABgYAAAAACAAiAkAAM4EAAAgIAAAAAAgAKgQAABWDgAAMDAAAAAA
diff --git a/NUS Downloader/Latest/NUS Downloader.exe b/NUS Downloader/Latest/NUS Downloader.exe
index 8bd9e82..08183fb 100644
Binary files a/NUS Downloader/Latest/NUS Downloader.exe and b/NUS Downloader/Latest/NUS Downloader.exe differ
diff --git a/NUS Downloader/NUS Downloader.csproj b/NUS Downloader/NUS Downloader.csproj
index 3c39912..a74fad8 100644
--- a/NUS Downloader/NUS Downloader.csproj
+++ b/NUS Downloader/NUS Downloader.csproj
@@ -14,10 +14,10 @@
512
Crystal_Clear_app_ark2.ico
false
- 5828AACDBD1A48E3768B7E0465E90D0E96E2BE4C
+ 1555E408E7D4078FB64D4CC67B4156C20E540209
NUS Downloader_TemporaryKey.pfx
- false
- false
+ true
+ true
LocalIntranet
Properties\app.manifest
@@ -25,7 +25,8 @@
3.5
- C:\Users\Luke\Desktop\NUSD\build\
+
+ C:\Users\Windows7\Documents\Visual Studio 2010\Projects\NUS Downloader\NUS Downloader\publish\
true
Disk
false
@@ -34,13 +35,13 @@
Days
false
false
- true
- 11
+ false
+ false
+ 12
1.0.0.%2a
false
true
true
-
true
@@ -110,6 +111,7 @@
Designer
+
SettingsSingleFileGenerator
Settings.Designer.cs
@@ -216,6 +218,28 @@
false
+
+
+ False
+
+
+
+
+ Exclude
+ True
+ File
+
+
+ False
+
+
+
+
+ Exclude
+ True
+ File
+
+
copy "$(TargetPath)" "$(ProjectDir)\Latest\"
diff --git a/NUS Downloader/NusClient.cs b/NUS Downloader/NusClient.cs
index 8c88d15..135de20 100644
--- a/NUS Downloader/NusClient.cs
+++ b/NUS Downloader/NusClient.cs
@@ -37,6 +37,9 @@ namespace libWiiSharp
private const string WII_NUS_URL = "http://nus.cdn.shop.wii.com/ccs/download/";
private const string DSI_NUS_URL = "http://nus.cdn.t.shop.nintendowifi.net/ccs/download/";
+ private const string WII_USER_AGENT = "wii libnup/1.0";
+ private const string DSI_USER_AGENT = "Opera/9.50 (Nintendo; Opera/154; U; Nintendo DS; en)";
+
private string nusUrl = WII_NUS_URL;
private WebClient wcNus = new WebClient();
private bool useLocalFiles = false;
@@ -90,11 +93,13 @@ namespace libWiiSharp
public void SetToWiiServer()
{
nusUrl = WII_NUS_URL;
+ wcNus.Headers.Add("User-Agent", WII_USER_AGENT);
}
public void SetToDSiServer()
{
nusUrl = DSI_NUS_URL;
+ wcNus.Headers.Add("User-Agent", DSI_USER_AGENT);
}
///
@@ -285,21 +290,21 @@ namespace libWiiSharp
switch (st)
{
case StoreType.DecryptedContent:
- fireDebug(" -> Storing Decrypted Content...");
+ fireDebug(" [=] Storing Decrypted Content...");
storeDecrypted = true;
break;
case StoreType.EncryptedContent:
- fireDebug(" -> Storing Encrypted Content...");
+ fireDebug(" [=] Storing Encrypted Content...");
storeEncrypted = true;
break;
case StoreType.WAD:
- fireDebug(" -> Storing WAD...");
+ fireDebug(" [=] Storing WAD...");
storeWad = true;
break;
case StoreType.All:
- fireDebug(" -> Storing Decrypted Content...");
- fireDebug(" -> Storing Encrypted Content...");
- fireDebug(" -> Storing WAD...");
+ fireDebug(" [=] Storing Decrypted Content...");
+ fireDebug(" [=] Storing Encrypted Content...");
+ fireDebug(" [=] Storing WAD...");
storeDecrypted = true;
storeEncrypted = true;
storeWad = true;
@@ -308,12 +313,12 @@ namespace libWiiSharp
break;
}
}
-
- fireDebug(" Checking for Internet connection...");
+ /*
+ fireDebug(" - Checking for Internet connection...");
if (!CheckInet())
- { fireDebug(" Connection not found..."); throw new Exception("You're not connected to the internet!"); }
-
- //if (outputDir[outputDir.Length - 1] != Path.DirectorySeparatorChar) outputDir += Path.DirectorySeparatorChar;
+ { fireDebug(" + Connection not found..."); throw new Exception("You're not connected to the internet!"); }
+ */
+
if (!Directory.Exists(outputDir)) Directory.CreateDirectory(outputDir);
if (!Directory.Exists(Path.Combine(outputDir, titleId))) Directory.CreateDirectory(Path.Combine(outputDir, titleId));
outputDir = Path.Combine(outputDir, titleId);
@@ -321,7 +326,7 @@ namespace libWiiSharp
string tmdFile = "tmd" + (string.IsNullOrEmpty(titleVersion) ? string.Empty : string.Format(".{0}", titleVersion));
//Download TMD
- fireDebug(" Downloading TMD...");
+ fireDebug(" - Downloading TMD...");
TMD tmd;
byte[] tmdFileWithCerts;
try
@@ -329,13 +334,13 @@ namespace libWiiSharp
tmdFileWithCerts = wcNus.DownloadData(titleUrl + tmdFile);
tmd = TMD.Load(tmdFileWithCerts);
}
- catch (Exception ex) { fireDebug(" Downloading TMD Failed..."); throw new Exception("Downloading TMD Failed:\n" + ex.Message); }
+ catch (Exception ex) { fireDebug(" + Downloading TMD Failed..."); throw new Exception("Downloading TMD Failed:\n" + ex.Message); }
//Parse TMD
- fireDebug(" Parsing TMD...");
+ fireDebug(" - Parsing TMD...");
- if (string.IsNullOrEmpty(titleVersion)) { fireDebug(" -> Title Version: {0}", tmd.TitleVersion); }
- fireDebug(" -> {0} Contents", tmd.NumOfContents);
+ if (string.IsNullOrEmpty(titleVersion)) { fireDebug(" + Title Version: {0}", tmd.TitleVersion); }
+ fireDebug(" + {0} Contents", tmd.NumOfContents);
if (!Directory.Exists(Path.Combine(outputDir, tmd.TitleVersion.ToString()))) Directory.CreateDirectory(Path.Combine(outputDir, tmd.TitleVersion.ToString()));
outputDir = Path.Combine(outputDir, tmd.TitleVersion.ToString());
@@ -347,7 +352,7 @@ namespace libWiiSharp
fireProgress(5);
//Download cetk
- fireDebug(" Downloading Ticket...");
+ fireDebug(" - Downloading Ticket...");
try
{
wcNus.DownloadFile(Path.Combine(titleUrl, "cetk"), Path.Combine(outputDir, "cetk"));
@@ -356,7 +361,7 @@ namespace libWiiSharp
{
if (!continueWithoutTicket || !storeEncrypted)
{
- fireDebug(" Downloading Ticket Failed...");
+ fireDebug(" + Downloading Ticket Failed...");
throw new Exception("Downloading Ticket Failed:\n" + ex.Message);
}
@@ -374,7 +379,7 @@ namespace libWiiSharp
if (File.Exists(Path.Combine(outputDir, "cetk")))
{
- fireDebug(" Parsing Ticket...");
+ fireDebug(" + Parsing Ticket...");
tik = Ticket.Load(Path.Combine(outputDir, "cetk"));
// DSi ticket? Must make sure to use DSi Key :D
@@ -383,7 +388,7 @@ namespace libWiiSharp
}
else
{
- fireDebug(" Ticket Unavailable...");
+ fireDebug(" + Ticket Unavailable...");
}
string[] encryptedContents = new string[tmd.NumOfContents];
@@ -391,11 +396,11 @@ namespace libWiiSharp
//Download Content
for (int i = 0; i < tmd.NumOfContents; i++)
{
- fireDebug(" Downloading Content #{0} of {1}... ({2} bytes)", i + 1, tmd.NumOfContents, tmd.Contents[i].Size);
+ fireDebug(" - Downloading Content #{0} of {1}... ({2} bytes)", i + 1, tmd.NumOfContents, tmd.Contents[i].Size);
fireProgress(((i + 1) * 60 / tmd.NumOfContents) + 10);
if (useLocalFiles && File.Exists(Path.Combine(outputDir, tmd.Contents[i].ContentID.ToString("x8"))))
- { fireDebug(" Using Local File, Skipping..."); continue; }
+ { fireDebug(" + Using Local File, Skipping..."); continue; }
try
{
@@ -404,7 +409,7 @@ namespace libWiiSharp
encryptedContents[i] = tmd.Contents[i].ContentID.ToString("x8");
}
- catch (Exception ex) { fireDebug(" Downloading Content #{0} of {1} failed...", i + 1, tmd.NumOfContents); throw new Exception("Downloading Content Failed:\n" + ex.Message); }
+ catch (Exception ex) { fireDebug(" - Downloading Content #{0} of {1} failed...", i + 1, tmd.NumOfContents); throw new Exception("Downloading Content Failed:\n" + ex.Message); }
}
//Decrypt Content
@@ -414,7 +419,7 @@ namespace libWiiSharp
for (int i = 0; i < tmd.NumOfContents; i++)
{
- fireDebug(" Decrypting Content #{0} of {1}...", i + 1, tmd.NumOfContents);
+ fireDebug(" - Decrypting Content #{0} of {1}...", i + 1, tmd.NumOfContents);
fireProgress(((i + 1) * 20 / tmd.NumOfContents) + 75);
//Decrypt Content
@@ -426,7 +431,7 @@ namespace libWiiSharp
byte[] newSha = s.ComputeHash(decryptedContent);
if (!Shared.CompareByteArrays(newSha, tmd.Contents[i].Hash))
{
- fireDebug(@"/!\ /!\ Hashes do not match /!\ /!\");
+ fireDebug(@" + Hashes do not match! (Invalid Output)");
//throw new Exception(string.Format("Content #{0}: Hashes do not match!", i));
}
@@ -440,7 +445,7 @@ namespace libWiiSharp
//Pack Wad
if (storeWad)
{
- fireDebug(" Building Certificate Chain...");
+ fireDebug(" - Building Certificate Chain...");
CertificateChain cert = CertificateChain.FromTikTmd(Path.Combine(outputDir, "cetk"), tmdFileWithCerts);
byte[][] contents = new byte[tmd.NumOfContents][];
@@ -448,7 +453,7 @@ namespace libWiiSharp
for (int i = 0; i < tmd.NumOfContents; i++)
contents[i] = File.ReadAllBytes(Path.Combine(outputDir, (tmd.Contents[i].ContentID.ToString("x8") + ".app")));
- fireDebug(" Creating WAD...");
+ fireDebug(" - Creating WAD...");
WAD wad = WAD.Create(cert, tik, tmd, contents);
wad.RemoveFooter();
wadName = wadName.Replace("[v]", this.TitleVersion.ToString());
@@ -461,26 +466,26 @@ namespace libWiiSharp
//Delete not wanted files
if (!storeEncrypted)
{
- fireDebug(" Deleting Encrypted Contents...");
+ fireDebug(" - Deleting Encrypted Contents...");
for (int i = 0; i < encryptedContents.Length; i++)
if (File.Exists(Path.Combine(outputDir, encryptedContents[i]))) File.Delete(Path.Combine(outputDir, encryptedContents[i]));
}
if (storeWad && !storeDecrypted)
{
- fireDebug(" Deleting Decrypted Contents...");
+ fireDebug(" - Deleting Decrypted Contents...");
for (int i = 0; i < encryptedContents.Length; i++)
if (File.Exists(Path.Combine(outputDir, (encryptedContents[i] + ".app")))) File.Delete(Path.Combine(outputDir, (encryptedContents[i] + ".app")));
}
if (!storeDecrypted && !storeEncrypted)
{
- fireDebug(" Deleting TMD and Ticket...");
+ fireDebug(" - Deleting TMD and Ticket...");
File.Delete(Path.Combine(outputDir, tmdFile));
File.Delete(Path.Combine(outputDir, "cetk"));
}
- fireDebug("Downloading Title {0} v{1} Finished...", titleId, (string.IsNullOrEmpty(titleVersion)) ? "[Latest]" : titleVersion);
+ fireDebug("Downloading Title {0} v{1} Finished...", titleId, tmd.TitleVersion /*(string.IsNullOrEmpty(titleVersion)) ? "[Latest]" : titleVersion*/);
fireProgress(100);
}
diff --git a/NUS Downloader/Properties/Resources.Designer.cs b/NUS Downloader/Properties/Resources.Designer.cs
index 67f8d19..5c5152d 100644
--- a/NUS Downloader/Properties/Resources.Designer.cs
+++ b/NUS Downloader/Properties/Resources.Designer.cs
@@ -319,13 +319,6 @@ namespace NUS_Downloader.Properties {
}
}
- internal static System.Drawing.Bitmap wii16x16_copy {
- get {
- object obj = ResourceManager.GetObject("wii16x16 copy", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
internal static System.Drawing.Bitmap wrench {
get {
object obj = ResourceManager.GetObject("wrench", resourceCulture);
diff --git a/NUS Downloader/Properties/Resources.resx b/NUS Downloader/Properties/Resources.resx
index dc45ffe..0e3cf8e 100644
--- a/NUS Downloader/Properties/Resources.resx
+++ b/NUS Downloader/Properties/Resources.resx
@@ -127,7 +127,7 @@
..\Resources\bullet_redorange.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
+
..\Resources\wii16x16 copy.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -193,9 +193,6 @@
..\Resources\database_save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\wii16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\bullet_green.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -232,7 +229,6 @@
..\Resources\information.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\dsi16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a