using System; using System.Collections.Generic; using System.Collections.ObjectModel; using NaGet.Tasks; namespace NaGet.SubCommands { /// /// NaGetタスク処理のパック /// [Obsolete] public abstract class NaGetTaskSet : Task { /// /// タスク処理中の質問のハンドラ /// public event NaGetTaskQueryHandler TaskQueryRaised; /// /// 文字列で表現した作業一覧リスト /// protected IList taskSetNames; /// /// 文字列で表現した作業一覧リスト /// public virtual IList TaskSetNames { get { return new ReadOnlyCollection(taskSetNames); } } /// /// 現在実行中の作業番号 /// public abstract int CurrentTaskSetIndex { get; } /// /// 現在の進捗を戻す。 /// /// 作業の状態 /// サブタスクの進捗 /// 現在の進捗 protected virtual float GetProgressPercent(TaskEventType type, float subTaskProgress) { if (CurrentTaskSetIndex >= 0) { if (subTaskProgress >= 0) { return (CurrentTaskSetIndex * 100 + subTaskProgress) / taskSetNames.Count; } switch (type) { case TaskEventType.STARTED: return 0; case TaskEventType.COMPLETED: return 100; case TaskEventType.COMPLETED_SUBTASK: return ((CurrentTaskSetIndex+1) * 100) / taskSetNames.Count; default: return (CurrentTaskSetIndex * 100) / taskSetNames.Count; } } return -1; } #region TaskEvent便利メソッド protected virtual void RaiseTaskSetEvent(TaskEventType type, string message) { RaiseTaskSetEvent(type, message, GetProgressPercent(type, -1)); } protected virtual void ReceivedErrorData(object sender, NaGet.Utils.AnyDataEventArgs e) { if (! string.IsNullOrEmpty(e.Data)) { RaiseTaskSetEvent(TaskEventType.WARNING, e.Data); } } protected virtual void ReceivedOutputData(object sender, NaGet.Utils.AnyDataEventArgs e) { if (! string.IsNullOrEmpty(e.Data)) { RaiseTaskSetEvent(TaskEventType.INFO, e.Data); } } #endregion protected virtual NaGetTaskQueryResult RaiseTaskSetQueryEvent(string message, NaGetTaskQueryResult selection) { if (TaskQueryRaised != null) { return TaskQueryRaised(this, new NaGetTaskQueryArgs(message, selection)); } return NaGetTaskQueryResult.CANCELED_AUTOMATICALLY; } public override bool Running { get { return CurrentTaskSetIndex >= 0 && !Done; } } } }