OSDN Git Service

na-get-lib,ダウンロード中にタスク全体の進捗を更新するようにした。進捗計算処理の整理。
authorttp <ttp@users.sourceforge.jp>
Sun, 27 Dec 2009 08:21:06 +0000 (17:21 +0900)
committerttp <ttp@users.sourceforge.jp>
Sun, 27 Dec 2009 08:21:06 +0000 (17:21 +0900)
na-get-lib/NaGet.SubCommands/NaGetInstall.cs
na-get-lib/NaGet.SubCommands/NaGetTaskSet.cs
na-get-lib/NaGet.SubCommands/NaGetUninstall.cs
na-get-lib/NaGet.SubCommands/NaGetUpdate.cs

index 719c512..986139f 100644 (file)
@@ -21,6 +21,11 @@ namespace NaGet.SubCommands
                        get {\r
                                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
+                                               }\r
+                                       };\r
                                }\r
                                return downloader;\r
                        }\r
@@ -139,8 +144,8 @@ namespace NaGet.SubCommands
                                                                return;\r
                                                }\r
                                        }\r
+                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                                        currentTaskSetIndex ++;\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                                }\r
                        }\r
                        \r
@@ -167,9 +172,8 @@ namespace NaGet.SubCommands
                                        done = true;\r
                                        return;\r
                                }\r
-                               currentTaskSetIndex ++;\r
-                               \r
                                RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, installTaskMsg);\r
+                               currentTaskSetIndex ++;\r
                                \r
                                if (cancelCalled) {\r
                                        RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
@@ -226,15 +230,14 @@ namespace NaGet.SubCommands
                                                        return;\r
                                                }\r
                                        }\r
-                                       currentTaskSetIndex ++;\r
                                        \r
-                                       if (inst.Downloaded) { // 正常終了\r
-                                               RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
-                                       } else { // インストールが完了せずに終わった=失敗=エラー\r
+                                       if (! inst.Downloaded) { // インストールが完了せずに終わった=失敗=エラー\r
                                                RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("{0}のインストーラーファイルを正常にダウンロードできませんでした", inst.ToString()));\r
                                                done = true;\r
                                                return;\r
                                        }\r
+                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+                                       currentTaskSetIndex ++;\r
                                        \r
                                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                                        if (! NaGet.Env.EnableScanInstallerFile) {\r
@@ -277,8 +280,8 @@ namespace NaGet.SubCommands
                                                        return;\r
                                                }\r
                                        }\r
+                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                                        currentTaskSetIndex ++;\r
-                                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                                        \r
                                        if (cancelCalled) {\r
                                                RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
@@ -323,15 +326,15 @@ namespace NaGet.SubCommands
                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.DetectInstalledPkgs();\r
                        pkgListMan.SaveInstalledPackageList();\r
+                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex++;\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                \r
                        // システムにインストールされているリストの更新\r
                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.DetectSystemInstalledPkgs();\r
                        pkgListMan.SaveSystemInstalledPackageList();\r
+                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex++;\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                }\r
                \r
                public override bool Done {\r
index cebd433..df42cd3 100644 (file)
@@ -53,6 +53,10 @@ namespace NaGet.SubCommands
                /// \8dì\8bÆ\82ð\8fI\97¹\r
                /// </summary>\r
                COMPLETED_TASKSET,\r
+               /// <summary>\r
+               /// \93®\8dì\90i\92»\81E\92Ê\92m\82Ì\82Ý\r
+               /// </summary>\r
+               PING,\r
        }\r
        \r
        #endregion\r
@@ -134,10 +138,36 @@ namespace NaGet.SubCommands
                        get;\r
                }\r
                \r
+               /// <summary>\r
+               /// \8c»\8dÝ\82Ì\90i\92»\82ð\96ß\82·\81B\r
+               /// </summary>\r
+               /// <param name="type">\8dì\8bÆ\82Ì\8fó\91Ô</param>\r
+               /// <param name="subTaskProgress">\83T\83u\83^\83X\83N\82Ì\90i\92»</param>\r
+               /// <returns>\8c»\8dÝ\82Ì\90i\92»</returns>\r
+               protected virtual float GetProgressPercent(NaGetTaskSetEventType type, float subTaskProgress)\r
+               {\r
+                       if (CurrentTaskSetIndex >= 0) {\r
+                               if (subTaskProgress >= 0) {\r
+                                       return (CurrentTaskSetIndex * 100 + subTaskProgress) / TaskSetNames.Length;\r
+                               }\r
+                               switch (type) {\r
+                                       case NaGetTaskSetEventType.STARTED:\r
+                                               return 0;\r
+                                       case NaGetTaskSetEventType.COMPLETED:\r
+                                               return 100;\r
+                                       case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
+                                               return ((CurrentTaskSetIndex+1) * 100) / TaskSetNames.Length;\r
+                                       default:\r
+                                               return (CurrentTaskSetIndex * 100) / TaskSetNames.Length;\r
+                               }\r
+                       }\r
+                       \r
+                       return -1;\r
+               }\r
+               \r
                protected virtual void RaiseTaskSetEvent(NaGetTaskSetEventType type, string message)\r
                {\r
-                       float percent = (CurrentTaskSetIndex >= 0)? CurrentTaskSetIndex * 100 / TaskSetNames.Length : -1;\r
-                       RaiseTaskSetEvent(type, message, percent);\r
+                       RaiseTaskSetEvent(type, message, GetProgressPercent(type, -1));\r
                }\r
                \r
                protected virtual void RaiseTaskSetEvent(NaGetTaskSetEventType type, string message, float percent)\r
index 868aefc..2d1e4da 100644 (file)
@@ -100,15 +100,15 @@ namespace NaGet.SubCommands
                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.DetectInstalledPkgs();\r
                        pkgListMan.SaveInstalledPackageList();\r
+                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex++;\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                \r
                        // \83V\83X\83e\83\80\82É\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82é\83\8a\83X\83g\82Ì\8dX\90V\r
                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.DetectSystemInstalledPkgs();\r
                        pkgListMan.SaveSystemInstalledPackageList();\r
+                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex++;\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                }\r
                \r
                public override bool Done {\r
index 2e1c0a9..9279446 100644 (file)
@@ -25,6 +25,11 @@ namespace NaGet.SubCommands
                        get {\r
                                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
+                                               }\r
+                                       };\r
                                }\r
                                return downloader;\r
                        }\r
@@ -147,8 +152,8 @@ namespace NaGet.SubCommands
                                        RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, string.Format("レポジトリ'{0}'のURLが不正なため、ソフトリストは取得できませんでした。", repo.Name ?? repo.Url.Href));\r
                                }\r
                                \r
+                               RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                                currentTaskSetIndex ++;\r
-                               RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                        }\r
                        \r
                        // TODO 暫定的にかならず常にrepositoryリストに書き込む。\r
@@ -159,8 +164,8 @@ namespace NaGet.SubCommands
                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.availablePkgList = avaiablePackageList; // Mediatorのリストを更新\r
                        pkgListMan.SaveAvailablePackageList();\r
+                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex ++;\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                }\r
                \r
                private void runLocalUpdate()\r
@@ -169,15 +174,15 @@ namespace NaGet.SubCommands
                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.DetectInstalledPkgs();\r
                        pkgListMan.SaveInstalledPackageList();\r
+                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex++;\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                \r
                        // システムにインストールされているリストの更新\r
                        RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        pkgListMan.DetectSystemInstalledPkgs();\r
                        pkgListMan.SaveSystemInstalledPackageList();\r
+                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
                        currentTaskSetIndex++;\r
-                       RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
                }\r
                \r
                public override bool Cancel()\r