Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
 public override UInt64 Create64PgKey()
 {
     return(CommonManager.Create64PgKey(original_network_id, transport_stream_id, service_id, event_id));
 }
Пример #5
0
 public override UInt64 Create64PgKey()
 {
     return(CommonManager.Create64PgKey(OriginalNetworkID, TransportStreamID, ServiceID, EventID));
 }
Пример #6
0
        /// <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);
            }
        }
Пример #7
0
 public UInt64 Create64PgKey()
 {
     return(CommonManager.Create64PgKey(OriginalNetworkID, TransportStreamID, ServiceID, 0xFFFF));
 }
Пример #8
0
        /// <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);
            }
        }
Пример #9
0
 public static UInt64 Create64PgKey(this EpgEventData obj)
 {
     return(CommonManager.Create64PgKey(obj.original_network_id, obj.transport_stream_id, obj.service_id, obj.event_id));
 }