public void SetRecInfo(RecFileInfo info) { recInfo = info; EpgEventInfo eventInfo = null; if (info.ProgramInfo.Length == 0 && info.EventID != 0xFFFF) { // 過去番組情報を探してみる var arcList = new List <EpgServiceEventInfo>(); if (CommonManager.CreateSrvCtrl().SendEnumPgArc(new List <long> { 0, (long)CommonManager.Create64Key(info.OriginalNetworkID, info.TransportStreamID, info.ServiceID), info.StartTime.ToFileTimeUtc(), info.StartTime.ToFileTimeUtc() + 1 }, ref arcList) == ErrCode.CMD_SUCCESS && arcList.Count > 0 && arcList[0].eventList.Count > 0) { eventInfo = arcList[0].eventList[0]; } else { // 番組情報を探してみる eventInfo = CommonManager.Instance.DB.GetPgInfo(info.OriginalNetworkID, info.TransportStreamID, info.ServiceID, info.EventID, false); if (eventInfo == null || eventInfo.StartTimeFlag == 0 || eventInfo.start_time != info.StartTime) { eventInfo = null; } } } if (eventInfo != null) { richTextBox_pgInfo.Document = new FlowDocument(CommonManager.ConvertDisplayText( CommonManager.ConvertProgramText(eventInfo, EventInfoTextMode.BasicInfo) + CommonManager.ConvertProgramText(eventInfo, EventInfoTextMode.BasicText), CommonManager.ConvertProgramText(eventInfo, EventInfoTextMode.ExtendedText), CommonManager.ConvertProgramText(eventInfo, EventInfoTextMode.PropertyInfo))); } else { // 詳細情報を分離してみる string basicInfo = info.ProgramInfo; string extText = ""; string propertyInfo = ""; // 2個目の空行までマッチ Match m = Regex.Match(basicInfo, @"^[\s\S]*?\r?\n\r?\n[\s\S]*?\r?\n\r?\n"); if (m.Success) { propertyInfo = basicInfo.Substring(m.Length); basicInfo = basicInfo.Substring(0, m.Length); // "詳細情報"のとき空行2行までマッチ m = Regex.Match(propertyInfo, @"^詳細情報\r?\n[\s\S]*?\r?\n\r?\n\r?\n"); if (m.Success) { extText = propertyInfo.Substring(0, m.Length); propertyInfo = propertyInfo.Substring(m.Length); } } richTextBox_pgInfo.Document = new FlowDocument(CommonManager.ConvertDisplayText(basicInfo, extText, propertyInfo)); } textBox_errLog.Text = info.ErrInfo; textBox_recFilePath.Text = info.RecFilePath; button_rename.IsEnabled = false; }
private void ReloadProgramViewItem(bool enablePrev, bool enableNext) { try { if (listBox_service.ItemsSource != null) { foreach (ServiceItem info in listBox_service.ItemsSource) { lastChkSID[info.ID] = info.IsSelected; } } listBox_service.ItemsSource = null; var serviceList = new List <ServiceItem>(); //特殊なサービス指定の展開と重複除去 var viewIDList = new List <ulong>(); foreach (ulong id in setViewInfo.ViewServiceList) { IEnumerable <EpgServiceAllEventInfo> sel = id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceDttv ? serviceEventList.Values.Where(info => ChSet5.IsDttv(info.serviceInfo.ONID)) : id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceBS ? serviceEventList.Values.Where(info => ChSet5.IsBS(info.serviceInfo.ONID)) : id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceCS ? serviceEventList.Values.Where(info => ChSet5.IsCS(info.serviceInfo.ONID)) : id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceCS3 ? serviceEventList.Values.Where(info => ChSet5.IsCS3(info.serviceInfo.ONID)) : id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceOther ? serviceEventList.Values.Where(info => ChSet5.IsOther(info.serviceInfo.ONID)) : null; if (sel == null) { if (viewIDList.Contains(id) == false) { viewIDList.Add(id); } continue; } foreach (EpgServiceInfo info in DBManager.SelectServiceEventList(sel).Select(allInfo => allInfo.serviceInfo)) { if (viewIDList.Contains(CommonManager.Create64Key(info.ONID, info.TSID, info.SID)) == false) { viewIDList.Add(CommonManager.Create64Key(info.ONID, info.TSID, info.SID)); } } } for (int i = 0; i < viewIDList.Count;) { //TSIDが同じでSIDが逆順のときは正順にする int skip = i + 1; while (viewIDList.Count > skip && viewIDList[skip] >> 16 == viewIDList[skip - 1] >> 16 && (viewIDList[skip] & 0xFFFF) < (viewIDList[skip - 1] & 0xFFFF)) { skip++; } for (int j = skip - 1; j >= i; j--) { ulong id = viewIDList[j]; if (serviceEventList.ContainsKey(id)) { var item = new ServiceItem(serviceEventList[id].serviceInfo); item.IsSelected = lastChkSID.ContainsKey(id) == false || lastChkSID[id]; serviceList.Add(item); } } i = skip; } listBox_service.ItemsSource = serviceList; button_prev.IsEnabled = enablePrev; button_next.IsEnabled = enableNext; UpdateEventList(); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
/// <summary> /// EPGデータの更新があれば再読み込みする /// </summary> /// <returns></returns> public ErrCode ReloadEpgData() { ErrCode ret = ErrCode.CMD_SUCCESS; if (updateEpgData) { DateTime now = DateTime.UtcNow.AddHours(9); //6日以上前の日曜0時 EventBaseTime = now.AddDays(-(int)now.AddDays(-6).DayOfWeek - 6) - now.TimeOfDay; EventMinTime = DateTime.MaxValue; serviceEventList = new Dictionary <ulong, EpgServiceAllEventInfo>(); var list = new List <EpgServiceEventInfo>(); var arcList = new List <EpgServiceEventInfo>(); try { ret = ErrCode.CMD_ERR; ret = CommonManager.CreateSrvCtrl().SendEnumPgAll(ref list); //SendEnumPgAll()は番組情報未取得状態でCMD_ERRを返す。従来エラー扱いだったが、取得数0の成功とみなす if (ret == ErrCode.CMD_SUCCESS || ret == ErrCode.CMD_ERR) { ret = ErrCode.CMD_ERR; var mm = new List <long>(); if (CommonManager.CreateSrvCtrl().SendGetPgArcMinMax(new List <long> { 0xFFFFFFFFFFFF, 0xFFFFFFFFFFFF }, ref mm) == ErrCode.CMD_SUCCESS) { if (mm[0] != long.MaxValue) { //全過去番組情報の最小開始時間 EventMinTime = DateTime.FromFileTimeUtc(mm[0]); if (EventMinTime < EventBaseTime) { //2日以上前の日曜0時 EventBaseTime = now.AddDays(-(int)now.AddDays(-2).DayOfWeek - 2) - now.TimeOfDay; } CommonManager.CreateSrvCtrl().SendEnumPgArc( new List <long> { 0xFFFFFFFFFFFF, 0xFFFFFFFFFFFF, EventBaseTime.ToFileTime(), now.AddDays(1).ToFileTime() }, ref arcList); } } ret = ErrCode.CMD_SUCCESS; } } catch { } if (ret == ErrCode.CMD_SUCCESS) { foreach (EpgServiceEventInfo info in list) { ulong id = CommonManager.Create64Key(info.serviceInfo.ONID, info.serviceInfo.TSID, info.serviceInfo.SID); //対応する過去番組情報があれば付加する int i = arcList.FindIndex(a => id == CommonManager.Create64Key(a.serviceInfo.ONID, a.serviceInfo.TSID, a.serviceInfo.SID)); serviceEventList.Add(id, new EpgServiceAllEventInfo(info.serviceInfo, info.eventList, i < 0 ? new List <EpgEventInfo>() : arcList[i].eventList)); foreach (EpgEventInfo eventInfo in info.eventList) { if (eventInfo.StartTimeFlag != 0) { EventMinTime = eventInfo.start_time > EventMinTime ? EventMinTime : eventInfo.start_time; } } } foreach (EpgServiceEventInfo info in arcList) { ulong id = CommonManager.Create64Key(info.serviceInfo.ONID, info.serviceInfo.TSID, info.serviceInfo.SID); if (serviceEventList.ContainsKey(id) == false) { //過去番組情報のみ存在 serviceEventList.Add(id, new EpgServiceAllEventInfo(info.serviceInfo, new List <EpgEventInfo>(), info.eventList)); } } updateEpgData = false; } if (EpgDataChanged != null) { EpgDataChanged(); } } return(ret); }
/// <summary> /// baseTimeから1週間分(EventBaseTimeをしきい値とし、このとき上限なし)のEPGデータを検索する /// </summary> public ErrCode SearchWeeklyEpgData(DateTime baseTime, EpgSearchKeyInfo key, out Dictionary <ulong, EpgServiceAllEventInfo> list) { list = null; List <EpgEventInfo> eventList; List <EpgEventInfo> arcList = null; ErrCode ret = SearchPg(new List <EpgSearchKeyInfo>() { key }, out eventList); if (ret == ErrCode.CMD_SUCCESS) { ret = ErrCode.CMD_ERR; baseTime = baseTime > EventBaseTime ? EventBaseTime : baseTime; arcList = new List <EpgEventInfo>(); //1週間分の過去番組情報 var param = new SearchPgParam(); param.keyList = new List <EpgSearchKeyInfo>() { key }; param.enumStart = baseTime.ToFileTime(); param.enumEnd = baseTime.AddDays(baseTime < EventBaseTime ? 7 : 14).ToFileTime(); try { CommonManager.CreateSrvCtrl().SendSearchPgArc(param, ref arcList); ret = ErrCode.CMD_SUCCESS; } catch { } } if (ret == ErrCode.CMD_SUCCESS) { list = new Dictionary <ulong, EpgServiceAllEventInfo>(); //サービス毎のリストに変換 foreach (EpgEventInfo info in eventList) { if (baseTime < EventBaseTime ? (info.StartTimeFlag != 0 && info.start_time >= baseTime && info.start_time < baseTime.AddDays(7)) : (info.StartTimeFlag == 0 || info.start_time >= baseTime)) { ulong id = CommonManager.Create64Key(info.original_network_id, info.transport_stream_id, info.service_id); EpgServiceAllEventInfo allInfo; if (list.TryGetValue(id, out allInfo) == false) { if (ChSet5.Instance.ChList.ContainsKey(id) == false) { //サービス情報ないので無効 continue; } allInfo = new EpgServiceAllEventInfo(CommonManager.ConvertChSet5To(ChSet5.Instance.ChList[id])); if (serviceEventList.ContainsKey(id)) { //リモコンキー情報を補完 allInfo.serviceInfo.remote_control_key_id = serviceEventList[id].serviceInfo.remote_control_key_id; } list.Add(id, allInfo); } allInfo.eventList.Add(info); } } foreach (EpgEventInfo info in arcList) { ulong id = CommonManager.Create64Key(info.original_network_id, info.transport_stream_id, info.service_id); EpgServiceAllEventInfo allInfo; if (list.TryGetValue(id, out allInfo) == false) { if (ChSet5.Instance.ChList.ContainsKey(id) == false) { //サービス情報ないので無効 continue; } allInfo = new EpgServiceAllEventInfo(CommonManager.ConvertChSet5To(ChSet5.Instance.ChList[id])); if (serviceEventList.ContainsKey(id)) { //リモコンキー情報を補完 allInfo.serviceInfo.remote_control_key_id = serviceEventList[id].serviceInfo.remote_control_key_id; } list.Add(id, allInfo); } allInfo.eventArcList.Add(info); } } return(ret); }
private void button_add_reserve_Click(object sender, RoutedEventArgs e) { try { if (listView_result.SelectedItem != null) { SearchItem item = listView_result.SelectedItem as SearchItem; EpgEventInfo eventInfo = item.EventInfo; if (eventInfo.StartTimeFlag == 0) { MessageBox.Show("開始時間未定のため予約できません"); return; } ReserveData reserveInfo = new ReserveData(); if (eventInfo.ShortInfo != null) { reserveInfo.Title = eventInfo.ShortInfo.event_name; } reserveInfo.StartTime = eventInfo.start_time; reserveInfo.StartTimeEpg = eventInfo.start_time; if (eventInfo.DurationFlag == 0) { reserveInfo.DurationSecond = 10 * 60; } else { reserveInfo.DurationSecond = eventInfo.durationSec; } UInt64 key = CommonManager.Create64Key(eventInfo.original_network_id, eventInfo.transport_stream_id, eventInfo.service_id); if (ChSet5.Instance.ChList.ContainsKey(key) == true) { reserveInfo.StationName = ChSet5.Instance.ChList[key].ServiceName; } reserveInfo.OriginalNetworkID = eventInfo.original_network_id; reserveInfo.TransportStreamID = eventInfo.transport_stream_id; reserveInfo.ServiceID = eventInfo.service_id; reserveInfo.EventID = eventInfo.event_id; RecSettingData setInfo = new RecSettingData(); recSettingView.GetRecSetting(ref setInfo); reserveInfo.RecSetting = setInfo; List <ReserveData> list = new List <ReserveData>(); list.Add(reserveInfo); ErrCode err = (ErrCode)cmd.SendAddReserve(list); if (err == ErrCode.CMD_ERR_CONNECT) { MessageBox.Show("サーバー または EpgTimerSrv に接続できませんでした。"); } if (err == ErrCode.CMD_ERR_TIMEOUT) { MessageBox.Show("EpgTimerSrvとの接続にタイムアウトしました。"); } if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show("予約登録でエラーが発生しました。終了時間がすでに過ぎている可能性があります。"); } CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.ReloadReserveInfo(); SearchPg(); } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
/// <summary> /// 初期値の予約情報をセットする /// </summary> /// <param name="info">[IN] 初期値の予約情報</param> public void SetReserveInfo(ReserveData info) { try { reserveInfo = info; recSettingView.SetDefSetting(info.RecSetting); if (info.EventID != 0xFFFF) { UInt64 key = CommonManager.Create64Key(info.OriginalNetworkID, info.TransportStreamID, info.ServiceID); EpgEventInfo eventInfo = null; if (CommonManager.Instance.DB.ServiceEventList.ContainsKey(key) == true) { foreach (EpgEventInfo eventChkInfo in CommonManager.Instance.DB.ServiceEventList[key].eventList) { if (eventChkInfo.event_id == info.EventID) { eventInfo = eventChkInfo; break; } } } if (eventInfo == null) { UInt64 pgId = CommonManager.Create64PgKey(info.OriginalNetworkID, info.TransportStreamID, info.ServiceID, info.EventID); eventInfo = new EpgEventInfo(); cmd.SendGetPgInfo(pgId, ref eventInfo); } if (eventInfo != null) { String text = CommonManager.Instance.ConvertProgramText(eventInfo, EventInfoTextMode.All); Regex regex = new Regex("((http://|https://|http://|https://).*\r\n)"); if (regex.IsMatch(text) == true) { try { //Regexのsplitでやるとhttp://だけのも取れたりするので、1つずつ行う FlowDocument flowDoc = new FlowDocument(); Paragraph para = new Paragraph(); do { Match matchVal = regex.Match(text); int index = text.IndexOf(matchVal.Value); para.Inlines.Add(text.Substring(0, index)); text = text.Remove(0, index); Hyperlink h = new Hyperlink(new Run(matchVal.Value.Replace("\r\n", ""))); h.MouseLeftButtonDown += new MouseButtonEventHandler(h_MouseLeftButtonDown); h.Foreground = Brushes.Blue; h.Cursor = Cursors.Hand; String url = CommonManager.ReplaceUrl(matchVal.Value.Replace("\r\n", "")); h.NavigateUri = new Uri(url); para.Inlines.Add(h); para.Inlines.Add("\r\n"); text = text.Remove(0, matchVal.Value.Length); } while (regex.IsMatch(text) == true); para.Inlines.Add(text); flowDoc.Blocks.Add(para); richTextBox_descInfo.Document = flowDoc; } catch { text = CommonManager.Instance.ConvertProgramText(eventInfo, EventInfoTextMode.All); FlowDocument flowDoc = new FlowDocument(); flowDoc.Blocks.Add(new Paragraph(new Run(text))); richTextBox_descInfo.Document = flowDoc; } } else { FlowDocument flowDoc = new FlowDocument(); flowDoc.Blocks.Add(new Paragraph(new Run(text))); richTextBox_descInfo.Document = flowDoc; } } } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
private void ReloadProgramViewItemForSearch() { try { if (lastChkSID != null && listBox_service.ItemsSource != null) { lastChkSID.Clear(); foreach (ServiceItem info in serviceList) { if (info.IsSelected == true) { lastChkSID.Add(info.ID, info.ID); } } } listBox_service.ItemsSource = null; serviceList.Clear(); //番組情報の検索 List <EpgSearchKeyInfo> keyList = new List <EpgSearchKeyInfo>(); keyList.Add(setViewInfo.SearchKey); List <EpgEventInfo> list = new List <EpgEventInfo>(); cmd.SendSearchPg(keyList, ref list); //サービス毎のリストに変換 serviceEventList.Clear(); foreach (EpgEventInfo eventInfo in list) { UInt64 id = CommonManager.Create64Key(eventInfo.original_network_id, eventInfo.transport_stream_id, eventInfo.service_id); EpgServiceEventInfo serviceInfo = null; if (serviceEventList.ContainsKey(id) == false) { if (ChSet5.Instance.ChList.ContainsKey(id) == false) { //サービス情報ないので無効 continue; } serviceInfo = new EpgServiceEventInfo(); serviceInfo.serviceInfo = CommonManager.ConvertChSet5To(ChSet5.Instance.ChList[id]); serviceEventList.Add(id, serviceInfo); } else { serviceInfo = serviceEventList[id]; } serviceInfo.eventList.Add(eventInfo); } foreach (UInt64 id in viewCustServiceList) { if (serviceEventList.ContainsKey(id) == true) { ServiceItem item = new ServiceItem(); item.ServiceInfo = serviceEventList[id].serviceInfo; item.IsSelected = true; if (lastChkSID != null) { if (lastChkSID.ContainsKey(id) == false) { item.IsSelected = false; } } serviceList.Add(item); } } if (lastChkSID == null) { lastChkSID = new Dictionary <ulong, ulong>(); } listBox_service.ItemsSource = serviceList; UpdateEventList(); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
private void SearchPg() { try { ICollectionView dataView = CollectionViewSource.GetDefaultView(listView_result.DataContext); if (dataView != null) { dataView.SortDescriptions.Clear(); dataView.Refresh(); } listView_result.DataContext = null; resultList.Clear(); EpgSearchKeyInfo key = new EpgSearchKeyInfo(); searchKeyView.GetSearchKey(ref key); List <EpgSearchKeyInfo> keyList = new List <EpgSearchKeyInfo>(); keyList.Add(key); List <EpgEventInfo> list = new List <EpgEventInfo>(); cmd.SendSearchPg(keyList, ref list); foreach (EpgEventInfo info in list) { SearchItem item = new SearchItem(); item.EventInfo = info; foreach (ReserveData info2 in CommonManager.Instance.DB.ReserveList.Values) { if (info.original_network_id == info2.OriginalNetworkID && info.transport_stream_id == info2.TransportStreamID && info.service_id == info2.ServiceID && info.event_id == info2.EventID) { item.ReserveInfo = info2; break; } } UInt64 serviceKey = CommonManager.Create64Key(info.original_network_id, info.transport_stream_id, info.service_id); if (ChSet5.Instance.ChList.ContainsKey(serviceKey) == true) { item.ServiceName = ChSet5.Instance.ChList[serviceKey].ServiceName; } resultList.Add(item); } listView_result.DataContext = resultList; if (_lastHeaderClicked != null) { Sort(_lastHeaderClicked, _lastDirection); } else { string header = ((Binding)gridView_result.Columns[1].DisplayMemberBinding).Path.Path; Sort(header, _lastDirection); _lastHeaderClicked = header; } searchKeyView.SaveSearchLog(); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
public static UInt64 Create64Key(this EpgEventData obj) { return(CommonManager.Create64Key(obj.original_network_id, obj.transport_stream_id, obj.service_id)); }
public static UInt64 Create64Key(this EpgServiceInfo obj) { return(CommonManager.Create64Key(obj.ONID, obj.TSID, obj.SID)); }
/// <summary> /// タブ生成 /// </summary> private bool CreateTabItem() { { List <CustomEpgTabInfo> defaultList = null; if (Settings.Instance.UseCustomEpgView == false) { defaultList = new List <CustomEpgTabInfo>(); if (CommonManager.Instance.NWMode && CommonManager.Instance.NWConnectedIP == null) { return(false); } ErrCode err = CommonManager.Instance.DB.ReloadEpgData(); if (err != ErrCode.CMD_SUCCESS) { if (IsVisible && err != ErrCode.CMD_ERR_BUSY) { Dispatcher.BeginInvoke(new Action(() => { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "EPGデータの取得でエラーが発生しました。EPGデータが読み込まれていない可能性があります。"); })); } return(false); } //デフォルト表示 bool ignoreEpgCap = Settings.Instance.ShowEpgCapServiceOnly == false; IEnumerable <EpgServiceInfo> sel = CommonManager.Instance.DB.ServiceEventList.Values.Select(info => info.serviceInfo).Where(info => { ulong key = CommonManager.Create64Key(info.ONID, info.TSID, info.SID); return(ignoreEpgCap || ChSet5.Instance.ChList.ContainsKey(key) && ChSet5.Instance.ChList[key].EpgCapFlag); }); //リモコンキー優先のID順ソート。BSはなるべくSID順 var bsmin = new Dictionary <ushort, ushort>(); foreach (EpgServiceInfo info in sel) { if (ChSet5.IsBS(info.ONID) && (bsmin.ContainsKey(info.TSID) == false || bsmin[info.TSID] > info.SID)) { bsmin[info.TSID] = info.SID; } } sel = sel.OrderBy(info => (ulong)(ChSet5.IsDttv(info.ONID) ? (info.remote_control_key_id + 255) % 256 : 0) << 48 | CommonManager.Create64Key(info.ONID, (ChSet5.IsBS(info.ONID) ? bsmin[info.TSID] : info.TSID), info.SID)); for (int i = 0; i < 5; i++) { CustomEpgTabInfo setInfo = null; foreach (EpgServiceInfo info in sel) { string tabName = null; if (i == 0 && ChSet5.IsDttv(info.ONID)) { tabName = "地デジ"; } else if (i == 1 && ChSet5.IsBS(info.ONID)) { tabName = "BS"; } else if (i == 2 && ChSet5.IsCS(info.ONID) && ChSet5.IsCS3(info.ONID) == false) { tabName = "CS"; } else if (i == 3 && ChSet5.IsCS3(info.ONID)) { tabName = "CS3"; } else if (i == 4 && ChSet5.IsOther(info.ONID)) { tabName = "その他"; } if (tabName != null) { if (setInfo == null) { setInfo = new CustomEpgTabInfo(); setInfo.TabName = tabName; } setInfo.ViewServiceList.Add(CommonManager.Create64Key(info.ONID, info.TSID, info.SID)); } } if (setInfo != null) { defaultList.Add(setInfo); } } } foreach (CustomEpgTabInfo info in defaultList ?? Settings.Instance.CustomEpgTabList) { var tabItem = new TabItem(); tabItem.Header = info.TabName; if (info.ViewMode == 1) { //1週間表示 var epgView = new EpgWeekMainView(info); epgView.ViewModeChangeRequested += item_ViewModeChangeRequested; tabItem.Content = epgView; } else if (info.ViewMode == 2) { //リスト表示 var epgView = new EpgListMainView(info); epgView.ViewModeChangeRequested += item_ViewModeChangeRequested; tabItem.Content = epgView; } else { //標準ラテ欄表示 var epgView = new EpgMainView(info); epgView.ViewModeChangeRequested += item_ViewModeChangeRequested; tabItem.Content = epgView; } tabControl.Items.Add(tabItem); } if (tabControl.Items.Count > 0) { tabControl.SelectedIndex = 0; } } return(true); }
public bool SetLiveCh(UInt16 ONID, UInt16 TSID, UInt16 SID) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } OpenTVTest(Settings.Instance.TvTestOpenWait, Settings.Instance.NwTvMode == false); var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\" + processType + "_Ctrl_BonConnect_" + process.Id, processType + "_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); if (Settings.Instance.NwTvMode == true) { SetChInfo chInfo = new SetChInfo(); chInfo.useSID = 1; chInfo.useBonCh = 0; chInfo.ONID = ONID; chInfo.TSID = TSID; chInfo.SID = SID; UInt32 nwMode = 0; String nwBonDriver = "BonDriver_UDP.dll"; if (Settings.Instance.NwTvModeUDP == true) { nwMode += 1; } if (Settings.Instance.NwTvModeTCP == true) { nwMode += 2; nwBonDriver = "BonDriver_TCP.dll"; } if (CommonManager.CreateSrvCtrl().SendNwTVMode(nwMode) == ErrCode.CMD_SUCCESS) { if (CommonManager.CreateSrvCtrl().SendNwTVSetCh(chInfo) == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } if (val.Equals(nwBonDriver, StringComparison.OrdinalIgnoreCase) == false) { cmdTvTest.SendViewSetBonDrivere(nwBonDriver); } break; } } } } else { UInt64 key = CommonManager.Create64Key(ONID, TSID, SID); TvTestChChgInfo chInfo = new TvTestChChgInfo(); ErrCode err = CommonManager.CreateSrvCtrl().SendGetChgChTVTest(key, ref chInfo); if (err == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } // 識別用IDが設定されたViewアプリは弄らない if (processType == "View") { int id = -1; if (cmdTvTest.SendViewGetID(ref id) != ErrCode.CMD_SUCCESS || id >= 0) { break; } } if (val.Equals(chInfo.bonDriver, StringComparison.OrdinalIgnoreCase) == false) { if (cmdTvTest.SendViewSetBonDrivere(chInfo.bonDriver) == ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(Settings.Instance.TvTestChgBonWait); cmdTvTest.SendViewSetCh(chInfo.chInfo); } } else { cmdTvTest.SendViewSetCh(chInfo.chInfo); } break; } } else { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "指定サービスを受信できるBonDriverが設定されていません。"); return(false); } } WakeupWindow(process.MainWindowHandle); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(true); }
/// <summary> /// タブ生成 /// </summary> private bool CreateTabItem() { try { if (Settings.Instance.UseCustomEpgView == false) { if (CommonManager.Instance.NWMode == true) { if (CommonManager.Instance.NW.IsConnected == false) { return(false); } } ErrCode err = CommonManager.Instance.DB.ReloadEpgData(); if (err == ErrCode.CMD_ERR_CONNECT) { this.Dispatcher.BeginInvoke(new Action(() => { MessageBox.Show("サーバー または EpgTimerSrv に接続できませんでした。"); }), null); return(false); } if (err == ErrCode.CMD_ERR_BUSY) { this.Dispatcher.BeginInvoke(new Action(() => { MessageBox.Show("EPGデータの読み込みを行える状態ではありません。\r\n(EPGデータ読み込み中。など)"); }), null); return(false); } if (err == ErrCode.CMD_ERR_TIMEOUT) { this.Dispatcher.BeginInvoke(new Action(() => { MessageBox.Show("EpgTimerSrvとの接続にタイムアウトしました。"); }), null); return(false); } if (err != ErrCode.CMD_SUCCESS) { this.Dispatcher.BeginInvoke(new Action(() => { MessageBox.Show("EPGデータの取得でエラーが発生しました。EPGデータが読み込まれていない可能性があります。"); }), null); return(false); } CommonManager.Instance.DB.ReloadReserveInfo(); bool findTere = false; bool findBS = false; bool findCS = false; bool findOther = false; CustomEpgTabInfo setInfoBS = new CustomEpgTabInfo(); setInfoBS.ViewMode = 0; setInfoBS.TabName = "BS"; setInfoBS.NeedTimeOnlyBasic = false; CustomEpgTabInfo setInfoCS = new CustomEpgTabInfo(); setInfoCS.ViewMode = 0; setInfoCS.TabName = "CS"; setInfoCS.NeedTimeOnlyBasic = false; CustomEpgTabInfo setInfoTere = new CustomEpgTabInfo(); setInfoTere.ViewMode = 0; setInfoTere.TabName = "地デジ"; setInfoTere.NeedTimeOnlyBasic = false; CustomEpgTabInfo setInfoOther = new CustomEpgTabInfo(); setInfoOther.ViewMode = 0; setInfoOther.TabName = "その他"; setInfoOther.NeedTimeOnlyBasic = false; //デフォルト表示 foreach (EpgServiceEventInfo info in CommonManager.Instance.DB.ServiceEventList.Values) { if (info.serviceInfo.ONID == 0x0004) { findBS = true; UInt64 id = CommonManager.Create64Key(info.serviceInfo.ONID, info.serviceInfo.TSID, info.serviceInfo.SID); setInfoBS.ViewServiceList.Add(id); } else if (info.serviceInfo.ONID == 0x0006 || info.serviceInfo.ONID == 0x0007) { findCS = true; UInt64 id = CommonManager.Create64Key(info.serviceInfo.ONID, info.serviceInfo.TSID, info.serviceInfo.SID); setInfoCS.ViewServiceList.Add(id); } else if (0x7880 <= info.serviceInfo.ONID && info.serviceInfo.ONID <= 0x7FE8) { findTere = true; UInt64 id = CommonManager.Create64Key(info.serviceInfo.ONID, info.serviceInfo.TSID, info.serviceInfo.SID); setInfoTere.ViewServiceList.Add(id); } else { findOther = true; UInt64 id = CommonManager.Create64Key(info.serviceInfo.ONID, info.serviceInfo.TSID, info.serviceInfo.SID); setInfoOther.ViewServiceList.Add(id); } } if (findBS == true) { EpgDataViewItem epgView = new EpgDataViewItem(); epgView.SetViewMode(setInfoBS); epgView.ViewSettingClick += new ViewSettingClickHandler(epgView_ViewSettingClick); TabItem tabItem = new TabItem(); tabItem.Header = setInfoBS.TabName; tabItem.Content = epgView; tabControl.Items.Add(tabItem); } if (findCS == true) { EpgDataViewItem epgView = new EpgDataViewItem(); epgView.SetViewMode(setInfoCS); epgView.ViewSettingClick += new ViewSettingClickHandler(epgView_ViewSettingClick); TabItem tabItem = new TabItem(); tabItem.Header = setInfoCS.TabName; tabItem.Content = epgView; tabControl.Items.Add(tabItem); } if (findTere == true) { EpgDataViewItem epgView = new EpgDataViewItem(); epgView.SetViewMode(setInfoTere); epgView.ViewSettingClick += new ViewSettingClickHandler(epgView_ViewSettingClick); TabItem tabItem = new TabItem(); tabItem.Header = setInfoTere.TabName; tabItem.Content = epgView; tabControl.Items.Add(tabItem); } if (findOther == true) { EpgDataViewItem epgView = new EpgDataViewItem(); epgView.SetViewMode(setInfoOther); epgView.ViewSettingClick += new ViewSettingClickHandler(epgView_ViewSettingClick); TabItem tabItem = new TabItem(); tabItem.Header = setInfoOther.TabName; tabItem.Content = epgView; tabControl.Items.Add(tabItem); } if (tabControl.Items.Count > 0) { tabControl.SelectedIndex = 0; } } else { //カスタム表示 foreach (CustomEpgTabInfo info in Settings.Instance.CustomEpgTabList) { EpgDataViewItem epgView = new EpgDataViewItem(); epgView.SetViewMode(info); epgView.ViewSettingClick += new ViewSettingClickHandler(epgView_ViewSettingClick); TabItem tabItem = new TabItem(); tabItem.Header = info.TabName; tabItem.Content = epgView; tabControl.Items.Add(tabItem); } if (tabControl.Items.Count > 0) { tabControl.SelectedIndex = 0; } } } catch (Exception ex) { this.Dispatcher.BeginInvoke(new Action(() => { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); }), null); } return(true); }