OSDN Git Service

バージョンアップの通知を出す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 9 Dec 2017 12:39:21 +0000 (21:39 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Mon, 11 Dec 2017 11:57:30 +0000 (20:57 +0900)
KancolleSniffer/ConfigDialog.cs
KancolleSniffer/MainForm.Designer.cs
KancolleSniffer/MainForm.cs

index f3af537..069fcb1 100644 (file)
@@ -17,8 +17,6 @@ using System.Collections.Generic;
 using System.Diagnostics;\r
 using System.Drawing;\r
 using System.IO;\r
-using System.Linq;\r
-using System.Net;\r
 using System.Windows.Forms;\r
 \r
 namespace KancolleSniffer\r
@@ -58,9 +56,11 @@ namespace KancolleSniffer
         {\r
             if (_prevPosition.X != int.MinValue)\r
                 Location = _prevPosition;\r
-            var version = string.Join(".", Application.ProductVersion.Split('.').Take(2));\r
-            labelVersion.Text = "バージョン" + version;\r
-            SetLatestVersion(version);\r
+            _main.CheckVersionUp((current, latest) =>\r
+            {\r
+                labelVersion.Text = "バージョン" + current;\r
+                labelLatest.Text = current == latest ? "最新です" : "最新は" + latest + "です";\r
+            });\r
             labelCopyright.Text = FileVersionInfo.GetVersionInfo(Application.ExecutablePath).LegalCopyright;\r
 \r
             checkBoxTopMost.Checked = _config.TopMost;\r
@@ -127,32 +127,6 @@ namespace KancolleSniffer
             textBoxDebugLog.Text = _config.DebugLogFile;\r
         }\r
 \r
-        private async void SetLatestVersion(string version)\r
-        {\r
-            try\r
-            {\r
-                var req = WebRequest.Create(Home + "version");\r
-                var response = await req.GetResponseAsync();\r
-                var stream = response.GetResponseStream();\r
-                if (stream == null)\r
-                    return;\r
-                using (var reader = new StreamReader(stream))\r
-                {\r
-                    var str = await reader.ReadLineAsync();\r
-                    try\r
-                    {\r
-                        Invoke(new Action(() => { labelLatest.Text = version == str ? "最新です" : "最新は" + str + "です"; }));\r
-                    }\r
-                    catch (InvalidOperationException)\r
-                    {\r
-                    }\r
-                }\r
-            }\r
-            catch (WebException)\r
-            {\r
-            }\r
-        }\r
-\r
         private void buttonOk_Click(object sender, EventArgs e)\r
         {\r
             if (!ValidatePorts(out var listen, out var outbound, out _))\r
index 8eea49f..ab0829d 100644 (file)
@@ -58,7 +58,7 @@ namespace KancolleSniffer
             this.label1 = new System.Windows.Forms.Label();\r
             this.panelShipInfo = new System.Windows.Forms.Panel();\r
             this.labelPresetAkashiTimer = new System.Windows.Forms.Label();\r
-            this.labelGuide = new System.Windows.Forms.Label();\r
+            this.linkLabelGuide = new System.Windows.Forms.LinkLabel();\r
             this.panelCombinedFleet = new System.Windows.Forms.Panel();\r
             this.panel7Ships = new System.Windows.Forms.Panel();\r
             this.panelBattleInfo = new System.Windows.Forms.Panel();\r
@@ -303,7 +303,7 @@ namespace KancolleSniffer
             // \r
             this.panelShipInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
             this.panelShipInfo.Controls.Add(this.labelPresetAkashiTimer);\r
-            this.panelShipInfo.Controls.Add(this.labelGuide);\r
+            this.panelShipInfo.Controls.Add(this.linkLabelGuide);\r
             this.panelShipInfo.Controls.Add(this.panelCombinedFleet);\r
             this.panelShipInfo.Controls.Add(this.panel7Ships);\r
             this.panelShipInfo.Controls.Add(this.panelBattleInfo);\r
@@ -325,15 +325,16 @@ namespace KancolleSniffer
             this.labelPresetAkashiTimer.Size = new System.Drawing.Size(32, 12);\r
             this.labelPresetAkashiTimer.TabIndex = 55;\r
             // \r
-            // labelGuide\r
+            // linkLabelGuide\r
             // \r
-            this.labelGuide.AutoSize = true;\r
-            this.labelGuide.Font = new System.Drawing.Font("MS UI Gothic", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));\r
-            this.labelGuide.Location = new System.Drawing.Point(31, 51);\r
-            this.labelGuide.Name = "labelGuide";\r
-            this.labelGuide.Size = new System.Drawing.Size(158, 13);\r
-            this.labelGuide.TabIndex = 44;\r
-            this.labelGuide.Text = "右クリックでメニューが出ます。";\r
+            this.linkLabelGuide.AutoSize = true;\r
+            this.linkLabelGuide.Font = new System.Drawing.Font("MS UI Gothic", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));\r
+            this.linkLabelGuide.LinkArea = new System.Windows.Forms.LinkArea(0, 0);\r
+            this.linkLabelGuide.Location = new System.Drawing.Point(31, 51);\r
+            this.linkLabelGuide.Name = "linkLabelGuide";\r
+            this.linkLabelGuide.Size = new System.Drawing.Size(158, 13);\r
+            this.linkLabelGuide.TabIndex = 44;\r
+            this.linkLabelGuide.Text = "右クリックでメニューが出ます。";\r
             // \r
             // panelCombinedFleet\r
             // \r
@@ -1484,7 +1485,6 @@ namespace KancolleSniffer
         private System.Windows.Forms.Label labelQuestColor2;\r
         private System.Windows.Forms.ToolStripMenuItem CaptureToolStripMenuItem;\r
         private System.Windows.Forms.Label labelAkashiRepairTimer;\r
-        private System.Windows.Forms.Label labelGuide;\r
         private System.Windows.Forms.Panel panelCombinedFleet;\r
         private System.Windows.Forms.Label labelAkashiRepair;\r
         private System.Windows.Forms.Label labelPresetAkashiTimer;\r
@@ -1492,6 +1492,7 @@ namespace KancolleSniffer
         private System.Windows.Forms.ToolTip toolTipLoS;\r
         private RepairListForMain panelRepairList;\r
         private System.Windows.Forms.Panel panel7Ships;\r
+        private System.Windows.Forms.LinkLabel linkLabelGuide;\r
     }\r
 }\r
 \r
index 9313ec5..1262e2f 100644 (file)
@@ -19,6 +19,7 @@ using System.Drawing;
 using System.Globalization;\r
 using System.IO;\r
 using System.Linq;\r
+using System.Net;\r
 using System.Runtime.InteropServices;\r
 using System.Text;\r
 using System.Text.RegularExpressions;\r
@@ -82,7 +83,6 @@ namespace KancolleSniffer
             catch (Exception ex)\r
             {\r
                 throw new ConfigFileException("設定ファイルが壊れています。", ex);\r
-\r
             }\r
             _proxyManager = new ProxyManager(_config, this);\r
             _errorLog = new ErrorLog(_sniffer);\r
@@ -185,7 +185,7 @@ namespace KancolleSniffer
             if (update == Sniffer.Update.Start)\r
             {\r
                 labelLogin.Visible = false;\r
-                labelGuide.Visible = false;\r
+                linkLabelGuide.Visible = false;\r
                 _started = true;\r
                 return;\r
             }\r
@@ -220,6 +220,37 @@ namespace KancolleSniffer
             ApplyProxySetting();\r
             if (_config.KancolleDb.On)\r
                 _kancolleDb.Start(_config.KancolleDb.Token);\r
+            CheckVersionUp((current, latest) =>\r
+            {\r
+                if (latest == current)\r
+                    return;\r
+                linkLabelGuide.Text = $"バージョン{latest}があります。";\r
+                linkLabelGuide.LinkArea = new LinkArea(0, linkLabelGuide.Text.Length);\r
+                linkLabelGuide.Click += (obj, ev) =>\r
+                {\r
+                    Process.Start("https://ja.osdn.net/rel/kancollesniffer/" + latest);\r
+                };\r
+            });\r
+        }\r
+\r
+        public async void CheckVersionUp(Action<string,string> action)\r
+        {\r
+            var current = string.Join(".", Application.ProductVersion.Split('.').Take(2));\r
+            try\r
+            {\r
+                var latest = (await new WebClient().DownloadStringTaskAsync("http://kancollesniffer.osdn.jp/version"))\r
+                    .TrimEnd();\r
+                try\r
+                {\r
+                    action(current, latest);\r
+                }\r
+                catch (InvalidOperationException)\r
+                {\r
+                }\r
+            }\r
+            catch (WebException)\r
+            {\r
+            }\r
         }\r
 \r
         private void MainForm_FormClosing(object sender, FormClosingEventArgs e)\r
@@ -278,7 +309,7 @@ namespace KancolleSniffer
             if (_config.Zoom == 100)\r
                 return;\r
             var prev = CurrentAutoScaleDimensions;\r
-            foreach (var control in new Control[] {this, _listForm, labelLogin, labelGuide})\r
+            foreach (var control in new Control[] {this, _listForm, labelLogin, linkLabelGuide})\r
                 control.Font = new Font(control.Font.FontFamily, control.Font.Size * _config.Zoom / 100);\r
             ShipLabel.LatinFont = new Font("Tahoma", 8f * _config.Zoom / 100);\r
             var cur = CurrentAutoScaleDimensions;\r