//過去番組情報用の補正 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; } } }); } }
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()); }