示例#1
0
        //過去番組情報用の補正
        public void CorrectServiceInfo(IEnumerable <EpgServiceEventInfo> list, bool reUseData = false)
        {
            //データ未ロード時は再利用不可
            reUseData &= IsEpgLoaded;

            foreach (EpgServiceEventInfo info in list)
            {
                //あれば取得EPGデータのEpgServiceInfo、EventInfoに差し替え
                EpgServiceAllEventInfo refInfo;
                if (reUseData && ServiceEventList.TryGetValue(info.serviceInfo.Key, out refInfo))
                {
                    info.serviceInfo = refInfo.serviceInfo;
                }
                else
                {
                    EpgServiceInfo chSet5Item = ChSet5.ChItem(info.serviceInfo.Key, true, true);
                    if (info.serviceInfo.TSID != chSet5Item.TSID)
                    {
                        info.serviceInfo.service_name = "[廃]" + info.serviceInfo.service_name;
                    }
                    else if (string.IsNullOrWhiteSpace(chSet5Item.service_name) == false)
                    {
                        //過去チャンネルでない場合はChSet5の名称を優先する
                        info.serviceInfo.service_name = chSet5Item.service_name;
                        info.serviceInfo.network_name = chSet5Item.network_name;
                    }
                }

                new List <List <EpgEventInfo> > {
                    info.eventList, info is EpgServiceAllEventInfo ? (info as EpgServiceAllEventInfo).eventArcList : new List <EpgEventInfo>()
                }
                .ForEach(eventList =>
                {
                    for (int i = 0; i < eventList.Count; i++)
                    {
                        EpgEventInfo refData;
                        if (reUseData && EventUIDList.TryGetValue(eventList[i].CurrentPgUID(), out refData))
                        {
                            eventList[i] = refData;
                        }
                        else
                        {
                            eventList[i].ServiceInfo = info.serviceInfo;
                        }
                    }
                });
            }
        }
示例#2
0
        public EpgAutoAddDataAppend GetEpgAutoAddDataAppend(EpgAutoAddData master)
        {
            if (master == null)
            {
                return(null);
            }

            //データ更新は必要になったときにまとめて行う
            var dict = epgAutoAddAppendList ?? new Dictionary <uint, EpgAutoAddDataAppend>();

            if (updateEpgAutoAddAppend == true)
            {
                List <EpgAutoAddData> srcList = EpgAutoAddList.Values.Where(data => dict.ContainsKey(data.dataID) == false).ToList();
                if (srcList.Count != 0 && Settings.Instance.NoEpgAutoAddAppend == false)
                {
                    List <EpgSearchKeyInfo> keyList = srcList.RecSearchKeyList().DeepClone();
                    keyList.ForEach(key => key.keyDisabledFlag = 0); //無効解除

                    var list_list = new List <List <EpgEventInfo> >();
                    try { CommonManager.CreateSrvCtrl().SendSearchPgByKey(keyList, ref list_list); }
                    catch { }

                    //通常あり得ないが、コマンド成功にもかかわらず何か問題があった場合は飛ばす
                    if (srcList.Count == list_list.Count)
                    {
                        int i = 0;
                        foreach (EpgAutoAddData item in srcList)
                        {
                            //イベントの再利用。再利用不可の場合でもサービス名の修正は現在番組なので不用。
                            if (IsEpgLoaded)
                            {
                                for (int j = 0; j < list_list[i].Count; j++)
                                {
                                    EpgEventInfo refData;
                                    if (EventUIDList.TryGetValue(list_list[i][j].CurrentPgUID(), out refData))
                                    {
                                        list_list[i][j] = refData;
                                    }
                                }
                            }
                            dict[item.dataID] = new EpgAutoAddDataAppend(list_list[i++]);
                        }
                    }
                }

                epgAutoAddAppendList              = dict;
                updateEpgAutoAddAppend            = false;
                updateEpgAutoAddAppendReserveInfo = true;//現時刻でのSearchList再作成も含む
            }

            //予約情報との突き合わせが古い場合
            if (updateEpgAutoAddAppendReserveInfo == true)
            {
                foreach (EpgAutoAddDataAppend item in dict.Values)
                {
                    item.UpdateCounts();
                }
                updateEpgAutoAddAppendReserveInfo = false;
            }

            //SendSearchPgByKeyに失敗した場合などは引っかかる。
            EpgAutoAddDataAppend retv;

            dict.TryGetValue(master.dataID, out retv);
            return(retv ?? new EpgAutoAddDataAppend());
        }