示例#1
0
        // ペンディング <=> キュー 状態を切り替える
        // ペンディングからキューになったらスケジューリングに追加する
        // 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);
        }
示例#2
0
 private void ResetStateItem(QueueItem item, List <Task> waits)
 {
     item.Reset();
     UpdateQueueItem(item, waits);
     waits.Add(NotifyQueueItemUpdate(item));
 }