/// <summary> /// 指定IDの番組情報を取得する。できるだけServiceEventListを利用する /// </summary> public EpgEventInfo GetPgInfo(ushort onid, ushort tsid, ushort sid, ushort eventID, bool cacheOnly) { var eventInfo = new EpgEventInfo(); EpgServiceAllEventInfo allInfo; if (serviceEventList.TryGetValue(CommonManager.Create64Key(onid, tsid, sid), out allInfo)) { //過去でない番組情報は必ずID順になっている eventInfo.event_id = eventID; int index = allInfo.eventList.BinarySearch(eventInfo, new EpgEventInfoComparer()); if (index >= 0) { return(allInfo.eventList[index]); } } try { if (cacheOnly == false && CommonManager.CreateSrvCtrl().SendGetPgInfo(CommonManager.Create64PgKey(onid, tsid, sid, eventID), ref eventInfo) == ErrCode.CMD_SUCCESS) { return(eventInfo); } } catch { } return(null); }
/// <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(); CommonManager.CreateSrvCtrl().SendGetPgInfo(pgId, ref eventInfo); } if (eventInfo != null) { String text = CommonManager.Instance.ConvertProgramText(eventInfo, EventInfoTextMode.All); int searchFrom = 0; Paragraph para = new Paragraph(); string rtext = CommonManager.ReplaceText(text, CommonManager.Instance.ReplaceUrlDictionary); if (rtext.Length == text.Length) { for (Match m = Regex.Match(rtext, @"https?://[0-9A-Za-z!#$%&'()~=@;:?_+\-*/.]+"); m.Success; m = m.NextMatch()) { para.Inlines.Add(text.Substring(searchFrom, m.Index - searchFrom)); Hyperlink h = new Hyperlink(new Run(text.Substring(m.Index, m.Length))); h.MouseLeftButtonDown += new MouseButtonEventHandler(h_MouseLeftButtonDown); h.Foreground = Brushes.Blue; h.Cursor = Cursors.Hand; h.NavigateUri = new Uri(m.Value); para.Inlines.Add(h); searchFrom = m.Index + m.Length; } } para.Inlines.Add(text.Substring(searchFrom)); richTextBox_descInfo.Document = new FlowDocument(para); } } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
private void RefreshReserve() { var resultList = listView_result.ItemsSource as List <SearchItem>; if (resultList != null) { List <decimal> list = CommonManager.Instance.DB.ReserveList.Values.Select(a => CommonManager.Create64PgKey( a.OriginalNetworkID, a.TransportStreamID, a.ServiceID, a.EventID) * ((decimal)uint.MaxValue + 1) + a.ReserveID).ToList(); list.Sort(); for (int i = 0; i < resultList.Count; i++) { SearchItem item = resultList[i]; if (item.Duplicate) { resultList.RemoveAt(i--); } else { item.ReserveInfo = null; decimal key = CommonManager.Create64PgKey(item.EventInfo.original_network_id, item.EventInfo.transport_stream_id, item.EventInfo.service_id, item.EventInfo.event_id) * ((decimal)uint.MaxValue + 1); int index = list.BinarySearch(key); index = index < 0 ? ~index : index; for (; index < list.Count && list[index] <= key + uint.MaxValue; index++) { //予約情報が見つかった if (item.ReserveInfo != null) { //さらに見つかった item = new SearchItem(item.EventInfo, false, item.Filtered, true) { ServiceName = item.ServiceName }; resultList.Insert(++i, item); } item.ReserveInfo = CommonManager.Instance.DB.ReserveList[(uint)(list[index] % ((decimal)uint.MaxValue + 1))]; } } } CollectionViewSource.GetDefaultView(listView_result.ItemsSource).Refresh(); } }
public override UInt64 Create64PgKey() { return(CommonManager.Create64PgKey(original_network_id, transport_stream_id, service_id, event_id)); }
public override UInt64 Create64PgKey() { return(CommonManager.Create64PgKey(OriginalNetworkID, TransportStreamID, ServiceID, EventID)); }
/// <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("(https?://[!#-'*-;=?-Z_a-z~]+)"); // URLに使用可能な文字から括弧を除外 if (regex.IsMatch(text) == true) { try { string[] substrings = regex.Split(text); FlowDocument flowDoc = new FlowDocument(); Paragraph para = new Paragraph(); for (int i = 0; i < substrings.Count(); i++) { if (i % 2 == 0) { para.Inlines.Add(substrings[i]); } else { Hyperlink h = new Hyperlink(new Run(substrings[i])); h.MouseLeftButtonDown += new MouseButtonEventHandler(h_MouseLeftButtonDown); h.Foreground = Brushes.Blue; h.Cursor = Cursors.Hand; h.NavigateUri = new Uri(substrings[i]); para.Inlines.Add(h); } } 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); } }
public UInt64 Create64PgKey() { return(CommonManager.Create64PgKey(OriginalNetworkID, TransportStreamID, ServiceID, 0xFFFF)); }
/// <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); } }
public static UInt64 Create64PgKey(this EpgEventData obj) { return(CommonManager.Create64PgKey(obj.original_network_id, obj.transport_stream_id, obj.service_id, obj.event_id)); }