OSDN Git Service

na-get-lib,タスクセットの改修(NaGetTaskSet2)および、そのUnitTestを追加
[applistation/AppliStation.git] / na-get-lib / NaGet.SubCommands / NaGetDownloadToCache.cs
index 40254f5..ac482b6 100644 (file)
@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using NaGet.Packages.Install;
 using NaGet.Packages;
 using NaGet.Net;
+using NaGet.Tasks;
 
 namespace NaGet.SubCommands
 {
@@ -22,8 +23,8 @@ namespace NaGet.SubCommands
                                if (downloader == null) {
                                        downloader = new Downloader();
                                        downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {
-                                               if (e.Type == DownloadEventType.DOWNLOADING && e.TaskProgressPercent > 0) {
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.PING, string.Empty, GetProgressPercent(NaGetTaskSetEventType.PING, e.TaskProgressPercent));
+                                               if (e.DownloadTaskType == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {
+                                                       RaiseTaskSetEvent(TaskEventType.PING, string.Empty, GetProgressPercent(TaskEventType.PING, e.ProgressPercent));
                                                }
                                        };
                                }
@@ -67,7 +68,7 @@ namespace NaGet.SubCommands
                
                private void initializeMainTaskSetNames()
                {
-                       List<string> taskSetNames = new List<string>();
+                       taskSetNames = new List<string>();
                        
                        for (int i =0; i < Installations.Length; i++) {
                                taskSetNames.Add(string.Format("取得: {0}", Installations[i].ToString()));
@@ -76,14 +77,12 @@ namespace NaGet.SubCommands
                        taskSetNames.Add("インストーラーの検証");
                        taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.ArchiveInstalledPackageListFile));
                        taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.SystemInstalledPackageListFile));
-                       
-                       TaskSetNames = taskSetNames.ToArray();
                }
                                
                public override void Run()
                {
                        currentTaskSetIndex = 0;
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED, "インストール処理開始");
+                       RaiseTaskSetEvent(TaskEventType.STARTED, "インストール処理開始");
                        
                        {
                                // ハッシュ非適合なインストーラの表
@@ -99,7 +98,7 @@ namespace NaGet.SubCommands
                                        packageInstallerDownloaded = true;
                                        
                                        
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                                        
                                        // ハッシュの壊れているインストーラーを取得
                                        invalidInstallers = runCheckHashForInstaller();
@@ -111,23 +110,18 @@ namespace NaGet.SubCommands
                                                        invalidInstallerNames.AppendFormat(" - {0}\n", invalidInst.ToString());
                                                }
                                                
-                                               string msg = string.Format("以下の{0}個のパッケージでファイルが壊れている可能性があります。\n{1}\n強制的にインストールを続行しますか?",
+                                               string msg = string.Format("以下の{0}個のパッケージでファイルが壊れている可能性があります。\n{1}\nダウンロードし直しますか?",
                                                                           invalidInstallers.Count, invalidInstallerNames.ToString());
                                                NaGetTaskQueryResult result = NaGetTaskQueryResult.CANCEL;
                                                
                                                if (!cancelCalled) {
                                                        result = RaiseTaskSetQueryEvent(msg, NaGetTaskQueryResult.CONTINUE
-                                                                                       | NaGetTaskQueryResult.RETRY
                                                                                        | NaGetTaskQueryResult.CANCEL);
                                                }
                                                
                                                switch (result) {
                                                        case NaGetTaskQueryResult.CONTINUE:
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ハッシュの非整合を無視してインストールを継続");
-                                                               invalidInstallers.Clear(); // ハッシュ非適合パッケージを強制的に抹消
-                                                               break;
-                                                       case NaGetTaskQueryResult.RETRY:
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロード処理を再試行");
+                                                               RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロード処理を再試行");
                                                                
                                                                foreach (Installation invalidInst in invalidInstallers) {
                                                                        invalidInst.RemoveDownloadedFile();
@@ -136,7 +130,7 @@ namespace NaGet.SubCommands
                                                                break;
                                                        //case NaGetTaskQueryResult.CANCEL:
                                                        default:
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");
+                                                               RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのダウンロード処理がキャンセルされました");
                                                                done = true;
                                                                return;
                                                }
@@ -144,7 +138,7 @@ namespace NaGet.SubCommands
                                        
                                        // もしハッシュが不適合なソフトがあるならばダウンロード処理からやり直す
                                } while (invalidInstallers == null || invalidInstallers.Count > 0);
-                               RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                               RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                                currentTaskSetIndex ++;
                        }
                        
@@ -152,7 +146,7 @@ namespace NaGet.SubCommands
                        
                        done = true;
                        
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "終了", 100);
+                       RaiseTaskSetEvent(TaskEventType.COMPLETED, "終了", 100);
                }
                
                
@@ -164,59 +158,59 @@ namespace NaGet.SubCommands
                        using (DownloadScanner scanner = new DownloadScanner()) {
                                scanner.Init();
                                foreach (Installation inst in Installations) {
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                                        
                                        if (! inst.Downloaded) {
                                                try {
                                                        inst.Download(Downloader);
-                                               } catch (NaGetTaskCanceledException) {
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "インストーラーのダウンロード処理がキャンセルされました");
+                                               } catch (TaskCanceledException) {
+                                                       RaiseTaskSetEvent(TaskEventType.CANCELED, "インストーラーのダウンロード処理がキャンセルされました");
                                                        done = true;
                                                        return;
                                                } catch (System.Net.WebException e) {
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, e.Message);
+                                                       RaiseTaskSetEvent(TaskEventType.WARNING, e.Message);
                                                        if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "ネットワークに接続されていません。");
+                                                               RaiseTaskSetEvent(TaskEventType.ERROR, "ネットワークに接続されていません。");
                                                        } else {
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");
+                                                               RaiseTaskSetEvent(TaskEventType.ERROR, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");
                                                        }
                                                        done = true;
                                                        return;
                                                } catch (Exception e) {
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, e.Message);
+                                                       RaiseTaskSetEvent(TaskEventType.ERROR, e.Message);
                                                        done = true;
                                                        return;
                                                }
                                        }
                                        
                                        if (! inst.Downloaded) { // ダウンロードが完了せずに終わった=失敗=エラー
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("{0}のインストーラーファイルを正常にダウンロードできませんでした", inst.ToString()));
+                                               RaiseTaskSetEvent(TaskEventType.ERROR, string.Format("{0}のインストーラーファイルを正常にダウンロードできませんでした", inst.ToString()));
                                                done = true;
                                                return;
                                        }
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                                        currentTaskSetIndex ++;
                                        
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                                        if (! NaGet.Env.EnableScanInstallerFile) {
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ウイルススキャンを行わない設定のため、ダウンロードしたファイルはウイルススキャンされませんでした");
+                                               RaiseTaskSetEvent(TaskEventType.INFO, "ウイルススキャンを行わない設定のため、ダウンロードしたファイルはウイルススキャンされませんでした");
                                        } else if (!scanner.HasScanner) {
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");
+                                               RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");
                                        } else {
                                                try {
                                                        DownloadScannerResult result = inst.ScanInstallerFile(scanner);
                                                        
                                                        switch (result) {
                                                                case DownloadScannerResult.ScannerNotFound:
-                                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");
+                                                                       RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロードしたファイルはウイルススキャンされませんでした(ウイルススキャンソフトが検出できませんでした)");
                                                                        break;
                                                                case DownloadScannerResult.InfectedAndCleaned:
-                                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR,
+                                                                       RaiseTaskSetEvent(TaskEventType.ERROR,
                                                                                  "インストーラーファイルからウイルス感染が検出されたため、削除されました。");
                                                                        done = true;
                                                                        return;
                                                                case DownloadScannerResult.InfectedButNotCleaned:
-                                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR,
+                                                                       RaiseTaskSetEvent(TaskEventType.ERROR,
                                                                                  "インストーラーファイルからウイルス感染が検出されました。");
                                                                        done = true;
                                                                        break;
@@ -226,23 +220,23 @@ namespace NaGet.SubCommands
                                                        }
                                                        
                                                } catch (System.Runtime.InteropServices.COMException ex) {
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING,
+                                                       RaiseTaskSetEvent(TaskEventType.WARNING,
                                                                          string.Format("{0} (E{1})", ex.Message, ex.ErrorCode));
                                                } catch (System.IO.FileNotFoundException ex) {
                                                        if (ex.InnerException is System.Runtime.InteropServices.COMException) {
-                                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING,
+                                                               RaiseTaskSetEvent(TaskEventType.WARNING,
                                                                                  string.Format("{0} (E{1})", ex.InnerException.Message, ((System.Runtime.InteropServices.COMException) ex.InnerException).ErrorCode));
                                                        }
-                                                       RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, "インストーラーファイルがウイルススキャナーによって削除されました。");
+                                                       RaiseTaskSetEvent(TaskEventType.ERROR, "インストーラーファイルがウイルススキャナーによって削除されました。");
                                                        done = true;
                                                        return;
                                                }
                                        }
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                                        currentTaskSetIndex ++;
                                        
                                        if (cancelCalled) {
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");
+                                               RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");
                                                done = true;
                                                return;
                                        }
@@ -260,16 +254,16 @@ namespace NaGet.SubCommands
                        
                        int i = 0;
                        foreach (Installation inst in Installations) {
-                               float percent = (CurrentTaskSetIndex+((float)i / Installations.Length))*100f/TaskSetNames.Length;
+                               float percent = (CurrentTaskSetIndex+((float)i / Installations.Length))*100f/taskSetNames.Count;
                                
                                if (inst.GetRegisteredHashCount() > 0) {
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "検証: "+inst.ToString(), percent);
+                                       RaiseTaskSetEvent(TaskEventType.INFO, "検証: "+inst.ToString(), percent);
                                        
                                        if (inst.IsInstallablePackage() && inst.VerifyHashValues() == false) {
                                                invalidInstallers.Add(inst);
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "検証: "+inst.ToString() + " 非整合", percent);
+                                               RaiseTaskSetEvent(TaskEventType.WARNING, "検証: "+inst.ToString() + " 非整合", percent);
                                        } else {
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "検証: "+inst.ToString() + " OK", percent);
+                                               RaiseTaskSetEvent(TaskEventType.INFO, "検証: "+inst.ToString() + " OK", percent);
                                        }
                                }
                                i++;
@@ -281,17 +275,17 @@ namespace NaGet.SubCommands
                private void runLocalUpdate()
                {
                        // インストールトリストの更新
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                        pkgListMan.DetectInstalledPkgs();
                        pkgListMan.SaveInstalledPackageList();
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                        currentTaskSetIndex++;
                
                        // システムにインストールされているリストの更新
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                       RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                        pkgListMan.DetectSystemInstalledPkgs();
                        pkgListMan.SaveSystemInstalledPackageList();
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+                       RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);
                        currentTaskSetIndex++;
                }