// ペンディング <=> キュー 状態を切り替える // ペンディングからキューになったらスケジューリングに追加する // notifyItem: trueの場合は、ディレクトリ・アイテム両方の更新通知、falseの場合は、ディレクトリの更新通知のみ // 戻り値: 状態が変わった public bool UpdateQueueItem(QueueItem item, List <Task> waits) { if (item.State == QueueState.LogoPending || item.State == QueueState.Queue) { var prevState = item.State; if (item.Mode == ProcMode.DrcsCheck) { // DRCSチェックはプロファイルを必要としないので即開始 if (item.State == QueueState.LogoPending) { item.FailReason = ""; item.State = QueueState.Queue; server.ScheduleQueueItem(item); } } else if (CheckProfile(item, waits)) { var map = server.ServiceMap; if (item.ServiceId == -1) { item.FailReason = "TS情報取得中"; item.Reset(); } else if (map.ContainsKey(item.ServiceId) == false) { item.FailReason = "このTSのチャンネル設定がありません(追加し直してください)"; item.Reset(); } else if (item.Profile.DisableChapter == false && map[item.ServiceId].LogoSettings.Any(s => s.CanUse(item.TsTime)) == false) { item.FailReason = "ロゴ設定がありません"; item.Reset(); } else if (item.IsSeparateHashRequired && item.Hash == null) { item.Reset(); } else { // OK if (item.State == QueueState.LogoPending) { item.FailReason = ""; item.State = QueueState.Queue; server.ScheduleQueueItem(item); } } } return(prevState != item.State); } return(false); }
private void ResetStateItem(QueueItem item, List <Task> waits) { item.Reset(); UpdateQueueItem(item, waits); waits.Add(NotifyQueueItemUpdate(item)); }