OSDN Git Service

na-get-lib,新構造タスクのキャンセル処理を修正。
[applistation/AppliStation.git] / na-get-lib / NaGet.SubCommands / NaGetInstall.cs
index 390f1a0..f76ba07 100644 (file)
@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using NaGet.Packages.Install;\r
 using NaGet.Packages;\r
 using NaGet.Net;\r
+using NaGet.Tasks;\r
 \r
 namespace NaGet.SubCommands\r
 {\r
@@ -22,8 +23,8 @@ namespace NaGet.SubCommands
                                if (downloader == null) {\r
                                        downloader = new Downloader();\r
                                        downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {\r
-                                               if (e.Type == DownloadEventType.DOWNLOADING && e.TaskProgressPercent > 0) {\r
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.PING, string.Empty, GetProgressPercent(NaGetTaskSetEventType.PING, e.TaskProgressPercent));\r
+                                               if (e.DownloadTaskType == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {\r
+                                                       RaiseTaskSetEvent(TaskEventType.PING, string.Empty, GetProgressPercent(TaskEventType.PING, e.ProgressPercent));\r
                                                }\r
                                        };\r
                                }\r
@@ -67,7 +68,7 @@ namespace NaGet.SubCommands
                \r
                private void initializeMainTaskSetNames()\r
                {\r
-                       List<string> taskSetNames = new List<string>();\r
+                       taskSetNames = new List<string>();\r
                        \r
                        for (int i =0; i < Installations.Length; i++) {\r
                                taskSetNames.Add(string.Format("取得: {0}", Installations[i].ToString()));\r
@@ -79,14 +80,12 @@ namespace NaGet.SubCommands
                        }\r
                        taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.ArchiveInstalledPackageListFile));\r
                        taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.SystemInstalledPackageListFile));\r
-                       \r
-                       TaskSetNames = taskSetNames.ToArray();\r
                }\r
                                \r
                public override void Run()\r
                {\r
                        currentTaskSetIndex = 0;\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED, "インストール処理開始");\r
+                       RaiseTaskSetEvent(TaskEventType.STARTED, "インストール処理開始");\r
                        \r
                        {\r
                                // ハッシュ非適合なインストーラの表\r
@@ -102,7 +101,7 @@ namespace NaGet.SubCommands
                                        packageInstallerDownloaded = true;\r
                                        \r
                                        \r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                                        \r
                                        // ハッシュの壊れているインストーラーを取得\r
                                        invalidInstallers = runCheckHashForInstaller();\r
@@ -126,11 +125,11 @@ namespace NaGet.SubCommands
                                                \r
                                                switch (result) {\r
                                                        case NaGetTaskQueryResult.CONTINUE:\r
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ハッシュの非整合を無視してインストールを継続");\r
+                                                               RaiseTaskSetEvent(TaskEventType.WARNING, "ハッシュの非整合を無視してインストールを継続");\r
                                                                invalidInstallers.Clear(); // ハッシュ非適合パッケージを強制的に抹消\r
                                                                break;\r
                                                        case NaGetTaskQueryResult.RETRY:\r
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロード処理を再試行");\r
+                                                               RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロード処理を再試行");\r
                                                                \r
                                                                foreach (Installation invalidInst in invalidInstallers) {\r
                                                                        invalidInst.RemoveDownloadedFile();\r
@@ -139,7 +138,7 @@ namespace NaGet.SubCommands
                                                                break;\r
                                                        //case NaGetTaskQueryResult.CANCEL:\r
                                                        default:\r
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
+                                                               RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
                                                                done = true;\r
                                                                return;\r
                                                }\r
@@ -147,17 +146,17 @@ namespace NaGet.SubCommands
                                        \r
                                        // もしハッシュが不適合なソフトがあるならばダウンロード処理からやり直す\r
                                } while (invalidInstallers == null || invalidInstallers.Count > 0);\r
-                               RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                               RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                                currentTaskSetIndex ++;\r
                        }\r
                        \r
                        foreach (Installation inst in Installations) {\r
-                               string installTaskMsg = TaskSetNames[currentTaskSetIndex];\r
+                               string installTaskMsg = taskSetNames[currentTaskSetIndex];\r
                                if (inst.Silent && (!inst.SupportsSilentOnly)) {\r
                                        installTaskMsg += " (サイレントインストール)";\r
                                }\r
                                \r
-                               RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, installTaskMsg);\r
+                               RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, installTaskMsg);\r
                                \r
                                try {\r
                                        \r
@@ -165,20 +164,20 @@ namespace NaGet.SubCommands
                                        inst.OutputDataReceived += this.ReceivedOutputData;\r
                                        int exitCode = inst.Install();\r
                                        if (exitCode != 0) {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "インストールが正常に終えていない可能性があります。プロセスの終了コード:"+exitCode);\r
+                                               RaiseTaskSetEvent(TaskEventType.WARNING, "インストールが正常に終えていない可能性があります。プロセスの終了コード:"+exitCode);\r
                                        }\r
                                        \r
                                        pkgListMan.WriteInstallationLog(inst);\r
                                } catch (Exception e) {\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, e.Message);\r
+                                       RaiseTaskSetEvent(TaskEventType.ERROR, e.Message);\r
                                        done = true;\r
                                        return;\r
                                }\r
-                               RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, installTaskMsg);\r
+                               RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, installTaskMsg);\r
                                currentTaskSetIndex ++;\r
                                \r
                                if (cancelCalled) {\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
+                                       RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
                                        done = true;\r
                                        return;\r
                                }\r
@@ -188,7 +187,7 @@ namespace NaGet.SubCommands
                        \r
                        done = true;\r
                        \r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "終了", 100);\r
+                       RaiseTaskSetEvent(TaskEventType.COMPLETED, "終了", 100);\r
                }\r
                \r
                \r
@@ -203,64 +202,64 @@ namespace NaGet.SubCommands
                                        if (! inst.IsInstallablePackage()) {\r
                                                string msg = string.Format("{0}はインストールすることができません", inst.ToString());\r
                                                \r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, msg);\r
+                                               RaiseTaskSetEvent(TaskEventType.ERROR, msg);\r
                                                done = true;\r
                                                return;\r
                                        }\r
                                        \r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                                        \r
                                        if (! inst.Downloaded) {\r
                                                try {\r
                                                        inst.Download(Downloader);\r
-                                               } catch (NaGetTaskCanceledException) {\r
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "インストーラーのダウンロード処理がキャンセルされました");\r
+                                               } catch (TaskCanceledException) {\r
+                                                       RaiseTaskSetEvent(TaskEventType.CANCELED, "インストーラーのダウンロード処理がキャンセルされました");\r
                                                        done = true;\r
                                                        return;\r
                                                } catch (System.Net.WebException e) {\r
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, e.Message);\r
+                                                       RaiseTaskSetEvent(TaskEventType.WARNING, e.Message);\r
                                                        if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {\r
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "ネットワークに接続されていません。");\r
+                                                               RaiseTaskSetEvent(TaskEventType.ERROR, "ネットワークに接続されていません。");\r
                                                        } else {\r
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
+                                                               RaiseTaskSetEvent(TaskEventType.ERROR, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
                                                        }\r
                                                        done = true;\r
                                                        return;\r
                                                } catch (Exception e) {\r
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, e.Message);\r
+                                                       RaiseTaskSetEvent(TaskEventType.ERROR, e.Message);\r
                                                        done = true;\r
                                                        return;\r
                                                }\r
                                        }\r
                                        \r
-                                       if (! inst.Downloaded) { // ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«が完了せずに終わった=失敗=エラー\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("{0}のインストーラーファイルを正常にダウンロードできませんでした", inst.ToString()));\r
+                                       if (! inst.Downloaded) { // ã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89が完了せずに終わった=失敗=エラー\r
+                                               RaiseTaskSetEvent(TaskEventType.ERROR, string.Format("{0}のインストーラーファイルを正常にダウンロードできませんでした", inst.ToString()));\r
                                                done = true;\r
                                                return;\r
                                        }\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                                        currentTaskSetIndex ++;\r
                                        \r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                                        if (! NaGet.Env.EnableScanInstallerFile) {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ウイルススキャンを行わない設定のため、ダウンロードしたファイルはウイルススキャンされませんでした");\r
+                                               RaiseTaskSetEvent(TaskEventType.INFO, "ウイルススキャンを行わない設定のため、ダウンロードしたファイルはウイルススキャンされませんでした");\r
                                        } else if (!scanner.HasScanner) {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");\r
+                                               RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");\r
                                        } else {\r
                                                try {\r
                                                        DownloadScannerResult result = inst.ScanInstallerFile(scanner);\r
                                                        \r
                                                        switch (result) {\r
                                                                case DownloadScannerResult.ScannerNotFound:\r
-                                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");\r
+                                                                       RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");\r
                                                                        break;\r
                                                                case DownloadScannerResult.InfectedAndCleaned:\r
-                                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR,\r
+                                                                       RaiseTaskSetEvent(TaskEventType.ERROR,\r
                                                                                  "インストーラーファイルからウイルス感染が検出されたため、削除されました。");\r
                                                                        done = true;\r
                                                                        return;\r
                                                                case DownloadScannerResult.InfectedButNotCleaned:\r
-                                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR,\r
+                                                                       RaiseTaskSetEvent(TaskEventType.ERROR,\r
                                                                                  "インストーラーファイルからウイルス感染が検出されました。");\r
                                                                        done = true;\r
                                                                        break;\r
@@ -270,23 +269,23 @@ namespace NaGet.SubCommands
                                                        }\r
                                                        \r
                                                } catch (System.Runtime.InteropServices.COMException ex) {\r
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING,\r
+                                                       RaiseTaskSetEvent(TaskEventType.WARNING,\r
                                                                          string.Format("{0} (E{1})", ex.Message, ex.ErrorCode));\r
                                                } catch (System.IO.FileNotFoundException ex) {\r
                                                        if (ex.InnerException is System.Runtime.InteropServices.COMException) {\r
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING,\r
+                                                               RaiseTaskSetEvent(TaskEventType.WARNING,\r
                                                                                  string.Format("{0} (E{1})", ex.InnerException.Message, ((System.Runtime.InteropServices.COMException) ex.InnerException).ErrorCode));\r
                                                        }\r
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "インストーラーファイルがウイルススキャナーによって削除されました。");\r
+                                                       RaiseTaskSetEvent(TaskEventType.ERROR, "インストーラーファイルがウイルススキャナーによって削除されました。");\r
                                                        done = true;\r
                                                        return;\r
                                                }\r
                                        }\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                                        currentTaskSetIndex ++;\r
                                        \r
                                        if (cancelCalled) {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
+                                               RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
                                                done = true;\r
                                                return;\r
                                        }\r
@@ -304,16 +303,16 @@ namespace NaGet.SubCommands
                        \r
                        int i = 0;\r
                        foreach (Installation inst in Installations) {\r
-                               float percent = (CurrentTaskSetIndex+((float)i / Installations.Length))*100f/TaskSetNames.Length;\r
+                               float percent = (CurrentTaskSetIndex+((float)i / Installations.Length))*100f/taskSetNames.Count;\r
                                \r
                                if (inst.GetRegisteredHashCount() > 0) {\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "検証: "+inst.ToString(), percent);\r
+                                       RaiseTaskSetEvent(TaskEventType.INFO, "検証: "+inst.ToString(), percent);\r
                                        \r
                                        if (inst.IsInstallablePackage() && inst.VerifyHashValues() == false) {\r
                                                invalidInstallers.Add(inst);\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "検証: "+inst.ToString() + " 非整合", percent);\r
+                                               RaiseTaskSetEvent(TaskEventType.WARNING, "検証: "+inst.ToString() + " 非整合", percent);\r
                                        } else {\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "検証: "+inst.ToString() + " OK", percent);\r
+                                               RaiseTaskSetEvent(TaskEventType.INFO, "検証: "+inst.ToString() + " OK", percent);\r
                                        }\r
                                }\r
                                i++;\r
@@ -325,17 +324,17 @@ namespace NaGet.SubCommands
                private void runLocalUpdate()\r
                {\r
                        // インストールトリストの更新\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.DetectInstalledPkgs();\r
                        pkgListMan.SaveInstalledPackageList();\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex++;\r
                \r
                        // システムにインストールされているリストの更新\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.DetectSystemInstalledPkgs();\r
                        pkgListMan.SaveSystemInstalledPackageList();\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex++;\r
                }\r
                \r