using System.Threading;\r
using NaGet.SubCommands;\r
using NaGet.Net;\r
+using NaGet.Tasks;\r
\r
namespace AppliStation.Util\r
{\r
return;\r
}\r
\r
- switch (a.Type) {\r
+ switch (a.DownloadTaskType) {\r
case DownloadEventType.INITED:\r
case DownloadEventType.CONNECTED:\r
progressSubLabel.Text = a.TaskMessage;\r
\r
#region NaGetTaskSet関連\r
\r
- private void onTaskSetRaised(object sender, NaGetTaskSetEventArgs e)\r
+ private void onTaskEventRaised(object sender, TaskEventArgs e)\r
{\r
NaGetTaskSet taskSet = (NaGetTaskSet) sender;\r
NativeMethods.ProgressBarState progressState = NativeMethods.ProgressBarState.Normal;\r
cancelButton.Enabled = taskSet.Running && taskSet.Cancelable;\r
\r
switch (e.Type) {\r
- case NaGetTaskSetEventType.COMPLETED:\r
+ case TaskEventType.COMPLETED:\r
logBox.AppendText("完了." + System.Environment.NewLine);\r
if (taskSet.Done) {\r
okButton.Enabled = true;\r
autoCloseTimer.Start();\r
}\r
break;\r
- case NaGetTaskSetEventType.STARTED_TASKSET:\r
+ case TaskEventType.STARTED_SUBTASK:\r
progressLabel.Text = taskSet.TaskSetNames[taskSet.CurrentTaskSetIndex];\r
logBox.AppendText(" " + e.TaskMessage + System.Environment.NewLine);\r
break;\r
- case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
+ case TaskEventType.COMPLETED_SUBTASK:\r
if (progressBarSub.Visible) progressBarSub.Hide();\r
if (progressSubLabel.Visible) progressSubLabel.Hide();\r
\r
logBox.AppendText(string.Format(" ... 完了. [{0}%]", (int) e.ProgressPercent));\r
logBox.AppendText(System.Environment.NewLine);\r
break;\r
- case NaGetTaskSetEventType.INFO:\r
+ case TaskEventType.INFO:\r
logBox.AppendText(" " + e.TaskMessage + System.Environment.NewLine);\r
break;\r
- case NaGetTaskSetEventType.ERROR:\r
+ case TaskEventType.ERROR:\r
logBox.SelectionColor = System.Drawing.Color.Red;\r
logBox.AppendText(" [エラー] " + e.TaskMessage + System.Environment.NewLine);\r
logBox.SelectionColor = logBox.ForeColor;\r
okButton.Enabled = true;\r
cancelButton.Enabled = false;\r
break;\r
- case NaGetTaskSetEventType.CANCELED:\r
+ case TaskEventType.CANCELED:\r
logBox.SelectionColor = System.Drawing.Color.Red;\r
logBox.AppendText(e.TaskMessage + System.Environment.NewLine);\r
logBox.SelectionColor = logBox.ForeColor;\r
okButton.Enabled = true;\r
cancelButton.Enabled = false;\r
break;\r
- case NaGetTaskSetEventType.WARNING:\r
+ case TaskEventType.WARNING:\r
logBox.SelectionColor = System.Drawing.Color.Red;\r
logBox.AppendText(" [エラー] " + e.TaskMessage + System.Environment.NewLine);\r
logBox.SelectionColor = logBox.ForeColor;\r
{\r
this.taskSet = taskSet;\r
\r
- taskSet.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) {\r
+ taskSet.TaskEventRaised += delegate(object sender, TaskEventArgs e) {\r
if (InvokeRequired) {\r
- Invoke(new EventHandler<NaGetTaskSetEventArgs>(onTaskSetRaised), taskSet, e);\r
+ Invoke(new EventHandler<TaskEventArgs>(onTaskEventRaised), taskSet, e);\r
} else {\r
- onTaskSetRaised(taskSet, e);\r
+ onTaskEventRaised(taskSet, e);\r
}\r
};\r
\r
using NaGet.Packages;\r
using NaGet.Packages.Install;\r
using NaGet.SubCommands;\r
+using NaGet.Tasks;\r
\r
namespace AllGet\r
{\r
}\r
}\r
\r
- switch (a.Type) {\r
+ switch (a.DownloadTaskType) {\r
case DownloadEventType.INITED:\r
line = "starting...";\r
break;\r
public void update(bool downloadPackageListFlag)\r
{\r
NaGet.SubCommands.NaGetUpdate tasks = new NaGet.SubCommands.NaGetUpdate(pkgListMan, downloadPackageListFlag);\r
- tasks.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) { \r
+ tasks.TaskEventRaised += delegate(object sender, TaskEventArgs e) { \r
switch (e.Type) {\r
// case NaGetTaskSetEventType.COMPLETED_TASKSET\r
// break;\r
- case NaGetTaskSetEventType.COMPLETED:\r
+ case TaskEventType.COMPLETED:\r
Console.WriteLine("Done.");\r
break;\r
- case NaGetTaskSetEventType.STARTED_TASKSET:\r
+ case TaskEventType.STARTED_SUBTASK:\r
Console.Write(" " + e.TaskMessage);\r
break;\r
- case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
+ case TaskEventType.COMPLETED_SUBTASK:\r
Console.WriteLine(" ... Done. [{0}%]", (int) e.ProgressPercent);\r
break;\r
- case NaGetTaskSetEventType.INFO:\r
+ case TaskEventType.INFO:\r
Console.WriteLine(" " + e.TaskMessage);\r
break;\r
- case NaGetTaskSetEventType.ERROR:\r
- case NaGetTaskSetEventType.WARNING:\r
+ case TaskEventType.ERROR:\r
+ case TaskEventType.WARNING:\r
Console.WriteLine(" [Error]" + e.TaskMessage);\r
break;\r
}\r
return NaGetTaskQueryResult.CANCELED_AUTOMATICALLY;\r
}\r
};\r
- tasks.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) { \r
+ tasks.TaskEventRaised += delegate(object sender, TaskEventArgs e) { \r
switch (e.Type) {\r
// case NaGetTaskSetEventType.COMPLETED_TASKSET\r
// break;\r
- case NaGetTaskSetEventType.COMPLETED:\r
+ case TaskEventType.COMPLETED:\r
Console.WriteLine("Done.");\r
break;\r
- case NaGetTaskSetEventType.STARTED_TASKSET:\r
+ case TaskEventType.STARTED_SUBTASK:\r
Console.Write(" " + e.TaskMessage);\r
break;\r
- case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
+ case TaskEventType.COMPLETED_SUBTASK:\r
Console.WriteLine(" ... Done. [{0}%]", (int) e.ProgressPercent);\r
break;\r
- case NaGetTaskSetEventType.INFO:\r
+ case TaskEventType.INFO:\r
Console.WriteLine(" " + e.TaskMessage);\r
break;\r
- case NaGetTaskSetEventType.ERROR:\r
- case NaGetTaskSetEventType.WARNING:\r
+ case TaskEventType.ERROR:\r
+ case TaskEventType.WARNING:\r
Console.WriteLine(" [Error] " + e.TaskMessage);\r
break;\r
}\r
return NaGetTaskQueryResult.CANCELED_AUTOMATICALLY;\r
}\r
};\r
- tasks.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) { \r
+ tasks.TaskEventRaised += delegate(object sender, TaskEventArgs e) { \r
switch (e.Type) {\r
// case NaGetTaskSetEventType.COMPLETED_TASKSET\r
// break;\r
- case NaGetTaskSetEventType.COMPLETED:\r
+ case TaskEventType.COMPLETED:\r
Console.WriteLine("Done.");\r
break;\r
- case NaGetTaskSetEventType.STARTED_TASKSET:\r
+ case TaskEventType.STARTED_SUBTASK:\r
Console.Write(" " + e.TaskMessage);\r
break;\r
- case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
+ case TaskEventType.COMPLETED_SUBTASK:\r
Console.WriteLine(" ... Done. [{0}%]", (int) e.ProgressPercent);\r
break;\r
- case NaGetTaskSetEventType.INFO:\r
+ case TaskEventType.INFO:\r
Console.WriteLine(" " + e.TaskMessage);\r
break;\r
- case NaGetTaskSetEventType.ERROR:\r
- case NaGetTaskSetEventType.WARNING:\r
+ case TaskEventType.ERROR:\r
+ case TaskEventType.WARNING:\r
Console.WriteLine(" [Error] " + e.TaskMessage);\r
break;\r
}\r
// }\r
\r
NaGet.SubCommands.NaGetUninstall tasks = new NaGet.SubCommands.NaGetUninstall(pkgListMan, uninstallations);\r
- tasks.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) { \r
+ tasks.TaskEventRaised += delegate(object sender, TaskEventArgs e) { \r
switch (e.Type) {\r
// case NaGetTaskSetEventType.COMPLETED_TASKSET\r
// break;\r
- case NaGetTaskSetEventType.COMPLETED:\r
+ case TaskEventType.COMPLETED:\r
Console.WriteLine("Done.");\r
break;\r
- case NaGetTaskSetEventType.STARTED_TASKSET:\r
+ case TaskEventType.STARTED_SUBTASK:\r
Console.Write(" " + e.TaskMessage);\r
break;\r
- case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
+ case TaskEventType.COMPLETED_SUBTASK:\r
Console.WriteLine(" ... Done. [{0}%]", (int) e.ProgressPercent);\r
break;\r
- case NaGetTaskSetEventType.INFO:\r
+ case TaskEventType.INFO:\r
Console.WriteLine(" " + e.TaskMessage);\r
break;\r
- case NaGetTaskSetEventType.ERROR:\r
- case NaGetTaskSetEventType.WARNING:\r
+ case TaskEventType.ERROR:\r
+ case TaskEventType.WARNING:\r
Console.WriteLine(" [Error] " + e.TaskMessage);\r
break;\r
}\r
/// <summary>\r
/// イベントの種類\r
/// </summary>\r
- public DownloadEventType Type;\r
+ public DownloadEventType DownloadTaskType;\r
\r
/// <summary>\r
/// ダウンロード済みのバイト数\r
/// <param name="max">ダウンロードする総バイト数</param>\r
public DownloadEventArgs(DownloadEventType type, string msg, long pos, long max)\r
{\r
- Type = type;\r
+ DownloadTaskType = type;\r
DownloadSize = pos;\r
MaxSize = max;\r
\r
if (DownloadEventRaised != null) {\r
DownloadEventArgs e = new DownloadEventArgs(type, string.Empty, pos, max);\r
\r
- switch (e.Type) {\r
+ switch (e.DownloadTaskType) {\r
case DownloadEventType.CONNECTED:\r
e.TaskMessage = "接続しました";\r
break;\r
--- /dev/null
+using System;
+using System.Diagnostics;
+using System.Net;
+using System.Net.Mime;
+using System.IO;
+using System.Threading;
+using NaGet.Tasks;
+
+namespace NaGet.SubCommands.SubTask
+{
+ /// <summary>
+ /// ダウンロードタスク
+ /// </summary>
+ public class DownloadSubTask : NaGetSubTask
+ {
+ /// <summary>
+ /// アクセスURL
+ /// </summary>
+ protected Uri url;
+
+ /// <summary>
+ /// プロキシ
+ /// </summary>
+ protected IWebProxy proxy;
+
+ /// <summary>
+ /// 保存先
+ /// </summary>
+ protected string filepath;
+
+ /// <summary>
+ /// リクエストオブジェクト
+ /// </summary>
+ protected WebRequest request;
+
+ /// <summary>
+ /// レスポンスオブジェクト。応答がくるまではnullである。
+ /// </summary>
+ protected WebResponse response;
+
+ /// <summary>
+ /// ダウンロード時にHTTPヘッダなどから取得した本来のファイル名
+ /// </summary>
+ private string downloadedFileName = null;
+
+ /// <summary>
+ /// ダウンロード要求時のキャッシュレベル。デフォルトではキャッシュ無視
+ /// </summary>
+ public System.Net.Cache.RequestCacheLevel CacheLevel = System.Net.Cache.RequestCacheLevel.NoCacheNoStore;
+
+ /// <summary>
+ /// キャンセルが呼ばれたか否か。
+ /// </summary>
+ private bool cancelCalled = false;
+
+ /// <summary>
+ /// コンストラクタ
+ /// </summary>
+ /// <param name="url">ダウンロード先URL</param>
+ /// <param name="filepath">保存ファイルパス</param>
+ /// <param name="proxy">プロキシ</param>
+ public DownloadSubTask(Uri url, string filepath, IWebProxy proxy)
+ {
+ this.url = url;
+ this.filepath = filepath;
+ this.proxy = proxy;
+
+ this.request = null;
+ this.response = null;
+ this.downloadedFileName = null;
+ }
+
+ /// <summary>
+ /// コンストラクタ
+ /// </summary>
+ /// <param name="url">ダウンロード先URL</param>
+ /// <param name="filepath">保存ファイルパス</param>
+ public DownloadSubTask(Uri url, string filepath)
+ : this(url, filepath, NaGet.Env.WebProxy)
+ {
+ }
+
+ /// <summary>
+ /// ダウンロード時にHTTPヘッダなどから取得した本来のファイル名
+ /// </summary>
+ public string DownloadedFileName {
+ get { return downloadedFileName; }
+ }
+
+ public override void Run()
+ {
+ NotifyStarted();
+ RaiseTaskSetEvent(TaskEventType.STARTED, string.Format("ダウンロード:{0}", this.url), 0);
+
+ try {
+ runBuildRequest();
+ runHandleCancelTrigger();
+
+ RaiseTaskSetEvent(TaskEventType.PING, string.Format("接続中...{0}", this.url.Host), -1);
+
+ runAcquireResponse();
+ runHandleCancelTrigger();
+
+ runPrepareFile();
+ runDownloadToFile();
+ runHandleCancelTrigger();
+
+ runPostprocess();
+ } finally {
+ runReleaseResponse();
+
+ if (cancelCalled) {
+ NotifyCancelled();
+ } else {
+ NotifyCompleted();
+ RaiseTaskSetEvent(TaskEventType.COMPLETED, "ダウンロード終了", 100);
+ }
+ }
+ }
+
+ /// <summary>
+ /// キャンセルされたかを確認して、キャンセル要求があるのならば TaskCanceledException を投げる
+ /// </summary>
+ private void runHandleCancelTrigger()
+ {
+ if (this.cancelCalled) {
+ throw new TaskCanceledException(string.Empty);
+ }
+ }
+
+ /// <summary>
+ /// requestの構築。
+ /// </summary>
+ private void runBuildRequest()
+ {
+ request = WebRequest.Create(url);
+ request.Proxy = this.proxy;
+ request.CachePolicy = new System.Net.Cache.RequestCachePolicy(CacheLevel);
+
+ HttpWebRequest httpRequest = request as HttpWebRequest;
+ if (httpRequest != null) {
+ httpRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
+ // TODO User-Agent
+ httpRequest.UserAgent = "AppliStation/1.3";
+ }
+ }
+
+ /// <summary>
+ /// Responseを得る
+ /// </summary>
+ private void runAcquireResponse()
+ {
+ try {
+ response = request.GetResponse();
+ } catch (WebException e) {
+ if (cancelCalled) { // キャンセル時
+ throw new TaskCanceledException(string.Empty, e);
+ } else {
+ throw new WebException(e.Message, e);
+ }
+ }
+ }
+
+ /// <summary>
+ /// ダウンロード先ファイル名の決定
+ /// </summary>
+ private void runPrepareFile()
+ {
+ try {
+ downloadedFileName = getFileNameFromWebResponse(response);
+ } catch (Exception) {
+ }
+
+ if (File.Exists(filepath)) { // ファイルが存在するとき削除
+ File.Delete(filepath);
+ }
+ }
+
+ private void runDownloadToFile()
+ {
+ Stopwatch stopwatch = new Stopwatch();
+
+ using (Stream stream = response.GetResponseStream() )
+ using (FileStream fs = new FileStream(filepath,
+ FileMode.Create,
+ FileAccess.Write) ) {
+ try {
+ File.SetAttributes(filepath, FileAttributes.Hidden);
+ long contentLength = response.ContentLength;
+
+ stopwatch.Start();
+ RaiseDownloadProgressTaskSetEvent(0, contentLength, 0);
+
+ Timer timer = new Timer(new TimerCallback(
+ delegate(object obj) {
+ try {
+ RaiseDownloadProgressTaskSetEvent(fs.Position, contentLength, stopwatch.ElapsedMilliseconds);
+ } catch (ObjectDisposedException) {
+ }
+ }), null, 0, 1000);
+
+ try {
+ byte[] data = new byte[4096];
+ int size = 0;
+ while ((size = stream.Read(data,0,data.Length)) > 0) {
+ fs.Write(data, 0, size);
+
+ if (cancelCalled) {
+ throw new TaskCanceledException(string.Empty);
+ }
+ }
+ } finally {
+ timer.Dispose();
+ }
+
+ File.SetAttributes(filepath, FileAttributes.Normal);
+ } catch (IOException ex) {
+ if (cancelCalled) {
+ throw new TaskCanceledException(string.Empty);
+ } else {
+ throw new IOException(ex.Message, ex);
+ }
+ } finally {
+ if (stopwatch != null) {
+ stopwatch.Stop();
+ stopwatch = null;
+ }
+ }
+ }
+ }
+
+ private void runPostprocess()
+ {
+ // 更新日を補完
+ if (File.Exists(filepath)) {
+ HttpWebResponse httpResponse = response as HttpWebResponse;
+ FtpWebResponse ftpResponse = response as FtpWebResponse;
+
+ if (httpResponse != null) {
+ File.SetLastWriteTime(filepath, httpResponse.LastModified);
+ } else if (ftpResponse != null) {
+ File.SetLastWriteTime(filepath, ftpResponse.LastModified);
+ }
+ }
+ }
+
+ /// <summary>
+ /// responseの開放
+ /// </summary>
+ private void runReleaseResponse()
+ {
+ if (response != null) {
+ response.Close();
+ }
+ }
+
+ /// <summary>
+ /// ダウンロード処理をキャンセルする
+ /// </summary>
+ /// <returns>キャンセルに成功したときtrue</returns>
+ public override bool Cancel()
+ {
+ if (! this.cancelCalled && ! this.Done) {
+ this.cancelCalled = true;
+ if (request != null) {
+ try {
+ request.Abort();
+ } catch (WebException) {
+ }
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// Webレスポンスからダウンロードしたファイルの名前を取得
+ /// </summary>
+ /// <remarks>Content-Dispositionヘッダから取得あるいはURLの末尾から推定します</remarks>
+ /// <param name="response">レスポンスオブジェクト</param>
+ /// <returns>取得したファイル名</returns>
+ private static string getFileNameFromWebResponse(WebResponse response)
+ {
+ HttpWebResponse httpresp = response as HttpWebResponse;
+ if (httpresp != null) {
+ string contentDisposition = httpresp.Headers["Content-Disposition"];
+
+ if (! string.IsNullOrEmpty(contentDisposition)) {
+ try {
+ ContentDisposition parser = new ContentDisposition(contentDisposition);
+ if (! string.IsNullOrEmpty(parser.FileName)) {
+ return parser.FileName;
+ }
+ } catch (FormatException) {
+ }
+ }
+ }
+
+ return NaGet.Utils.Url2filename(response.ResponseUri);
+ }
+
+ /// <summary>
+ /// ダウンロード進捗メッセージを生成
+ /// </summary>
+ /// <param name="downloadsize">現在ダウンロード済みのサイズ</param>
+ /// <param name="filesize">全体のファイルサイズ。不明なときはゼロを指定。</param>
+ /// <param name="elapsedms">ダウンロード開始からの時間をms単位で。</param>
+ protected virtual void RaiseDownloadProgressTaskSetEvent(long downloadsize, long filesize, long elapsedms)
+ {
+ float percent = -1;
+ TimeSpan eta = new TimeSpan(0);
+ long byteps = 0;
+
+ // 進捗率の算出
+ if (filesize > 0) {
+ percent = 100 * ((float) downloadsize) / ((float) filesize);
+ }
+
+ // スループット・残り時間の算出
+ if (elapsedms > 0) {
+ byteps = 1000 * downloadsize / elapsedms;
+ if (filesize > 0) {
+ eta = TimeSpan.FromSeconds((filesize - downloadsize) / byteps);
+ }
+ }
+
+ System.Text.StringBuilder msgbuilder = new System.Text.StringBuilder();
+ msgbuilder.AppendFormat("{0} bytes", downloadsize);
+ if (percent > 0) {
+ msgbuilder.AppendFormat(" ({0}%)", percent);
+ }
+ if (eta.Ticks > 0) {
+ msgbuilder.AppendFormat(" ETA {0}", eta);
+ }
+ if (byteps > 0) {
+ msgbuilder.AppendFormat(" ({0}/s)", NaGet.Utils.FormatSize(byteps));
+ }
+
+ RaiseTaskSetEvent(TaskEventType.PING, msgbuilder.ToString(), percent);
+ }
+ }
+}
--- /dev/null
+using System;
+using NaGet.Tasks;
+using NaGet.Packages;
+
+namespace NaGet.SubCommands.SubTask
+{
+ public class LocalUpdateSubTask : NaGetSubTask
+ {
+ PackageListsManager pkgListMan;
+
+ public LocalUpdateSubTask(PackageListsManager pkgListMan)
+ {
+ this.pkgListMan = pkgListMan;
+ }
+
+ public override void Run()
+ {
+ NotifyStarted();
+ RaiseTaskSetEvent(TaskEventType.STARTED, "リスト更新", 0);
+
+ pkgListMan.DetectInstalledPkgs();
+ pkgListMan.SaveInstalledPackageList();
+ RaiseTaskSetEvent(TaskEventType.INFO, string.Format("{0} を更新しました", NaGet.Env.ArchiveInstalledPackageListFile), 50);
+
+ pkgListMan.DetectSystemInstalledPkgs();
+ pkgListMan.SaveSystemInstalledPackageList();
+ RaiseTaskSetEvent(TaskEventType.INFO, string.Format("{0} を更新しました", NaGet.Env.SystemInstalledPackageListFile), 100);
+
+ RaiseTaskSetEvent(TaskEventType.COMPLETED, "リスト更新", 100);
+ NotifyCompleted();
+ }
+ }
+}
--- /dev/null
+using System;
+using NaGet.Tasks;
+
+namespace NaGet.SubCommands.SubTask
+{
+ /// <summary>
+ /// サブタスクの基底クラス。
+ /// </summary>
+ public abstract class NaGetSubTask : Task
+ {
+ private bool isRunning = false;
+
+ private bool isDone = false;
+
+ private bool isCancelled = false;
+
+ public NaGetSubTask()
+ {
+ }
+
+ public override bool Running {
+ get {
+ return isRunning;
+ }
+ }
+
+ public override bool Done {
+ get {
+ return isDone;
+ }
+ }
+
+ public virtual bool Cancelled {
+ get {
+ return isCancelled;
+ }
+ }
+
+ protected virtual void NotifyStarted() {
+ isRunning = true;
+ isDone = false;
+ }
+
+ protected virtual void NotifyCancelled() {
+ isRunning = false;
+ isCancelled = true;
+ }
+
+ protected virtual void NotifyCompleted() {
+ isRunning = false;
+ isDone = true;
+ }
+ }
+}
if (downloader == null) {
downloader = new Downloader();
downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {
- if (e.Type == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {
- RaiseTaskSetEvent(NaGetTaskSetEventType.PING, string.Empty, GetProgressPercent(NaGetTaskSetEventType.PING, e.ProgressPercent));
+ if (e.DownloadTaskType == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {
+ RaiseTaskSetEvent(TaskEventType.PING, string.Empty, GetProgressPercent(TaskEventType.PING, e.ProgressPercent));
}
};
}
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()));
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, "インストール処理開始");
{
// ハッシュ非適合なインストーラの表
packageInstallerDownloaded = true;
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);
// ハッシュの壊れているインストーラーを取得
invalidInstallers = runCheckHashForInstaller();
switch (result) {
case NaGetTaskQueryResult.CONTINUE:
- RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, "ダウンロード処理を再試行");
+ RaiseTaskSetEvent(TaskEventType.INFO, "ダウンロード処理を再試行");
foreach (Installation invalidInst in invalidInstallers) {
invalidInst.RemoveDownloadedFile();
break;
//case NaGetTaskQueryResult.CANCEL:
default:
- RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのダウンロード処理がキャンセルされました");
+ RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのダウンロード処理がキャンセルされました");
done = true;
return;
}
// もしハッシュが不適合なソフトがあるならばダウンロード処理からやり直す
} while (invalidInstallers == null || invalidInstallers.Count > 0);
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);
+ RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);
currentTaskSetIndex ++;
}
done = true;
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "終了", 100);
+ RaiseTaskSetEvent(TaskEventType.COMPLETED, "終了", 100);
}
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 (TaskCanceledException) {
- RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "インストーラーのダウンロード処理がキャンセルされました");
+ 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;
}
} 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;
}
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++;
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++;
}
if (downloader == null) {\r
downloader = new Downloader();\r
downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {\r
- if (e.Type == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.PING, string.Empty, GetProgressPercent(NaGetTaskSetEventType.PING, e.ProgressPercent));\r
+ if (e.DownloadTaskType == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {\r
+ RaiseTaskSetEvent(TaskEventType.PING, string.Empty, GetProgressPercent(TaskEventType.PING, e.ProgressPercent));\r
}\r
};\r
}\r
\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
}\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
packageInstallerDownloaded = true;\r
\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
\r
// ハッシュの壊れているインストーラーを取得\r
invalidInstallers = runCheckHashForInstaller();\r
\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
break;\r
//case NaGetTaskQueryResult.CANCEL:\r
default:\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
+ RaiseTaskSetEvent(TaskEventType.CANCELED, "パッケージのインストール処理がキャンセルされました");\r
done = true;\r
return;\r
}\r
\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
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
\r
done = true;\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "終了", 100);\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED, "終了", 100);\r
}\r
\r
\r
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 (TaskCanceledException) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.CANCELED, "インストーラーのダウンロード処理がキャンセルされました");\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) { // ダウンロードが完了せずに終わった=失敗=エラー\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("{0}のインストーラーファイルを正常にダウンロードできませんでした", inst.ToString()));\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
}\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
\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
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
using System;\r
+using System.Collections.Generic;\r
+using System.Collections.ObjectModel;\r
using NaGet.Tasks;\r
\r
namespace NaGet.SubCommands\r
-{\r
- #region EventHandler<NaGetTaskSetEventArgs>\8aÖ\98A\r
- \r
- public class NaGetTaskSetEventArgs : TaskEventArgs\r
- {\r
- public NaGetTaskSetEventType Type;\r
- \r
- public NaGetTaskSetEventArgs(NaGetTaskSetEventType type, string message, float processPercent)\r
- {\r
- this.Type = type;\r
- this.TaskMessage = message;\r
- this.ProgressPercent = processPercent;\r
- }\r
- }\r
- \r
- /// <summary>\r
- /// \83^\83X\83N\82Ì\8eí\97Þ\r
- /// </summary>\r
- public enum NaGetTaskSetEventType\r
- {\r
- /// <summary>\r
- /// \8aJ\8en\r
- /// </summary>\r
- STARTED,\r
- /// <summary>\r
- /// \8a®\97¹\82µ\82½(\82·\82×\82Ä\82ð\8a®\97¹)\r
- /// </summary>\r
- COMPLETED,\r
- /// <summary>\r
- /// \8dì\8bÆ\82ª\83L\83\83\83\93\83Z\83\8b\82³\82ê\82½\r
- /// </summary>\r
- CANCELED,\r
- /// <summary>\r
- /// \83G\83\89\81[\82ð\94\90¶\82µ(\92\86\92f\82µ\82½)\r
- /// </summary>\r
- ERROR,\r
- /// <summary>\r
- /// \83G\83\89\81[\82ª\94\90¶\82µ\82½\82ª\8cp\91±\r
- /// </summary>\r
- WARNING,\r
- /// <summary>\r
- /// \82»\82Ì\82Ù\82©\82Ì\8fî\95ñ\r
- /// </summary>\r
- INFO,\r
- /// <summary>\r
- /// \8dì\8bÆ\82ð\8aJ\8en\r
- /// </summary>\r
- STARTED_TASKSET,\r
- /// <summary>\r
- /// \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
- \r
+{ \r
#region NaGetTaskQueryHandler\8aÖ\98A\r
\r
public delegate NaGetTaskQueryResult NaGetTaskQueryHandler(object sender, NaGetTaskQueryArgs e);\r
public abstract class NaGetTaskSet : Task\r
{\r
/// <summary>\r
- /// \83^\83X\83N\8f\88\97\9d\82Ì\83C\83x\83\93\83g\83n\83\93\83h\83\89\r
+ /// \83^\83X\83N\8f\88\97\9d\92\86\82Ì\8e¿\96â\82Ì\83n\83\93\83h\83\89\r
/// </summary>\r
- public event EventHandler<NaGetTaskSetEventArgs> TaskSetRaised;\r
+ public event NaGetTaskQueryHandler TaskQueryRaised;\r
\r
/// <summary>\r
- /// \83^\83X\83N\8f\88\97\9d\92\86\82Ì\8e¿\96â\82Ì\83n\83\93\83h\83\89\r
+ /// \95¶\8e\9a\97ñ\82Å\95\\8c»\82µ\82½\8dì\8bÆ\88ê\97\97\83\8a\83X\83g\r
/// </summary>\r
- public event NaGetTaskQueryHandler TaskQueryRaised;\r
+ protected IList<string> taskSetNames;\r
\r
/// <summary>\r
/// \95¶\8e\9a\97ñ\82Å\95\\8c»\82µ\82½\8dì\8bÆ\88ê\97\97\83\8a\83X\83g\r
/// </summary>\r
- public string[] TaskSetNames;\r
+ public virtual IList<string> TaskSetNames {\r
+ get {\r
+ return new ReadOnlyCollection<string>(taskSetNames);\r
+ }\r
+ }\r
\r
/// <summary>\r
/// \8c»\8dÝ\8eÀ\8ds\92\86\82Ì\8dì\8bÆ\94Ô\8d\86\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
+ protected virtual float GetProgressPercent(TaskEventType type, float subTaskProgress)\r
{\r
if (CurrentTaskSetIndex >= 0) {\r
if (subTaskProgress >= 0) {\r
- return (CurrentTaskSetIndex * 100 + subTaskProgress) / TaskSetNames.Length;\r
+ return (CurrentTaskSetIndex * 100 + subTaskProgress) / taskSetNames.Count;\r
}\r
switch (type) {\r
- case NaGetTaskSetEventType.STARTED:\r
+ case TaskEventType.STARTED:\r
return 0;\r
- case NaGetTaskSetEventType.COMPLETED:\r
+ case TaskEventType.COMPLETED:\r
return 100;\r
- case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
- return ((CurrentTaskSetIndex+1) * 100) / TaskSetNames.Length;\r
+ case TaskEventType.COMPLETED_SUBTASK:\r
+ return ((CurrentTaskSetIndex+1) * 100) / taskSetNames.Count;\r
default:\r
- return (CurrentTaskSetIndex * 100) / TaskSetNames.Length;\r
+ return (CurrentTaskSetIndex * 100) / taskSetNames.Count;\r
}\r
}\r
\r
return -1;\r
}\r
\r
- protected virtual void RaiseTaskSetEvent(NaGetTaskSetEventType type, string message)\r
- {\r
- RaiseTaskSetEvent(type, message, GetProgressPercent(type, -1));\r
- }\r
+ #region TaskEvent\95Ö\97\98\83\81\83\\83b\83h\r
\r
- protected virtual void RaiseTaskSetEvent(NaGetTaskSetEventType type, string message, float percent)\r
+ protected virtual void RaiseTaskSetEvent(TaskEventType type, string message)\r
{\r
- if (TaskSetRaised != null) {\r
- TaskSetRaised(this, new NaGetTaskSetEventArgs(type, message, percent));\r
- }\r
+ RaiseTaskSetEvent(type, message, GetProgressPercent(type, -1));\r
}\r
\r
protected virtual void ReceivedErrorData(object sender, NaGet.Utils.AnyDataEventArgs<string> e)\r
{\r
if (! string.IsNullOrEmpty(e.Data)) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, e.Data);\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, e.Data);\r
}\r
}\r
\r
protected virtual void ReceivedOutputData(object sender, NaGet.Utils.AnyDataEventArgs<string> e)\r
{\r
if (! string.IsNullOrEmpty(e.Data)) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.INFO, e.Data);\r
+ RaiseTaskSetEvent(TaskEventType.INFO, e.Data);\r
}\r
}\r
\r
+ #endregion\r
+ \r
protected virtual NaGetTaskQueryResult RaiseTaskSetQueryEvent(string message, NaGetTaskQueryResult selection)\r
{\r
if (TaskQueryRaised != null) {\r
using NaGet.Packages.Install;\r
using NaGet.Packages;\r
using NaGet.Net;\r
+using NaGet.Tasks;\r
\r
namespace NaGet.SubCommands\r
{\r
\r
private void initializeMainTaskSetNames()\r
{\r
- System.Collections.Generic.List<string> taskSetNames = new System.Collections.Generic.List<string>();\r
+ taskSetNames = new System.Collections.Generic.List<string>();\r
\r
for (int i =0; i < Uninstallations.Length; i++) {\r
taskSetNames.Add(string.Format("\83A\83\93\83C\83\93\83X\83g\81[\83\8b: {0}", Uninstallations[i].ToString()));\r
}\r
taskSetNames.Add(string.Format("\83\8a\83X\83g\8dX\90V: {0}", NaGet.Env.ArchiveInstalledPackageListFile));\r
taskSetNames.Add(string.Format("\83\8a\83X\83g\8dX\90V: {0}", NaGet.Env.SystemInstalledPackageListFile));\r
- \r
- TaskSetNames = taskSetNames.ToArray();\r
}\r
\r
public override void Run()\r
{\r
currentTaskSetIndex ++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED, "\83A\83\93\83C\83\93\83X\83g\81[\83\8b\8f\88\97\9d\8aJ\8en");\r
+ RaiseTaskSetEvent(TaskEventType.STARTED, "\83A\83\93\83C\83\93\83X\83g\81[\83\8b\8f\88\97\9d\8aJ\8en");\r
\r
foreach (Uninstallation uninst in Uninstallations) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, uninst.ToString());\r
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, uninst.ToString());\r
\r
if (uninst.Installed) {\r
try {\r
uninst.ErrorDataReceived += this.ReceivedErrorData;\r
int exitCode = uninst.Uninstall();\r
if (exitCode != 0) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "\83A\83\93\83C\83\93\83X\83g\81[\83\8b\82ª\90³\8fí\82É\8fI\82¦\82Ä\82¢\82È\82¢\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\83v\83\8d\83Z\83X\82Ì\8fI\97¹\83R\81[\83h:"+exitCode);\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, "\83A\83\93\83C\83\93\83X\83g\81[\83\8b\82ª\90³\8fí\82É\8fI\82¦\82Ä\82¢\82È\82¢\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\83v\83\8d\83Z\83X\82Ì\8fI\97¹\83R\81[\83h:"+exitCode);\r
}\r
} catch (Exception e) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, e.Message);\r
+ RaiseTaskSetEvent(TaskEventType.ERROR, e.Message);\r
done = true;\r
return;\r
}\r
} else {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, string.Format("{0}\82Í\8aù\82É\83A\83\93\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82é\82©\81A\83\\83t\83g\82Ì\91¶\8dÝ\82ð\8am\94F\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½", uninst));\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, string.Format("{0}\82Í\8aù\82É\83A\83\93\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82é\82©\81A\83\\83t\83g\82Ì\91¶\8dÝ\82ð\8am\94F\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½", uninst));\r
}\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, uninst.ToString());\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, uninst.ToString());\r
}\r
\r
runLocalUpdate();\r
\r
done = true;\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "\8fI\97¹", 100);\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED, "\8fI\97¹", 100);\r
}\r
\r
private void runLocalUpdate()\r
{\r
// \83C\83\93\83X\83g\81[\83\8b\83g\83\8a\83X\83g\82Ì\8dX\90V\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
// \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
+ 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
if (downloader == null) {\r
downloader = new Downloader();\r
downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {\r
- if (e.Type == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.PING, string.Empty, GetProgressPercent(NaGetTaskSetEventType.PING, e.ProgressPercent));\r
+ if (e.DownloadTaskType == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {\r
+ RaiseTaskSetEvent(TaskEventType.PING, string.Empty, GetProgressPercent(TaskEventType.PING, e.ProgressPercent));\r
}\r
};\r
}\r
pkgListMan = pkgMan;\r
downloadPackageLists = downloadPackageListsFlag;\r
\r
- System.Collections.Generic.List<string> taskSetNames = new System.Collections.Generic.List<string>();\r
+ taskSetNames = new System.Collections.Generic.List<string>();\r
if (downloadPackageLists) {\r
// repos.list.xmlがあるとき、そこからよみとる。\r
repoList = NaGet.Utils.GetDeserializedObject<RepositoriesList>(NaGet.Env.RepositoriesListFile);\r
}\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 ++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED, "リスト更新処理開始");\r
+ RaiseTaskSetEvent(TaskEventType.STARTED, "リスト更新処理開始");\r
\r
try {\r
// リストのダウンロード\r
try {\r
runDownloadPackageLists();\r
} catch (TaskCanceledException) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "リストのダウンロード処理がキャンセルされました");\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, "リストのダウンロード処理がキャンセルされました");\r
pkgListMan.LoadPackageLists();\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.WARNING, "ネットワークに接続されていません。");\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, "ネットワークに接続されていません。");\r
} else {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
}\r
pkgListMan.LoadPackageLists();\r
} finally {\r
done = true;\r
}\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "終了", 100);\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED, "終了", 100);\r
}\r
\r
private void runDownloadPackageLists()\r
{\r
PackageList<Package> avaiablePackageList = new PackageList<Package>();\r
foreach(RepositoryInfo repo in repoList.EnabledRepositories) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
\r
if (Uri.IsWellFormedUriString(repo.Url.Href, UriKind.Absolute)) {\r
string tmpfileName = Path.GetTempFileName();\r
\r
avaiablePackageList.AddPackages(pkgList);\r
} catch (InvalidOperationException) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("レポジトリ'{0}'はAppliStation Native XML softlist形式ではありません。", repo.Name ?? repo.Url.Href));\r
+ RaiseTaskSetEvent(TaskEventType.ERROR, string.Format("レポジトリ'{0}'はAppliStation Native XML softlist形式ではありません。", repo.Name ?? repo.Url.Href));\r
}\r
} else {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, string.Format("レポジトリ'{0}'の設定が不正です。", repo.Name ?? repo.Url.Href));\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, string.Format("レポジトリ'{0}'の設定が不正です。", repo.Name ?? repo.Url.Href));\r
}\r
} finally {\r
if (File.Exists(tmpfileName)) {\r
}\r
}\r
} else {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, string.Format("レポジトリ'{0}'のURLが不正なため、ソフトリストは取得できませんでした。", repo.Name ?? repo.Url.Href));\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, string.Format("レポジトリ'{0}'のURLが不正なため、ソフトリストは取得できませんでした。", repo.Name ?? repo.Url.Href));\r
}\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
currentTaskSetIndex ++;\r
}\r
\r
NaGet.Utils.PutSerializeObject(NaGet.Env.RepositoriesListFile, repoList);\r
}\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
pkgListMan.availablePkgList = avaiablePackageList; // Mediatorのリストを更新\r
pkgListMan.SaveAvailablePackageList();\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
currentTaskSetIndex ++;\r
}\r
\r
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
-using System;\r
+using System;\r
\r
namespace NaGet.Tasks\r
{\r
/// <summary>\r
- /// NaGet\82Ì\83R\83}\83\93\83h\83^\83X\83N\82Ì\92\8a\8fÛ\83N\83\89\83X\r
+ /// NaGetのコマンドタスクの抽象クラス\r
/// </summary>\r
public abstract class Task\r
{\r
/// <summary>\r
- /// \8eÀ\8ds\82·\82é\r
+ /// タスク処理のイベントハンドラ\r
+ /// </summary>\r
+ public virtual event EventHandler<TaskEventArgs> TaskEventRaised;\r
+ \r
+ /// <summary>\r
+ /// 実行する\r
/// </summary>\r
public abstract void Run();\r
\r
/// <summary>\r
- /// \8eÀ\8ds\8fó\91Ô\82©\94Û\82©\82ð\93¾\82é\r
+ /// 実行状態か否かを得る\r
/// </summary>\r
public abstract bool Running {\r
get;\r
}\r
\r
/// <summary>\r
- /// \8fI\97¹\82µ\82Ä\82¢\82é\82©\94Û\82©\81B\r
+ /// 終了しているか否か。\r
/// </summary>\r
public abstract bool Done {\r
get;\r
}\r
\r
/// <summary>\r
- /// \83L\83\83\83\93\83Z\83\8b\89Â\94\\82©\94Û\82©\82ð\95Ô\82·\r
+ /// キャンセル可能か否かを返す\r
/// </summary>\r
public virtual bool Cancelable {\r
get { return false; }\r
}\r
\r
/// <summary>\r
- /// \92\86\92f\82³\82¹\82é\r
+ /// 中断させる\r
/// </summary>\r
- /// <returns>\90¬\8c÷\82µ\82½\82©\82¢\82È\82©</returns>\r
+ /// <returns>成功したかいなか</returns>\r
public virtual bool Cancel()\r
{\r
return false;\r
}\r
+ \r
+ #region TaskEvent便利メソッド\r
+ \r
+ protected virtual void RaiseTaskSetEvent(TaskEventType type, string message, float percent)\r
+ {\r
+ if (TaskEventRaised != null) {\r
+ TaskEventRaised(this, new TaskEventArgs(type, message, percent));\r
+ }\r
+ }\r
+ \r
+ #endregion\r
}\r
}\r
namespace NaGet.Tasks
{
+ /// <summary>
+ /// タスクイベントの種類
+ /// </summary>
+ public enum TaskEventType
+ {
+ /// <summary>
+ /// 動作進捗・通知のみ
+ /// </summary>
+ PING,
+ /// <summary>
+ /// 開始
+ /// </summary>
+ STARTED,
+ /// <summary>
+ /// 完了した(すべてを完了)
+ /// </summary>
+ COMPLETED,
+ /// <summary>
+ /// 作業がキャンセルされた
+ /// </summary>
+ CANCELED,
+ /// <summary>
+ /// エラーを発生し(中断した)
+ /// </summary>
+ ERROR,
+ /// <summary>
+ /// エラーが発生したが継続
+ /// </summary>
+ WARNING,
+ /// <summary>
+ /// そのほかの情報
+ /// </summary>
+ INFO,
+ /// <summary>
+ /// 子作業を開始
+ /// </summary>
+ STARTED_SUBTASK,
+ /// <summary>
+ /// 子作業を終了
+ /// </summary>
+ COMPLETED_SUBTASK,
+ }
+
+ /// <summary>
+ /// タスクのイベント
+ /// </summary>
public class TaskEventArgs : EventArgs
{
/// <summary>
+ /// タスクイベントの種類
+ /// </summary>
+ public TaskEventType Type = TaskEventType.PING;
+
+ /// <summary>
/// タスクの進捗状況の百分率表示
/// </summary>
public float ProgressPercent = -1;
/// タスクの現況のメッセージ
/// </summary>
public string TaskMessage;
+
+ /// <summary>
+ /// コンストラクタ
+ /// </summary>
+ public TaskEventArgs()
+ : this(TaskEventType.PING, null, -1)
+ {
+ }
+
+ /// <summary>
+ /// コンストラクタ
+ /// </summary>
+ public TaskEventArgs(TaskEventType type, string message, float percent)
+ {
+ this.Type = type;
+ this.TaskMessage = message;
+ this.ProgressPercent = percent;
+ }
}
}
<Compile Include="NaGet.Packages\PackageListsManager.cs" />\r
<Compile Include="NaGet.Packages\RepositoriesList.cs" />\r
<Compile Include="NaGet.Packages\VersionComparetor.cs" />\r
+ <Compile Include="NaGet.SubCommands.SubTask\DownloadSubTask.cs" />\r
+ <Compile Include="NaGet.SubCommands.SubTask\NaGetSubTask.cs" />\r
<Compile Include="NaGet.SubCommands\NaGetDownloadToCache.cs" />\r
<Compile Include="NaGet.SubCommands\NaGetInstall.cs" />\r
<Compile Include="NaGet.SubCommands\NaGetTaskSet.cs" />\r
<Compile Include="NaGet.Packages.Install\UninstallInformation.cs" />\r
<Compile Include="NaGet.Packages.Install\InstalledPackage.cs" />\r
<Compile Include="NaGet.SubCommands\NaGetUpdate.cs" />\r
+ <None Include="NaGet.SubCommands.SubTask\LocalUpdateSubTask.cs" />\r
</ItemGroup>\r
<ItemGroup>\r
<Folder Include="NaGet.InteropServices" />\r
<Folder Include="NaGet.SubCommands" />\r
+ <Folder Include="NaGet.SubCommands.SubTask" />\r
</ItemGroup>\r
</Project>
\ No newline at end of file