From f139637e5730822803a5c0b6ae47964e2740e618 Mon Sep 17 00:00:00 2001 From: Jason Shackles Date: Mon, 9 Feb 2015 15:55:41 -0800 Subject: [PATCH] ADD: ability to sort games by avg. card value This is the last feature to be added from the python version that didn't make it in the C# conversion. This implementation should be significantly faster than the previous method thanks to a newly developed API that batches these requests together. --- Source/IdleMaster/IdleMaster.csproj | 3 ++ Source/IdleMaster/frmMain.cs | 40 +++++++++++++++++++++++ Source/IdleMaster/frmSettings.Designer.cs | 28 ++++++++++++---- Source/IdleMaster/frmSettings.cs | 7 ++++ Source/IdleMaster/packages.config | 1 + 5 files changed, 72 insertions(+), 7 deletions(-) diff --git a/Source/IdleMaster/IdleMaster.csproj b/Source/IdleMaster/IdleMaster.csproj index 280db177..e2c9849c 100644 --- a/Source/IdleMaster/IdleMaster.csproj +++ b/Source/IdleMaster/IdleMaster.csproj @@ -75,6 +75,9 @@ True + + ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + False ..\packages\Steamworks.NET\Steamworks.NET.dll diff --git a/Source/IdleMaster/frmMain.cs b/Source/IdleMaster/frmMain.cs index a5bd8e00..18ce6911 100644 --- a/Source/IdleMaster/frmMain.cs +++ b/Source/IdleMaster/frmMain.cs @@ -14,6 +14,7 @@ using HtmlAgilityPack; using Steamworks; +using Newtonsoft.Json; namespace IdleMaster { @@ -71,6 +72,7 @@ private void CopyResource(string resourceName, string file) public void SortBadges(String method) { + lblDrops.Text = "Sorting results based on your settings, please wait..."; Dictionary tempBadgesLeft = new Dictionary(); switch (method) { @@ -93,6 +95,44 @@ orderby pair.Value ascending { tempBadgesLeft.Add(pair.Key, pair.Value); } + break; + case "mostvalue": + // Compile the list of appids that need to be idled + string appids = ""; + foreach (KeyValuePair pair in badgesLeft) + { + appids += pair.Key + ","; + } + appids = appids.Remove(appids.Length-1); + + // Query the API to retrieve the average card values of each appid + WebRequest request = WebRequest.Create("http://api.enhancedsteam.com/market_data/average_card_prices/im.php?appids=" + appids); + WebResponse response = request.GetResponse(); + Stream dataStream = response.GetResponseStream(); + StreamReader reader = new StreamReader(dataStream, Encoding.UTF8); + string json = reader.ReadToEnd(); + reader.Close(); + response.Close(); + + // Parse the response and sort it appropriately + DataSet dataSet = JsonConvert.DeserializeObject(json); + DataTable dataTable = dataSet.Tables["avg_values"]; + DataView dataView = dataTable.DefaultView; + dataView.Sort = "avg_price desc"; + DataTable sorted = dataView.ToTable(); + + foreach (DataRow row in sorted.Rows) + { + if (row["avg_price"].ToString() != "") + { + string DropsLeft = ""; + if (badgesLeft.TryGetValue(row["appid"].ToString(), out DropsLeft)) + { + tempBadgesLeft.Add(row["appid"].ToString(), DropsLeft); + } + } + } + break; default: return; diff --git a/Source/IdleMaster/frmSettings.Designer.cs b/Source/IdleMaster/frmSettings.Designer.cs index 3636c1cb..55dbffec 100644 --- a/Source/IdleMaster/frmSettings.Designer.cs +++ b/Source/IdleMaster/frmSettings.Designer.cs @@ -32,6 +32,7 @@ private void InitializeComponent() this.groupBox1 = new System.Windows.Forms.GroupBox(); this.chkMinToTray = new System.Windows.Forms.CheckBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.radIdleMostValue = new System.Windows.Forms.RadioButton(); this.radIdleLeastDrops = new System.Windows.Forms.RadioButton(); this.radIdleMostDrops = new System.Windows.Forms.RadioButton(); this.radIdleDefault = new System.Windows.Forms.RadioButton(); @@ -63,20 +64,32 @@ private void InitializeComponent() // // groupBox2 // + this.groupBox2.Controls.Add(this.radIdleMostValue); this.groupBox2.Controls.Add(this.radIdleLeastDrops); this.groupBox2.Controls.Add(this.radIdleMostDrops); this.groupBox2.Controls.Add(this.radIdleDefault); this.groupBox2.Location = new System.Drawing.Point(13, 70); this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(322, 84); + this.groupBox2.Size = new System.Drawing.Size(322, 92); this.groupBox2.TabIndex = 1; this.groupBox2.TabStop = false; this.groupBox2.Text = "Idling Order"; // + // radIdleMostValue + // + this.radIdleMostValue.AutoSize = true; + this.radIdleMostValue.Location = new System.Drawing.Point(7, 35); + this.radIdleMostValue.Name = "radIdleMostValue"; + this.radIdleMostValue.Size = new System.Drawing.Size(233, 17); + this.radIdleMostValue.TabIndex = 3; + this.radIdleMostValue.TabStop = true; + this.radIdleMostValue.Text = "Prioritize games with the highest card values"; + this.radIdleMostValue.UseVisualStyleBackColor = true; + // // radIdleLeastDrops // this.radIdleLeastDrops.AutoSize = true; - this.radIdleLeastDrops.Location = new System.Drawing.Point(7, 56); + this.radIdleLeastDrops.Location = new System.Drawing.Point(7, 69); this.radIdleLeastDrops.Name = "radIdleLeastDrops"; this.radIdleLeastDrops.Size = new System.Drawing.Size(295, 17); this.radIdleLeastDrops.TabIndex = 2; @@ -86,7 +99,7 @@ private void InitializeComponent() // radIdleMostDrops // this.radIdleMostDrops.AutoSize = true; - this.radIdleMostDrops.Location = new System.Drawing.Point(7, 38); + this.radIdleMostDrops.Location = new System.Drawing.Point(7, 52); this.radIdleMostDrops.Name = "radIdleMostDrops"; this.radIdleMostDrops.Size = new System.Drawing.Size(299, 17); this.radIdleMostDrops.TabIndex = 1; @@ -97,7 +110,7 @@ private void InitializeComponent() // this.radIdleDefault.AutoSize = true; this.radIdleDefault.Checked = true; - this.radIdleDefault.Location = new System.Drawing.Point(7, 20); + this.radIdleDefault.Location = new System.Drawing.Point(7, 18); this.radIdleDefault.Name = "radIdleDefault"; this.radIdleDefault.Size = new System.Drawing.Size(155, 17); this.radIdleDefault.TabIndex = 0; @@ -109,7 +122,7 @@ private void InitializeComponent() // this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Location = new System.Drawing.Point(260, 160); + this.btnCancel.Location = new System.Drawing.Point(261, 167); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(75, 23); this.btnCancel.TabIndex = 2; @@ -120,7 +133,7 @@ private void InitializeComponent() // btnOK // this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.btnOK.Location = new System.Drawing.Point(179, 160); + this.btnOK.Location = new System.Drawing.Point(180, 167); this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(75, 23); this.btnOK.TabIndex = 3; @@ -134,7 +147,7 @@ private void InitializeComponent() this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.btnCancel; - this.ClientSize = new System.Drawing.Size(347, 195); + this.ClientSize = new System.Drawing.Size(348, 202); this.Controls.Add(this.btnOK); this.Controls.Add(this.btnCancel); this.Controls.Add(this.groupBox2); @@ -164,5 +177,6 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton radIdleDefault; private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.RadioButton radIdleMostValue; } } \ No newline at end of file diff --git a/Source/IdleMaster/frmSettings.cs b/Source/IdleMaster/frmSettings.cs index 3cff90f4..668d6dd5 100644 --- a/Source/IdleMaster/frmSettings.cs +++ b/Source/IdleMaster/frmSettings.cs @@ -36,6 +36,10 @@ private void btnOK_Click(object sender, EventArgs e) { Properties.Settings.Default.sort = "mostcards"; } + if (radIdleMostValue.Checked == true) + { + Properties.Settings.Default.sort = "mostvalue"; + } if (chkMinToTray.Checked == true) { @@ -60,6 +64,9 @@ private void frmSettings_Load(object sender, EventArgs e) case "mostcards": radIdleMostDrops.Checked = true; break; + case "mostvalue": + radIdleMostValue.Checked = true; + break; default: break; } diff --git a/Source/IdleMaster/packages.config b/Source/IdleMaster/packages.config index 87c301a6..228ff0d6 100644 --- a/Source/IdleMaster/packages.config +++ b/Source/IdleMaster/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file