Exemple #1
0
 public static ReserveData ConvertEpgToReserveData(EpgEventInfo epgInfo)
 {
     if (epgInfo == null) return null;
     ReserveData resInfo = new ReserveData();
     epgInfo.ConvertToReserveData(ref resInfo);
     return resInfo;
 }
Exemple #2
0
        public static bool ConvertToReserveData(this EpgEventInfo epgInfo, ref ReserveData resInfo)
        {
            if (epgInfo == null || resInfo == null) return false;

            resInfo.Title = epgInfo.Title();
            resInfo.StartTime = epgInfo.start_time;
            resInfo.StartTimeEpg = epgInfo.start_time;
            resInfo.DurationSecond = (epgInfo.DurationFlag == 0 ? 10 * 60 : epgInfo.durationSec);

            UInt64 key = epgInfo.Create64Key();
            if (ChSet5.Instance.ChList.ContainsKey(key) == true)
            {
                resInfo.StationName = ChSet5.Instance.ChList[key].ServiceName;
            }
            resInfo.OriginalNetworkID = epgInfo.original_network_id;
            resInfo.TransportStreamID = epgInfo.transport_stream_id;
            resInfo.ServiceID = epgInfo.service_id;
            resInfo.EventID = epgInfo.event_id;

            return true;
        }
        private void cm_chg_recmode_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                List <ReserveData> list = new List <ReserveData>();
                foreach (SearchItem item in listView_event.SelectedItems)
                {
                    if (item.IsReserved == true)
                    {
                        ReserveData reserveInfo = item.ReserveInfo;

                        byte recMode = 0;
                        if (sender == recmode_all)
                        {
                            recMode = 0;
                        }
                        else if (sender == recmode_only)
                        {
                            recMode = 1;
                        }
                        else if (sender == recmode_all_nodec)
                        {
                            recMode = 2;
                        }
                        else if (sender == recmode_only_nodec)
                        {
                            recMode = 3;
                        }
                        else if (sender == recmode_view)
                        {
                            recMode = 4;
                        }
                        else if (sender == recmode_no)
                        {
                            recMode = 5;
                        }
                        else
                        {
                            return;
                        }
                        reserveInfo.RecSetting.RecMode = recMode;

                        list.Add(reserveInfo);
                    }
                }
                if (list.Count > 0)
                {
                    ErrCode err = (ErrCode)cmd.SendChgReserve(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("予約変更でエラーが発生しました。");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
 /// <summary>
 /// 予約変更
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void ChangeReserve(ReserveData reserveInfo)
 {
     try
     {
         ChgReserveWindow dlg = new ChgReserveWindow();
         dlg.Owner = (Window)PresentationSource.FromVisual(this).RootVisual;
         dlg.SetReserveInfo(reserveInfo);
         if (dlg.ShowDialog() == true)
         {
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
     }
 }
        /// <summary>
        /// 右クリックメニュー 追っかけ再生イベント呼び出し
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cm_timeShiftPlay_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (sender.GetType() != typeof(MenuItem))
                {
                    return;
                }

                ReserveData reserve = new ReserveData();
                if (GetReserveItem(clickPos, ref reserve) == false)
                {
                    return;
                }
                CommonManager.Instance.TVTestCtrl.StartTimeShift(reserve.ReserveID);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
        /// <summary>
        /// 右クリックメニュー 自動予約登録イベント呼び出し
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cm_autoadd_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (sender.GetType() != typeof(MenuItem))
                {
                    return;
                }

                ReserveData reserve = new ReserveData();
                if (GetReserveItem(clickPos, ref reserve) == false)
                {
                    return;
                }

                SearchWindow dlg = new SearchWindow();
                dlg.Owner = (Window)PresentationSource.FromVisual(this).RootVisual;
                dlg.SetViewMode(1);

                EpgSearchKeyInfo key = new EpgSearchKeyInfo();

                if (reserve.Title != null)
                {
                    key.andKey = reserve.Title;
                }
                Int64 sidKey = ((Int64)reserve.OriginalNetworkID) << 32 | ((Int64)reserve.TransportStreamID) << 16 | ((Int64)reserve.ServiceID);
                key.serviceList.Add(sidKey);

                dlg.SetSearchDefKey(key);
                dlg.ShowDialog();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
Exemple #7
0
        public MainWindow()
        {
            CommonManager.Instance.NWMode = true;
            Settings.LoadFromXmlFileNW();
            ChSet5.LoadFile();
            cmd.SetSendMode(true);
            cmd.SetNWSetting(Settings.Instance.NWServerIP, Settings.Instance.NWServerPort);
            CommonManager.Instance.ReloadCustContentColorList();
            CommonManager.Instance.DB.SetNoAutoReloadEPG(Settings.Instance.NgAutoEpgLoadNW);

            if (Settings.Instance.NoStyle == 0)
            {
                ResourceDictionary rd = new ResourceDictionary();
                rd.MergedDictionaries.Add(
                    Application.LoadComponent(new Uri("/PresentationFramework.Aero, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35;component/themes/aero.normalcolor.xaml", UriKind.Relative)) as ResourceDictionary
                    //Application.LoadComponent(new Uri("/PresentationFramework.Classic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/Classic.xaml", UriKind.Relative)) as ResourceDictionary
                    );
                this.Resources = rd;
            }

            mutex = new System.Threading.Mutex(false, "Global\\EpgTimer_BonNW");
            if (!mutex.WaitOne(0, false))
            {
                CheckCmdLine();

                mutex.Close();
                mutex = null;

                closeFlag = true;
                Close();
                return;
            }

            if (CommonManager.Instance.NWMode == false)
            {
                bool startExe = false;
                try
                {
                    if (ServiceCtrlClass.ServiceIsInstalled("EpgTimer Service") == true)
                    {
                        if (ServiceCtrlClass.IsStarted("EpgTimer Service") == false)
                        {
                            bool check = false;
                            for (int i = 0; i < 5; i++)
                            {
                                if (ServiceCtrlClass.StartService("EpgTimer Service") == true)
                                {
                                    check = true;
                                }
                                System.Threading.Thread.Sleep(1000);
                                if (ServiceCtrlClass.IsStarted("EpgTimer Service") == true)
                                {
                                    check = true;
                                }
                            }
                            if (check == false)
                            {
                                MessageBox.Show("サービスの開始に失敗しました。\r\nVista以降のOSでは、管理者権限で起動されている必要があります。");
                                closeFlag = true;
                                Close();
                                return;
                            }
                            else
                            {
                                serviceMode = true;
                                startExe = true;
                            }
                        }
                        else
                        {
                            serviceMode = true;
                            startExe = true;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                    serviceMode = false;
                }
                try
                {
                    if (serviceMode == false)
                    {
                        String moduleFolder = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
                        String exePath = moduleFolder + "\\EpgTimerSrv.exe";
                        System.Diagnostics.Process process = System.Diagnostics.Process.Start(exePath);
                        startExe = true;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                    startExe = false;
                }

                if (startExe == false)
                {
                    MessageBox.Show("EpgTimerSrv.exeの起動ができませんでした");
                    closeFlag = true;
                    Close();
                    return;
                }
            }

            InitializeComponent();

            initExe = true;

            try
            {
                if (Settings.Instance.WakeMin == true)
                {
                    this.Visibility = System.Windows.Visibility.Hidden;
                }

                //ウインドウ位置の復元
                if (Settings.Instance.MainWndTop != -100)
                {
                    this.Top = Settings.Instance.MainWndTop;
                }
                if (Settings.Instance.MainWndLeft != -100)
                {
                    this.Left = Settings.Instance.MainWndLeft;
                }
                if (Settings.Instance.MainWndWidth != -100)
                {
                    this.Width = Settings.Instance.MainWndWidth;
                }
                if (Settings.Instance.MainWndHeight != -100)
                {
                    this.Height = Settings.Instance.MainWndHeight;
                }
                this.WindowState = Settings.Instance.LastWindowState;

                //上のボタン
                Button settingButton = new Button();
                settingButton.MinWidth = 75;
                settingButton.Margin = new Thickness(2, 2, 2, 5);
                settingButton.Click += new RoutedEventHandler(settingButton_Click);
                settingButton.Content = "設定";
                if (Settings.Instance.NoStyle == 0)
                {
                    settingButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("設定", settingButton);

                Button searchButton = new Button();
                searchButton.MinWidth = 75;
                searchButton.Margin = new Thickness(2, 2, 2, 5);
                searchButton.Click += new RoutedEventHandler(searchButton_Click);
                searchButton.Content = "検索";
                if (Settings.Instance.NoStyle == 0)
                {
                    searchButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("検索", searchButton);

                Button closeButton = new Button();
                closeButton.MinWidth = 75;
                closeButton.Margin = new Thickness(2, 2, 2, 5);
                closeButton.Click += new RoutedEventHandler(closeButton_Click);
                closeButton.Content = "終了";
                if (Settings.Instance.NoStyle == 0)
                {
                    closeButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("終了", closeButton);

                Button stanbyButton = new Button();
                stanbyButton.MinWidth = 75;
                stanbyButton.Margin = new Thickness(2, 2, 2, 5);
                stanbyButton.Click += new RoutedEventHandler(standbyButton_Click);
                stanbyButton.Content = "スタンバイ";
                if (Settings.Instance.NoStyle == 0)
                {
                    stanbyButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("スタンバイ", stanbyButton);

                Button suspendButton = new Button();
                suspendButton.MinWidth = 75;
                suspendButton.Margin = new Thickness(2, 2, 2, 5);
                suspendButton.Click += new RoutedEventHandler(suspendButton_Click);
                suspendButton.Content = "休止";
                if (Settings.Instance.NoStyle == 0)
                {
                    suspendButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("休止", suspendButton);

                Button epgCapButton = new Button();
                epgCapButton.MinWidth = 75;
                epgCapButton.Margin = new Thickness(2, 2, 2, 5);
                epgCapButton.Click += new RoutedEventHandler(epgCapButton_Click);
                epgCapButton.Content = "EPG取得";
                if (Settings.Instance.NoStyle == 0)
                {
                    epgCapButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("EPG取得", epgCapButton);

                Button epgReloadButton = new Button();
                epgReloadButton.MinWidth = 75;
                epgReloadButton.Margin = new Thickness(2, 2, 2, 5);
                epgReloadButton.Click += new RoutedEventHandler(epgReloadButton_Click);
                epgReloadButton.Content = "EPG再読み込み";
                if (Settings.Instance.NoStyle == 0)
                {
                    epgReloadButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("EPG再読み込み", epgReloadButton);

                Button custum1Button = new Button();
                custum1Button.MinWidth = 75;
                custum1Button.Margin = new Thickness(2, 2, 2, 5);
                custum1Button.Click += new RoutedEventHandler(custum1Button_Click);
                custum1Button.Content = "カスタム1";
                if (Settings.Instance.NoStyle == 0)
                {
                    custum1Button.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("カスタム1", custum1Button);

                Button custum2Button = new Button();
                custum2Button.MinWidth = 75;
                custum2Button.Margin = new Thickness(2, 2, 2, 5);
                custum2Button.Click += new RoutedEventHandler(custum2Button_Click);
                custum2Button.Content = "カスタム2";
                if (Settings.Instance.NoStyle == 0)
                {
                    custum2Button.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("カスタム2", custum2Button);

                Button nwTVEndButton = new Button();
                nwTVEndButton.MinWidth = 75;
                nwTVEndButton.Margin = new Thickness(2, 2, 2, 5);
                nwTVEndButton.Click += new RoutedEventHandler(nwTVEndButton_Click);
                nwTVEndButton.Content = "NetworkTV終了";
                if (Settings.Instance.NoStyle == 0)
                {
                    nwTVEndButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("NetworkTV終了", nwTVEndButton);

                Button logViewButton = new Button();
                logViewButton.MinWidth = 75;
                logViewButton.Margin = new Thickness(2, 2, 2, 5);
                logViewButton.Click += new RoutedEventHandler(logViewButton_Click);
                logViewButton.Content = "情報通知ログ";
                if (Settings.Instance.NoStyle == 0)
                {
                    logViewButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("情報通知ログ", logViewButton);

                Button connectButton = new Button();
                connectButton.MinWidth = 75;
                connectButton.Margin = new Thickness(2, 2, 2, 5);
                connectButton.Click += new RoutedEventHandler(connectButton_Click);
                connectButton.Content = "再接続";
                if (Settings.Instance.NoStyle == 0)
                {
                    connectButton.Style = (Style)App.Current.Resources["ButtonStyle1"];
                }
                buttonList.Add("再接続", connectButton);

                ResetButtonView();

                //タスクトレイの表示
                taskTray = new TaskTrayClass(this);
                taskTray.Icon = Properties.Resources.TaskIconBlue;
                taskTray.Visible = true;
                taskTray.ContextMenuClick += new EventHandler(taskTray_ContextMenuClick);

                if (CommonManager.Instance.NWMode == false)
                {
                    pipeServer = new PipeServer();
                    pipeName += System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
                    pipeEventName += System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
                    pipeServer.StartServer(pipeEventName, pipeName, OutsideCmdCallback, this);

                    cmd.SendRegistGUI((uint)System.Diagnostics.Process.GetCurrentProcess().Id);

                    CommonManager.Instance.DB.ReloadReserveInfo();
                    ReserveData item = new ReserveData();
                    if (CommonManager.Instance.DB.GetNextReserve(ref item) == true)
                    {
                        String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ ");
                        DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond);
                        timeView += endTime.ToString("HH:mm:ss");
                        taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title;
                    }
                    else
                    {
                        taskTray.Text = "次の予約なし";
                    }
                }

                ResetTaskMenu();

                CheckCmdLine();

                if (CommonManager.Instance.NWMode == true)
                {
                    if (Settings.Instance.WakeReconnectNW == false)
                    {
                        return;
                    }

                    if (CommonManager.Instance.NW.ConnectServer(Settings.Instance.NWServerIP, Settings.Instance.NWServerPort, Settings.Instance.NWWaitPort, OutsideCmdCallback, this) == false)
                    {
                        return;
                    }
                    iniConnectNW = true;

                    byte[] binData;
                    if (cmd.SendFileCopy("ChSet5.txt", out binData) == 1)
                    {
                        string filePath = SettingPath.SettingFolderPath;
                        System.IO.Directory.CreateDirectory(filePath);
                        filePath += "\\ChSet5.txt";
                        using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(System.IO.File.Create(filePath)))
                        {
                            w.Write(binData);
                            w.Close();
                        }
                        ChSet5.LoadFile();
                    }

                    CommonManager.Instance.DB.ReloadReserveInfo();
                    ReserveData item = new ReserveData();
                    if (CommonManager.Instance.DB.GetNextReserve(ref item) == true)
                    {
                        String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ ");
                        DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond);
                        timeView += endTime.ToString("HH:mm:ss");
                        taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title;
                    }
                    else
                    {
                        taskTray.Text = "次の予約なし";
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
Exemple #8
0
        public bool GetNextReserve(ref ReserveData info)
        {
            bool ret = false;

            SortedList<String, ReserveData> sortList = new SortedList<String, ReserveData>();
            foreach (ReserveData resInfo in reserveList.Values)
            {
                if (resInfo.RecSetting.RecMode != 5)
                {
                    String key = resInfo.StartTime.ToString("yyyyMMddHHmmss");
                    key += resInfo.ReserveID.ToString("X8");
                    sortList.Add(key, resInfo);
                }
            }

            foreach (ReserveData resInfo in sortList.Values)
            {
                if (resInfo.StartTime > DateTime.Now)
                {
                    info = resInfo;
                    ret = true;
                    break;
                }
            }
            sortList.Clear();
            sortList = null;
            return ret;
        }
Exemple #9
0
 public static void CopyTo(this ReserveData src, ReserveData dest)
 {
     CopyObj.CopyTo(src, dest, CopyData);
 }
 /// <summary>初期値の予約情報をセットする</summary>
 /// <param name="info">[IN] 初期値の予約情報</param>
 public void SetReserveInfo(ReserveData info)
 {
     reserveInfo = info.Clone();
     recSettingView.SetDefSetting(reserveInfo.RecSetting, reserveInfo.IsEpgReserve == false);
 }
Exemple #11
0
        private static List <ReserveData> AutoAddSyncChangeList(IEnumerable <AutoAddData> itemlist, bool SyncAll, List <ReserveData> deleteList = null)
        {
            var syncDict = new Dictionary <uint, ReserveData>();

            foreach (AutoAddData data in itemlist)
            {
                IEnumerable <ReserveData> list = SyncAll == true?
                                                 data.GetReserveList() : data.GetReserveList().Where(info => info.IsAutoAdded == true);

                foreach (ReserveData resinfo in list)
                {
                    if (syncDict.ContainsKey(resinfo.ReserveID) == false)
                    {
                        ReserveData rdata = resinfo.DeepClone();//変更かけるのでコピーする
                        rdata.RecSetting = data.RecSettingInfo.DeepClone();
                        //無効は保持する
                        if (resinfo.RecSetting.RecMode == 5)
                        {
                            rdata.RecSetting.RecMode = 5;
                        }
                        //プログラム予約の場合は名前も追従させる。
                        if (data.IsManual == true && resinfo.IsManual == true)
                        {
                            rdata.Title = data.DataTitle;
                        }
                        //録画タグの保持。
                        if (SyncAll == false && Settings.Instance.SyncResAutoAddChgNewRes == false &&
                            Settings.Instance.SyncResAutoAddChgKeepRecTag == true)
                        {
                            rdata.RecSetting.RecTag = resinfo.RecSetting.RecTag;
                        }
                        syncDict.Add(resinfo.ReserveID, rdata);
                    }
                }
            }

            List <ReserveData> syncList = syncDict.Values.ToList();

            if (deleteList != null)
            {
                List <ReserveData> modList = (SyncAll == true ? syncList : AutoAddSyncModifyReserveList(syncList, itemlist));

                int cMin = Settings.Instance.CautionOnRecChange == true ? Settings.Instance.CautionOnRecMarginMin : 1;
                deleteList.AddRange(modList.FindAll(data => data.IsEnabled == true && data.OnTime(DateTime.UtcNow.AddHours(9).AddMinutes(cMin)) < 0));
                syncList = syncList.Except(deleteList).ToList();
            }

            //無効になっている自動登録からの連動変更で、他の有効な自動登録の予約が変更されないようにする
            if (SyncAll == false)
            {
                //syncListのReserveDataはコピーなのでIDで処理する
                var extList1 = new List <uint>(); //処理対象のうち無効の自動登録の予約一覧
                var extList2 = new List <uint>(); //処理対象のうち有効の自動登録の予約一覧
                foreach (AutoAddData data in itemlist)
                {
                    (data.IsEnabled == false ? extList1 : extList2).AddRange(data.GetReserveList().Where(info => info.IsAutoAdded == true).Select(info => info.ReserveID));
                }
                var extHash = new HashSet <uint>(extList1.Except(extList2));
                syncList = syncList.Where(resinfo => extHash.Contains(resinfo.ReserveID) == false).ToList();
            }

            return(syncList);
        }
Exemple #12
0
        public static void CopyContent2Clipboard(ReserveData resInfo, bool NotToggle = false)
        {
            EpgEventInfo info = resInfo == null ? null : resInfo.ReserveEventInfo();

            CopyContent2Clipboard(info, NotToggle);
        }
Exemple #13
0
        public ChgReserveWindow(ReserveData info = null, int epgInfoOpenMode = 0, RecSettingData setInfo = null)
        {
            InitializeComponent();

            base.SetParam(false, checkBox_windowPinned, checkBox_dataReplace);
            recSettingView.PresetResCompare = true;

            //コマンドの登録
            this.CommandBindings.Add(new CommandBinding(EpgCmds.Cancel, (sender, e) => this.Close()));
            this.CommandBindings.Add(new CommandBinding(EpgCmds.AddInDialog, reserve_add));
            this.CommandBindings.Add(new CommandBinding(EpgCmds.ChangeInDialog, reserve_chg, (sender, e) => e.CanExecute = addMode == AddMode.Change));
            this.CommandBindings.Add(new CommandBinding(EpgCmds.DeleteInDialog, reserve_del, (sender, e) => e.CanExecute = addMode == AddMode.Change));
            this.CommandBindings.Add(new CommandBinding(EpgCmds.BackItem, (sender, e) => MoveViewNextItem(-1), (sender, e) => e.CanExecute  = KeepWin == true));
            this.CommandBindings.Add(new CommandBinding(EpgCmds.NextItem, (sender, e) => MoveViewNextItem(1), (sender, e) => e.CanExecute   = KeepWin == true));
            this.CommandBindings.Add(new CommandBinding(EpgCmds.Search, (sender, e) => MoveViewReserveTarget(), (sender, e) => e.CanExecute = KeepWin == true && DataView is EpgViewBase || DataView is TunerReserveMainView));

            //ボタンの設定
            mBinds.SetCommandToButton(button_cancel, EpgCmds.Cancel);
            mBinds.SetCommandToButton(button_add_reserve, EpgCmds.AddInDialog);
            mBinds.SetCommandToButton(button_chg_reserve, EpgCmds.ChangeInDialog);
            mBinds.SetCommandToButton(button_del_reserve, EpgCmds.DeleteInDialog);
            mBinds.SetCommandToButton(button_up, EpgCmds.BackItem);
            mBinds.SetCommandToButton(button_down, EpgCmds.NextItem);
            mBinds.SetCommandToButton(button_chk, EpgCmds.Search);
            RefreshMenu();

            //録画設定タブ関係の設定
            recSettingView.SelectedPresetChanged += SetReserveTabHeader;
            reserveTabHeader.MouseRightButtonUp  += recSettingView.OpenPresetSelectMenuOnMouseEvent;

            //その他設定
            //深夜時間関係は、comboBoxの表示だけ変更する手もあるが、
            //オプション変更タイミングなどいろいろ面倒なので、実際の値で処理することにする。
            comboBox_service.ItemsSource = ChSet5.ChListSelected;
            comboBox_sh.ItemsSource      = CommonManager.CustomHourList;
            comboBox_eh.ItemsSource      = CommonManager.CustomHourList;
            comboBox_sm.ItemsSource      = Enumerable.Range(0, 60);
            comboBox_em.ItemsSource      = Enumerable.Range(0, 60);
            comboBox_ss.ItemsSource      = Enumerable.Range(0, 60);
            comboBox_es.ItemsSource      = Enumerable.Range(0, 60);
            ViewUtil.Set_ComboBox_LostFocus_SelectItemUInt(stack_start);
            ViewUtil.Set_ComboBox_LostFocus_SelectItemUInt(stack_end);

            if (info == null)
            {
                info = new ReserveData();
                var sTime = CommonUtil.EdcbNow.AddMinutes(5);
                info.StartTime      = sTime.AddSeconds(-sTime.Second);
                info.StartTimeEpg   = info.StartTime;
                info.DurationSecond = 1800;
                info.EventID        = 0xFFFF;
                info.RecSetting     = setInfo ?? Settings.Instance.RecPresetList[0].Data.DeepClone();
                reserveInfo         = info;
            }
            selectedTab = epgInfoOpenMode == 1 ? 0 : 1;
            if (KeepWin == true)
            {
                button_cancel.Content = "閉じる";
                //ステータスバーの設定
                this.statusBar.Status.Visibility = Visibility.Collapsed;
                StatusManager.RegisterStatusbar(this.statusBar, this);
            }
            else
            {
                button_up.Visibility   = Visibility.Collapsed;
                button_down.Visibility = Visibility.Collapsed;
                button_chk.Visibility  = Visibility.Collapsed;
            }
            ChangeData(info);
            initOpen = false;
            CheckMultiReserve();
        }
Exemple #14
0
        public String ConvertReserveText(ReserveData reserveInfo)
        {
            String view    = GetTimeDurationText(true, reserveInfo.StartTime, true, reserveInfo.DurationSecond) + "\r\n";
            String recMode = RecModeList.Length > reserveInfo.RecSetting.RecMode ? RecModeList[reserveInfo.RecSetting.RecMode] : "";
            String tuijyu  = "";

            if (reserveInfo.RecSetting.TuijyuuFlag == 0)
            {
                tuijyu = "しない";
            }
            else if (reserveInfo.RecSetting.TuijyuuFlag == 1)
            {
                tuijyu = "する";
            }
            String pittari = "";

            if (reserveInfo.RecSetting.PittariFlag == 0)
            {
                pittari = "しない";
            }
            else if (reserveInfo.RecSetting.PittariFlag == 1)
            {
                pittari = "する";
            }

            view += reserveInfo.StationName;
            view += " (" + ConvertNetworkNameText(reserveInfo.OriginalNetworkID) + ")" + "\r\n";

            view += reserveInfo.Title + "\r\n\r\n";
            view += "録画モード : " + recMode + "\r\n";
            view += "優先度 : " + reserveInfo.RecSetting.Priority.ToString() + "\r\n";
            view += "追従 : " + tuijyu + "\r\n";
            view += "ぴったり(?) : " + pittari + "\r\n";
            if ((reserveInfo.RecSetting.ServiceMode & 0x01) == 0)
            {
                view += "指定サービス対象データ : デフォルト\r\n";
            }
            else
            {
                view += "指定サービス対象データ : ";
                if ((reserveInfo.RecSetting.ServiceMode & 0x10) > 0)
                {
                    view += "字幕含む ";
                }
                if ((reserveInfo.RecSetting.ServiceMode & 0x20) > 0)
                {
                    view += "データカルーセル含む";
                }
                view += "\r\n";
            }

            view += "録画実行bat : " + reserveInfo.RecSetting.BatFilePath + "\r\n";

            if (reserveInfo.RecSetting.RecFolderList.Count == 0)
            {
                view += "録画フォルダ : デフォルト\r\n";
            }
            else
            {
                view += "録画フォルダ : \r\n";
                foreach (RecFileSetInfo info in reserveInfo.RecSetting.RecFolderList)
                {
                    view += info.RecFolder + " (WritePlugIn:" + info.WritePlugIn + " ファイル名PlugIn:" + info.RecNamePlugIn + ")\r\n";
                }
            }

            if (reserveInfo.RecSetting.UseMargineFlag == 0)
            {
                view += "録画マージン : デフォルト\r\n";
            }
            else
            {
                view += "録画マージン : 開始 " + reserveInfo.RecSetting.StartMargine.ToString() +
                        " 終了 " + reserveInfo.RecSetting.EndMargine.ToString() + "\r\n";
            }

            if (reserveInfo.RecSetting.SuspendMode == 0)
            {
                view += "録画後動作 : デフォルト\r\n";
            }
            else
            {
                view += "録画後動作 : ";
                switch (reserveInfo.RecSetting.SuspendMode)
                {
                case 1:
                    view += "スタンバイ";
                    break;

                case 2:
                    view += "休止";
                    break;

                case 3:
                    view += "シャットダウン";
                    break;

                case 4:
                    view += "何もしない";
                    break;
                }
                if (reserveInfo.RecSetting.RebootFlag == 1)
                {
                    view += " 復帰後再起動する";
                }
                view += "\r\n";
            }
            if (reserveInfo.RecSetting.PartialRecFlag == 0)
            {
                view += "部分受信 : 同時出力なし\r\n";
            }
            else
            {
                view += "部分受信 : 同時出力あり\r\n";
                view += "部分受信 録画フォルダ : \r\n";
                foreach (RecFileSetInfo info in reserveInfo.RecSetting.PartialRecFolder)
                {
                    view += info.RecFolder + " (WritePlugIn:" + info.WritePlugIn + " ファイル名PlugIn:" + info.RecNamePlugIn + ")\r\n";
                }
            }
            if (reserveInfo.RecSetting.ContinueRecFlag == 0)
            {
                view += "連続録画動作 : 分割\r\n";
            }
            else
            {
                view += "連続録画動作 : 同一ファイル出力\r\n";
            }
            if (reserveInfo.RecSetting.TunerID == 0)
            {
                view += "使用チューナー強制指定 : 自動\r\n";
            }
            else
            {
                view += "使用チューナー強制指定 : ID:" + reserveInfo.RecSetting.TunerID.ToString("X8") + "\r\n";
            }

            view += "予約状況 : " + reserveInfo.Comment;
            view += "\r\n\r\n";

            view += "OriginalNetworkID : " + reserveInfo.OriginalNetworkID.ToString() + " (0x" + reserveInfo.OriginalNetworkID.ToString("X4") + ")\r\n";
            view += "TransportStreamID : " + reserveInfo.TransportStreamID.ToString() + " (0x" + reserveInfo.TransportStreamID.ToString("X4") + ")\r\n";
            view += "ServiceID : " + reserveInfo.ServiceID.ToString() + " (0x" + reserveInfo.ServiceID.ToString("X4") + ")\r\n";
            view += "EventID : " + reserveInfo.EventID.ToString() + " (0x" + reserveInfo.EventID.ToString("X4") + ")\r\n";

            return(view);
        }
        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);
            }
        }
        private void button_chg_reserve_Click(object sender, ExecutedRoutedEventArgs e)
        {
            try
            {
                if (CmdExeUtil.IsDisplayKgMessage(e) == true)
                {
                    bool change_proc = false;
                    switch (addMode)
                    {
                    case AddMode.Add:
                        change_proc = (MessageBox.Show("予約を追加します。\r\nよろしいですか?", "予約の確認", MessageBoxButton.OKCancel) == MessageBoxResult.OK);
                        break;

                    case AddMode.Re_Add:
                        change_proc = (MessageBox.Show("この内容で再予約します。\r\nよろしいですか?", "再予約の確認", MessageBoxButton.OKCancel) == MessageBoxResult.OK);
                        break;

                    case AddMode.Change:
                        change_proc = (MessageBox.Show("この予約を変更します。\r\nよろしいですか?", "変更の確認", MessageBoxButton.OKCancel) == MessageBoxResult.OK);
                        break;
                    }
                    if (change_proc == false)
                    {
                        return;
                    }
                }

                if (addMode == AddMode.Change && CheckExistReserveItem() == false)
                {
                    return;
                }

                //ダイアログを閉じないときはreserveInfoを変更しないよう注意する
                if (ReserveMode == UIReserveMode.Program)
                {
                    var resInfo = new ReserveData();
                    if (GetReserveTimeInfo(ref resInfo) == -2)
                    {
                        MessageBox.Show("終了日時が開始日時より前です");
                        return;
                    }

                    //reserveInfo取得前に保存する。サービスや時間が変わったら、個別予約扱いにする。タイトルのみ変更は見ない。
                    bool chgManualMode = !CtrlCmdDefEx.EqualsPg(resInfo, reserveInfo, false, true);

                    GetReserveTimeInfo(ref reserveInfo);
                    if (reserveInfo.EventID != 0xFFFF || chgManualMode == true)
                    {
                        reserveInfo.EventID = 0xFFFF;
                        reserveInfo.Comment = "";
                    }
                    reserveInfo.StartTimeEpg = reserveInfo.StartTime;
                }
                else if (ReserveMode == UIReserveMode.EPGManual)
                {
                    //EPG予約に変える場合、またはEPG予約で別の番組に変わる場合
                    if (eventInfoNew != null)
                    {
                        //基本的にAddReserveEpgWindowと同じ処理内容
                        if (MenuUtil.IsEnableReserveAdd(eventInfoNew) == false)
                        {
                            return;
                        }
                        eventInfoNew.ConvertToReserveData(ref reserveInfo);
                        reserveInfo.Comment = "";
                    }
                    // 自動予約から個別予約に変える場合
                    else if (GetReserveModeFromInfo() == UIReserveMode.EPGAuto)
                    {
                        reserveInfo.Comment = "";
                    }
                }

                reserveInfo.RecSetting = recSettingView.GetRecSetting();

                if (addMode == AddMode.Change)
                {
                    bool ret = MenuUtil.ReserveChange(CommonUtil.ToList(reserveInfo));
                    CommonManager.Instance.StatusNotifySet(ret, "録画予約を変更");
                }
                else
                {
                    bool ret = MenuUtil.ReserveAdd(CommonUtil.ToList(reserveInfo));
                    CommonManager.Instance.StatusNotifySet(ret, "録画予約を追加");
                }

                // EPG自動予約以外になったら戻せないようにしておく
                if (ReserveMode != UIReserveMode.EPGAuto)
                {
                    CanSelectAutoAdd = false;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); }

            DialogResult = true;
        }
Exemple #17
0
        public static void UpdateInfo(uint?srvStatus = null, bool updateTray = true)
        {
            if (srvStatus != null)
            {
                srvState = (uint)srvStatus;
            }
            if (Settings.Instance.ShowTray == false || updateTray == false)
            {
                return;
            }

            var sortList = CommonManager.Instance.DB.ReserveList.Values
                           .Where(info => info.IsEnabled == true && info.IsOver() == false)
                           .OrderBy(info => info.StartTimeActual).ToList();

            bool   isOnPreRec = false;
            string infoText   = IsSrvLost == true ? "[未接続]\r\n(?)" : "";

            infoText += srvState == 2 ? "EPG取得中\r\n" : "";

            if (sortList.Count == 0)
            {
                infoText += "次の予約なし";
            }
            else
            {
                if (sortList[0].IsOnRec() == true)
                {
                    sortList  = sortList.FindAll(info => info.IsOnRec());
                    infoText += "録画中:";
                }
                else
                {
                    var PreRecTime = DateTime.UtcNow.AddHours(9).AddMinutes(Settings.Instance.RecAppWakeTime);
                    isOnPreRec = sortList[0].OnTime(PreRecTime) >= 0;
                    if (isOnPreRec == true)                                                 //録画準備中
                    {
                        sortList  = sortList.FindAll(info => info.OnTime(PreRecTime) >= 0); //あまり意味無い
                        infoText += "録画準備中:";
                    }
                    else if (Settings.Instance.UpdateTaskText == true && sortList[0].OnTime(PreRecTime.AddMinutes(30)) >= 0) //30分以内に録画準備に入るもの
                    {
                        sortList  = sortList.FindAll(info => info.OnTime(PreRecTime.AddMinutes(30)) >= 0);
                        infoText += "まもなく録画:";
                    }
                    else
                    {
                        sortList  = sortList.Take(1).ToList();
                        infoText += "次の予約:";
                    }
                }

                //FindAll()が順次検索、OrderBy()は安定ソートなのでこれでOK
                ReserveData first = sortList.OrderBy(info => info.IsWatchMode).First();
                infoText += first.StationName + " " + new ReserveItem(first).StartTimeShort + " " + first.Title;
                string endText = (sortList.Count() <= 1 ? "" : "\r\n他" + (sortList.Count() - 1).ToString());
                infoText = CommonUtil.LimitLenString(infoText, 63 - endText.Length) + endText;
                if (first.IsWatchMode == true)
                {
                    infoText = infoText.Replace("録画", "視聴");
                }
            }

            taskTray.Text = infoText;

            if (IsSrvLost == true)
            {
                taskTray.IconUri = new Uri("pack://application:,,,/Resources/TaskIconGray.ico");
            }
            else if (srvState == 1)
            {
                taskTray.IconUri = new Uri("pack://application:,,,/Resources/TaskIconRed.ico");
            }
            else if (isOnPreRec == true)
            {
                taskTray.IconUri = new Uri("pack://application:,,,/Resources/TaskIconOrange.ico");
            }
            else if (srvState == 2)
            {
                taskTray.IconUri = new Uri("pack://application:,,,/Resources/TaskIconGreen.ico");
            }
            else
            {
                taskTray.IconUri = new Uri("pack://application:,,,/Resources/EpgTimer_Bon_Vista_blue_rev2.ico");
            }
        }
Exemple #18
0
        protected virtual SearchItem mcs_GetSearchItem()
        {
            ReserveData data = mcs_GetNextReserve();

            return(data == null ? null : new ReserveItem(data));
        }
Exemple #19
0
 public ReserveItem(ReserveData item)
 {
     base.ReserveInfo = item;
 }
Exemple #20
0
 public ReserveItem(ReserveData item)
 {
     ReserveInfo = item;
 }
Exemple #21
0
        public void AddReserveMode(bool addMode)
        {
            if (addMode == true)
            {
                checkBox_program.IsChecked = true;
                checkBox_program.IsEnabled = false;
                recSettingView.SetViewMode(false);

                if (comboBox_service.Items.Count > 0)
                {
                    comboBox_service.SelectedIndex = 0;
                }

                this.Title = "プログラム予約追加";
                checkBox_program.Visibility = System.Windows.Visibility.Hidden;

                DateTime startTime = DateTime.Now.AddMinutes(1);
                datePicker_start.SelectedDate = startTime;
                comboBox_sh.SelectedIndex = startTime.Hour;
                comboBox_sm.SelectedIndex = startTime.Minute;
                comboBox_ss.SelectedIndex = 0;

                DateTime endTime = startTime.AddMinutes(30);
                datePicker_end.SelectedDate = endTime;
                comboBox_eh.SelectedIndex = endTime.Hour;
                comboBox_em.SelectedIndex = endTime.Minute;
                comboBox_es.SelectedIndex = 0;

                button_chg_reserve.Content = "予約";

                button_del_reserve.Visibility = System.Windows.Visibility.Hidden;

                manualAddMode = true;
                reserveInfo = new ReserveData();
            }
            else
            {
                checkBox_program.IsChecked = false;

                this.Title = "予約変更";
                checkBox_program.Visibility = System.Windows.Visibility.Visible;

                button_chg_reserve.Content = "変更";

                button_del_reserve.Visibility = System.Windows.Visibility.Visible;

                manualAddMode = false;

            }
        }
        /// <summary>
        /// 右ボタンクリック
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="cursorPos"></param>
        void tunerReserveView_RightClick(object sender, Point cursorPos)
        {
            try
            {
                //右クリック表示メニューの作成
                clickPos = cursorPos;
                ReserveData reserve = new ReserveData();
                if (GetReserveItem(cursorPos, ref reserve) == false)
                {
                    return;
                }
                ContextMenu menu = new ContextMenu();

                Separator separate2   = new Separator();
                MenuItem  menuItemChg = new MenuItem();
                menuItemChg.Header = "予約変更";
                MenuItem menuItemChgDlg = new MenuItem();
                menuItemChgDlg.Header = "ダイアログ表示";
                menuItemChgDlg.Click += new RoutedEventHandler(cm_chg_Click);

                menuItemChg.Items.Add(menuItemChgDlg);
                menuItemChg.Items.Add(separate2);

                MenuItem menuItemChgRecMode = new MenuItem();
                menuItemChgRecMode.Header = "録画モード";

                MenuItem menuItemChgRecMode0 = new MenuItem();
                menuItemChgRecMode0.Header      = "全サービス";
                menuItemChgRecMode0.DataContext = 0;
                menuItemChgRecMode0.Click      += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode1 = new MenuItem();
                menuItemChgRecMode1.Header      = "指定サービス";
                menuItemChgRecMode1.DataContext = 1;
                menuItemChgRecMode1.Click      += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode2 = new MenuItem();
                menuItemChgRecMode2.Header      = "全サービス(デコード処理なし)";
                menuItemChgRecMode2.DataContext = 2;
                menuItemChgRecMode2.Click      += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode3 = new MenuItem();
                menuItemChgRecMode3.Header      = "指定サービス(デコード処理なし)";
                menuItemChgRecMode3.DataContext = 3;
                menuItemChgRecMode3.Click      += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode4 = new MenuItem();
                menuItemChgRecMode4.Header      = "視聴";
                menuItemChgRecMode4.DataContext = 4;
                menuItemChgRecMode4.Click      += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode5 = new MenuItem();
                menuItemChgRecMode5.Header      = "無効";
                menuItemChgRecMode5.DataContext = 5;
                menuItemChgRecMode5.Click      += new RoutedEventHandler(cm_chg_recmode_Click);

                menuItemChgRecMode.Items.Add(menuItemChgRecMode0);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode1);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode2);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode3);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode4);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode5);

                menuItemChg.Items.Add(menuItemChgRecMode);

                MenuItem menuItemChgRecPri = new MenuItem();
                menuItemChgRecPri.Header = "優先度";

                MenuItem menuItemChgRecPri1 = new MenuItem();
                menuItemChgRecPri1.Header      = "1";
                menuItemChgRecPri1.DataContext = 1;
                menuItemChgRecPri1.Click      += new RoutedEventHandler(cm_chg_priority_Click);
                MenuItem menuItemChgRecPri2 = new MenuItem();
                menuItemChgRecPri2.Header      = "2";
                menuItemChgRecPri2.DataContext = 2;
                menuItemChgRecPri2.Click      += new RoutedEventHandler(cm_chg_priority_Click);
                MenuItem menuItemChgRecPri3 = new MenuItem();
                menuItemChgRecPri3.Header      = "3";
                menuItemChgRecPri3.DataContext = 3;
                menuItemChgRecPri3.Click      += new RoutedEventHandler(cm_chg_priority_Click);
                MenuItem menuItemChgRecPri4 = new MenuItem();
                menuItemChgRecPri4.Header      = "4";
                menuItemChgRecPri4.DataContext = 4;
                menuItemChgRecPri4.Click      += new RoutedEventHandler(cm_chg_priority_Click);
                MenuItem menuItemChgRecPri5 = new MenuItem();
                menuItemChgRecPri5.Header      = "5";
                menuItemChgRecPri5.DataContext = 5;
                menuItemChgRecPri5.Click      += new RoutedEventHandler(cm_chg_priority_Click);

                menuItemChgRecPri.Items.Add(menuItemChgRecPri1);
                menuItemChgRecPri.Items.Add(menuItemChgRecPri2);
                menuItemChgRecPri.Items.Add(menuItemChgRecPri3);
                menuItemChgRecPri.Items.Add(menuItemChgRecPri4);
                menuItemChgRecPri.Items.Add(menuItemChgRecPri5);

                menuItemChg.Items.Add(menuItemChgRecPri);

                MenuItem menuItemDel = new MenuItem();
                menuItemDel.Header = "予約削除";
                menuItemDel.Click += new RoutedEventHandler(cm_del_Click);

                MenuItem menuItemAutoAdd = new MenuItem();
                menuItemAutoAdd.Header = "自動予約登録";
                menuItemAutoAdd.Click += new RoutedEventHandler(cm_autoadd_Click);
                MenuItem menuItemTimeshift = new MenuItem();
                menuItemTimeshift.Header = "追っかけ再生";
                menuItemTimeshift.Click += new RoutedEventHandler(cm_timeShiftPlay_Click);


                menuItemChg.IsEnabled       = true;
                menuItemDel.IsEnabled       = true;
                menuItemAutoAdd.IsEnabled   = true;
                menuItemTimeshift.IsEnabled = true;

                menu.Items.Add(menuItemChg);
                menu.Items.Add(menuItemDel);
                menu.Items.Add(menuItemAutoAdd);
                menu.Items.Add(menuItemTimeshift);
                menu.IsOpen = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
Exemple #23
0
        private int OutsideCmdCallback(object pParam, CMD_STREAM pCmdParam, ref CMD_STREAM pResParam)
        {
            System.Diagnostics.Trace.WriteLine((CtrlCmd)pCmdParam.uiParam);
            switch ((CtrlCmd)pCmdParam.uiParam)
            {
                case CtrlCmd.CMD_TIMER_GUI_SHOW_DLG:
                    {
                        pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS;
                        this.Visibility = System.Windows.Visibility.Visible;
                    }
                    break;
                case CtrlCmd.CMD_TIMER_GUI_UPDATE_RESERVE:
                    {
                        pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS;
                        if (Dispatcher.CheckAccess() == true)
                        {
                            CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo);
                            CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo);
                            CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo);
                            CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo);
                            reserveView.UpdateReserveData();
                            epgView.UpdateReserveData();
                            tunerReserveView.UpdateReserveData();
                            autoAddView.UpdateAutoAddInfo();
                            recInfoView.UpdateInfo();

                            CommonManager.Instance.DB.ReloadReserveInfo();
                            ReserveData item = new ReserveData();
                            if (CommonManager.Instance.DB.GetNextReserve(ref item) == true)
                            {
                                String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ ");
                                DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond);
                                timeView += endTime.ToString("HH:mm:ss");
                                taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title;
                            }
                            else
                            {
                                taskTray.Text = "次の予約なし";
                            }
                        }
                        else
                        {
                            Dispatcher.BeginInvoke(new Action(() =>
                            {
                                CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo);
                                CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo);
                                CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo);
                                CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo);
                                reserveView.UpdateReserveData();
                                epgView.UpdateReserveData();
                                tunerReserveView.UpdateReserveData();
                                autoAddView.UpdateAutoAddInfo();
                                recInfoView.UpdateInfo();

                                CommonManager.Instance.DB.ReloadReserveInfo();
                                ReserveData item = new ReserveData();
                                if (CommonManager.Instance.DB.GetNextReserve(ref item) == true)
                                {
                                    String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ ");
                                    DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond);
                                    timeView += endTime.ToString("HH:mm:ss");
                                    taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title;
                                }
                                else
                                {
                                    taskTray.Text = "次の予約なし";
                                }

                            }));
                        }
                    }
                    break;
                case CtrlCmd.CMD_TIMER_GUI_UPDATE_EPGDATA:
                    {
                        pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS;
                        if (Dispatcher.CheckAccess() == true)
                        {
                            CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData);
                            epgView.UpdateEpgData();
                        }
                        else
                        {
                            Dispatcher.BeginInvoke(new Action(() =>
                            {
                                CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData);
                                epgView.UpdateEpgData();
                            }));
                        }
                    }
                    break;
                case CtrlCmd.CMD_TIMER_GUI_VIEW_EXECUTE:
                    {
                        pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS;
                        String exeCmd = "";
                        CmdStreamUtil.ReadStreamData(ref exeCmd, pCmdParam);
                        try
                        {
                            string[] cmd = exeCmd.Split('\"');
                            System.Diagnostics.Process process;
                            if (cmd.Length >= 3)
                            {
                                process = System.Diagnostics.Process.Start(cmd[1], cmd[2]);
                            }
                            else if (cmd.Length >= 2)
                            {
                                process = System.Diagnostics.Process.Start(cmd[1]);
                            }
                            else
                            {
                                process = System.Diagnostics.Process.Start(cmd[0]);
                            }
                            CmdStreamUtil.CreateStreamData(process.Id, ref pResParam);
                        }
                        catch
                        {
                        }
                    }
                    break;
                case CtrlCmd.CMD_TIMER_GUI_QUERY_SUSPEND:
                    {
                        pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS;

                        UInt16 param = 0;
                        CmdStreamUtil.ReadStreamData(ref param, pCmdParam);

                        ///////////////////////////////////////////紅////////////////////////////////////
                        ParameterizedThreadStart ts = new ParameterizedThreadStart(SuspendThread);
                        Thread thread = new Thread(ts);
                        thread.Start(param);
                        /////////////////////////////////////////////////////////////////////////////////////

                        /*Byte reboot = (Byte)((param & 0xFF00) >> 8);
                        Byte suspendMode = (Byte)(param & 0x00FF);

                        Dispatcher.BeginInvoke(new Action(() =>
                        {
                            SuspendCheckWindow dlg = new SuspendCheckWindow();
                            dlg.SetMode(0, suspendMode);
                            if (dlg.ShowDialog() != true)
                            {
                                cmd.SendSuspend(param);
                            }
                        }));*/
                    }
                    break;
                case CtrlCmd.CMD_TIMER_GUI_QUERY_REBOOT:
                    {
                        pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS;

                        UInt16 param = 0;
                        CmdStreamUtil.ReadStreamData(ref param, pCmdParam);

                        Byte reboot = (Byte)((param & 0xFF00) >> 8);
                        Byte suspendMode = (Byte)(param & 0x00FF);

                        Dispatcher.BeginInvoke(new Action(() =>
                        {
                            SuspendCheckWindow dlg = new SuspendCheckWindow();
                            dlg.SetMode(reboot, suspendMode);
                            if (dlg.ShowDialog() != true)
                            {
                                cmd.SendReboot();
                            }
                        }));
                    }
                    break;
                case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_CHG:
                    {
                        pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS;
                        UInt16 status = 0;
                        CmdStreamUtil.ReadStreamData(ref status, pCmdParam);

                        if (Dispatcher.CheckAccess() == true)
                        {
                            if (status == 1)
                            {
                                taskTray.Icon = Properties.Resources.TaskIconRed;
                            }
                            else if (status == 2)
                            {
                                taskTray.Icon = Properties.Resources.TaskIconGreen;
                            }
                            else
                            {
                                taskTray.Icon = Properties.Resources.TaskIconBlue;
                            }
                        }
                        else
                        {
                            Dispatcher.BeginInvoke(new Action(() =>
                            {
                                if (status == 1)
                                {
                                    taskTray.Icon = Properties.Resources.TaskIconRed;
                                }
                                else if (status == 2)
                                {
                                    taskTray.Icon = Properties.Resources.TaskIconGreen;
                                }
                                else
                                {
                                    taskTray.Icon = Properties.Resources.TaskIconBlue;
                                }
                            }));
                        }
                    }
                    break;
                case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2:
                    {
                        pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS;

                        NotifySrvInfo status = new NotifySrvInfo();
                        CmdStreamUtil.ReadStreamData(ref status, pCmdParam);
                        if (Dispatcher.CheckAccess() == true)
                        {
                            NotifyStatus(status);
                        }
                        else
                        {
                            Dispatcher.BeginInvoke(new Action(() =>
                            {
                                NotifyStatus(status);
                            }));
                        }
                    }
                    break;
                default:
                    pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT;
                    break;
            }
            return 0;
        }
        /// <summary>
        /// 予約情報の再描画
        /// </summary>
        private void ReloadReserveViewItem()
        {
            tunerReserveView.ClearInfo();
            tunerReserveTimeView.ClearInfo();
            tunerReserveNameView.ClearInfo();
            timeList.Clear();
            tunerList.Clear();
            reserveList.Clear();
            try
            {
                double leftPos = 0;
                for (int i = 0; i < CommonManager.Instance.DB.TunerReserveList.Count; i++)
                {
                    double            width     = 150;
                    TunerReserveInfo  info      = CommonManager.Instance.DB.TunerReserveList.Values.ElementAt(i);
                    TunerNameViewItem tunerInfo = new TunerNameViewItem(info, width);
                    tunerList.Add(tunerInfo);

                    List <ReserveViewItem> tunerAddList = new List <ReserveViewItem>();
                    for (int j = 0; j < info.reserveList.Count; j++)
                    {
                        UInt32 reserveID = (UInt32)info.reserveList[j];
                        if (CommonManager.Instance.DB.ReserveList.ContainsKey(reserveID) == false)
                        {
                            continue;
                        }
                        ReserveData     reserveInfo = CommonManager.Instance.DB.ReserveList[reserveID];
                        ReserveViewItem viewItem    = new ReserveViewItem(CommonManager.Instance.DB.ReserveList[reserveID]);

                        Int32    duration  = (Int32)reserveInfo.DurationSecond;
                        DateTime startTime = reserveInfo.StartTime;
                        if (reserveInfo.RecSetting.UseMargineFlag == 1)
                        {
                            if (reserveInfo.RecSetting.StartMargine < 0)
                            {
                                startTime = reserveInfo.StartTime.AddSeconds(reserveInfo.RecSetting.StartMargine * -1);
                                duration += reserveInfo.RecSetting.StartMargine;
                            }
                            if (reserveInfo.RecSetting.EndMargine < 0)
                            {
                                duration += reserveInfo.RecSetting.EndMargine;
                            }
                        }
                        DateTime EndTime;
                        EndTime = startTime.AddSeconds(duration);
                        //if ((duration / 60) < Settings.Instance.MinHeight)
                        //{
                        //    duration = (int)Settings.Instance.MinHeight;
                        //}

                        viewItem.Height = Math.Floor((duration / 60) * Settings.Instance.MinHeight);
                        if (viewItem.Height < Settings.Instance.MinHeight)
                        {
                            viewItem.Height = Settings.Instance.MinHeight;
                        }
                        viewItem.Width   = 150;
                        viewItem.LeftPos = leftPos;

                        foreach (ReserveViewItem addItem in tunerAddList)
                        {
                            ReserveData addInfo      = addItem.ReserveInfo;
                            Int32       durationAdd  = (Int32)addInfo.DurationSecond;
                            DateTime    startTimeAdd = addInfo.StartTime;
                            if (addInfo.RecSetting.UseMargineFlag == 1)
                            {
                                if (addInfo.RecSetting.StartMargine < 0)
                                {
                                    startTimeAdd = addInfo.StartTime.AddSeconds(addInfo.RecSetting.StartMargine * -1);
                                    durationAdd += addInfo.RecSetting.StartMargine;
                                }
                                if (addInfo.RecSetting.EndMargine < 0)
                                {
                                    durationAdd += addInfo.RecSetting.EndMargine;
                                }
                            }
                            DateTime endTimeAdd;
                            endTimeAdd = startTimeAdd.AddSeconds(durationAdd);

                            if ((startTimeAdd <= startTime && startTime < endTimeAdd) ||
                                (startTimeAdd < EndTime && EndTime <= endTimeAdd) ||
                                (startTime <= startTimeAdd && startTimeAdd < EndTime) ||
                                (startTime < endTimeAdd && endTimeAdd <= EndTime)
                                )
                            {
                                if (addItem.LeftPos >= viewItem.LeftPos)
                                {
                                    viewItem.LeftPos += 150;
                                    if (viewItem.LeftPos - leftPos >= width)
                                    {
                                        width += 150;
                                    }
                                }
                            }
                        }

                        reserveList.Add(viewItem);
                        tunerAddList.Add(viewItem);

                        //必要時間リストと時間と番組の関連づけ

                        DateTime chkStartTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0);
                        while (chkStartTime <= EndTime)
                        {
                            if (timeList.ContainsKey(chkStartTime) == false)
                            {
                                timeList.Add(chkStartTime, new TimePosInfo(chkStartTime, 0));
                            }
                            TimePosInfo timeInfo = timeList[chkStartTime];
                            timeInfo.ReserveList.Add(viewItem);
                            chkStartTime = chkStartTime.AddHours(1);
                        }
                    }
                    tunerInfo.Width = width;
                    leftPos        += width;
                }

                //表示位置設定
                foreach (ReserveViewItem item in reserveList)
                {
                    DateTime startTime = item.ReserveInfo.StartTime;
                    if (item.ReserveInfo.RecSetting.UseMargineFlag == 1)
                    {
                        if (item.ReserveInfo.RecSetting.StartMargine < 0)
                        {
                            startTime = item.ReserveInfo.StartTime.AddSeconds(item.ReserveInfo.RecSetting.StartMargine * -1);
                        }
                    }

                    DateTime chkStartTime = new DateTime(startTime.Year,
                                                         startTime.Month,
                                                         startTime.Day,
                                                         startTime.Hour,
                                                         0,
                                                         0);
                    if (timeList.ContainsKey(chkStartTime) == true)
                    {
                        int index = timeList.IndexOfKey(chkStartTime);
                        item.TopPos = (index * 60 + (startTime - chkStartTime).TotalMinutes) * Settings.Instance.MinHeight;
                    }
                }

                double topPos = 0;
                foreach (TimePosInfo time in timeList.Values)
                {
                    time.TopPos = topPos;
                    topPos     += 60 * Settings.Instance.MinHeight;
                }

                tunerReserveTimeView.SetTime(timeList, true);
                tunerReserveNameView.SetTunerInfo(tunerList);
                tunerReserveView.SetReserveList(reserveList,
                                                leftPos,
                                                timeList.Count * 60 * Settings.Instance.MinHeight);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
        /// <summary>
        /// 右クリックメニュー 予約モード変更イベント呼び出し
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cm_chg_recmode_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (sender.GetType() != typeof(MenuItem))
                {
                    return;
                }

                ReserveData reserve = new ReserveData();
                if (GetReserveItem(clickPos, ref reserve) == false)
                {
                    return;
                }
                MenuItem item = sender as MenuItem;
                Int32 val = (Int32)item.DataContext;
                reserve.RecSetting.RecMode = (byte)val;
                List<ReserveData> list = new List<ReserveData>();
                list.Add(reserve);
                ErrCode err = (ErrCode)cmd.SendChgReserve(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("予約変更でエラーが発生しました。");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
Exemple #26
0
        /// <summary>
        /// 右ボタンクリック
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="cursorPos"></param>
        void tunerReserveView_RightClick(object sender, Point cursorPos)
        {
            try
            {
                //右クリック表示メニューの作成
                clickPos = cursorPos;
                ReserveData reserve = GetReserveItem(cursorPos);
                if (reserve == null)
                {
                    return;
                }
                ContextMenu menu = new ContextMenu();

                MenuItem menuItemChg = new MenuItem();
                menuItemChg.Header = "予約変更 (_C)";
                MenuItem menuItemChgDlg = new MenuItem();
                menuItemChgDlg.Header = "ダイアログ表示 (_X)";
                menuItemChgDlg.Click += new RoutedEventHandler(cm_chg_Click);

                menuItemChg.Items.Add(menuItemChgDlg);
                menuItemChg.Items.Add(new Separator());

                for (byte i = 0; i < CommonManager.Instance.RecModeList.Length; i++)
                {
                    MenuItem menuItem = new MenuItem();
                    menuItem.Header    = CommonManager.Instance.RecModeList[i] + " (_" + i + ")";
                    menuItem.Tag       = i;
                    menuItem.Click    += new RoutedEventHandler(cm_chg_recmode_Click);
                    menuItem.IsChecked = i == reserve.RecSetting.RecMode;
                    menuItemChg.Items.Add(menuItem);
                }
                menuItemChg.Items.Add(new Separator());

                MenuItem menuItemChgRecPri = new MenuItem();
                menuItemChgRecPri.Header = "優先度 " + reserve.RecSetting.Priority + " (_E)";

                for (byte i = 1; i <= 5; i++)
                {
                    MenuItem menuItem = new MenuItem();
                    menuItem.Header    = "_" + i;
                    menuItem.Tag       = i;
                    menuItem.Click    += new RoutedEventHandler(cm_chg_priority_Click);
                    menuItem.IsChecked = i == reserve.RecSetting.Priority;
                    menuItemChgRecPri.Items.Add(menuItem);
                }
                menuItemChg.Items.Add(menuItemChgRecPri);

                MenuItem menuItemDel = new MenuItem();
                menuItemDel.Header = "予約削除";
                menuItemDel.Click += new RoutedEventHandler(cm_del_Click);

                MenuItem menuItemAutoAdd = new MenuItem();
                menuItemAutoAdd.Header = "自動予約登録";
                menuItemAutoAdd.Click += new RoutedEventHandler(cm_autoadd_Click);
                MenuItem menuItemTimeshift = new MenuItem();
                menuItemTimeshift.Header = "追っかけ再生 (_P)";
                menuItemTimeshift.Click += new RoutedEventHandler(cm_timeShiftPlay_Click);

                menu.Items.Add(menuItemChg);
                menu.Items.Add(menuItemDel);
                menu.Items.Add(menuItemAutoAdd);
                menu.Items.Add(menuItemTimeshift);
                menu.IsOpen = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
 /// <summary>
 /// 左ボタンダブルクリックイベント呼び出し
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="cursorPos"></param>
 void tunerReserveView_LeftDoubleClick(object sender, Point cursorPos)
 {
     try
     {
         //まず予約情報あるかチェック
         ReserveData reserve = new ReserveData();
         if (GetReserveItem(cursorPos, ref reserve) == true)
         {
             //予約変更ダイアログ表示
             ChangeReserve(reserve);
             return;
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
     }
 }
Exemple #28
0
        /// <summary>
        /// 予約情報の再描画
        /// </summary>
        private void ReloadReserveViewItem()
        {
            tunerReserveView.ClearInfo();
            tunerReserveTimeView.ClearInfo();
            tunerReserveNameView.ClearInfo();
            var timeList  = new List <DateTime>();
            var tunerList = new List <TunerNameViewItem>();

            reserveList.Clear();
            try
            {
                double leftPos = 0;
                foreach (TunerReserveInfo info in CommonManager.Instance.DB.TunerReserveList.Values)
                {
                    double width     = 150;
                    int    addOffset = reserveList.Count();
                    foreach (uint reserveID in info.reserveList)
                    {
                        ReserveData reserveInfo;
                        if (CommonManager.Instance.DB.ReserveList.TryGetValue(reserveID, out reserveInfo) == false)
                        {
                            continue;
                        }

                        DateTime startTime = reserveInfo.StartTime;
                        DateTime endTime   = startTime.AddSeconds(reserveInfo.DurationSecond);
                        if (reserveInfo.RecSetting.UseMargineFlag == 1)
                        {
                            if (reserveInfo.RecSetting.StartMargine < 0)
                            {
                                startTime = startTime.AddSeconds(-reserveInfo.RecSetting.StartMargine);
                            }
                            if (reserveInfo.RecSetting.EndMargine < 0)
                            {
                                endTime = endTime.AddSeconds(reserveInfo.RecSetting.EndMargine);
                            }
                        }

                        var viewItem = new ReserveViewItem(reserveInfo);
                        viewItem.Height = Math.Floor((endTime - startTime).TotalMinutes * Settings.Instance.EpgSettingList[0].MinHeight);
                        if (viewItem.Height < Settings.Instance.EpgSettingList[0].MinHeight)
                        {
                            viewItem.Height = Settings.Instance.EpgSettingList[0].MinHeight;
                        }
                        viewItem.Width   = 150;
                        viewItem.LeftPos = leftPos;

                        for (int i = addOffset; i < reserveList.Count; i++)
                        {
                            ReserveData addInfo      = reserveList[i].ReserveInfo;
                            DateTime    startTimeAdd = addInfo.StartTime;
                            DateTime    endTimeAdd   = startTimeAdd.AddSeconds(addInfo.DurationSecond);
                            if (addInfo.RecSetting.UseMargineFlag == 1)
                            {
                                if (addInfo.RecSetting.StartMargine < 0)
                                {
                                    startTimeAdd = startTimeAdd.AddSeconds(-addInfo.RecSetting.StartMargine);
                                }
                                if (addInfo.RecSetting.EndMargine < 0)
                                {
                                    endTimeAdd = endTimeAdd.AddSeconds(addInfo.RecSetting.EndMargine);
                                }
                            }

                            if ((startTimeAdd <= startTime && startTime < endTimeAdd) ||
                                (startTimeAdd < endTime && endTime <= endTimeAdd) ||
                                (startTime <= startTimeAdd && startTimeAdd < endTime) ||
                                (startTime < endTimeAdd && endTimeAdd <= endTime)
                                )
                            {
                                if (reserveList[i].LeftPos == viewItem.LeftPos)
                                {
                                    //追加済みのものと重なるので移動して再チェック
                                    i = addOffset - 1;
                                    viewItem.LeftPos += 150;
                                    width             = Math.Max(width, viewItem.LeftPos + viewItem.Width - leftPos);
                                }
                            }
                        }

                        reserveList.Add(viewItem);

                        //必要時間リストの構築

                        DateTime chkStartTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0);
                        while (chkStartTime <= endTime)
                        {
                            int index = timeList.BinarySearch(chkStartTime);
                            if (index < 0)
                            {
                                timeList.Insert(~index, chkStartTime);
                            }
                            chkStartTime = chkStartTime.AddHours(1);
                        }
                    }
                    tunerList.Add(new TunerNameViewItem(info, width));
                    leftPos += width;
                }

                //表示位置設定
                foreach (ReserveViewItem item in reserveList)
                {
                    DateTime startTime = item.ReserveInfo.StartTime;
                    if (item.ReserveInfo.RecSetting.UseMargineFlag == 1)
                    {
                        if (item.ReserveInfo.RecSetting.StartMargine < 0)
                        {
                            startTime = startTime.AddSeconds(-item.ReserveInfo.RecSetting.StartMargine);
                        }
                    }

                    DateTime chkStartTime = new DateTime(startTime.Year,
                                                         startTime.Month,
                                                         startTime.Day,
                                                         startTime.Hour,
                                                         0,
                                                         0);
                    int index = timeList.BinarySearch(chkStartTime);
                    if (index >= 0)
                    {
                        item.TopPos = (index * 60 + (startTime - chkStartTime).TotalMinutes) * Settings.Instance.EpgSettingList[0].MinHeight;
                    }
                }

                tunerReserveTimeView.SetTime(timeList, true);
                tunerReserveNameView.SetTunerInfo(tunerList);
                tunerReserveView.SetReserveList(reserveList,
                                                leftPos,
                                                timeList.Count * 60 * Settings.Instance.EpgSettingList[0].MinHeight);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Exemple #29
0
 private void ChangeReserve(ReserveData reserveInfo)
 {
     try
     {
         ChgReserveWindow dlg = new ChgReserveWindow();
         dlg.Owner = (Window)PresentationSource.FromVisual(this).RootVisual;
         dlg.SetReserveInfo(reserveInfo);
         if (dlg.ShowDialog() == true)
         {
             CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo);
             CommonManager.Instance.DB.ReloadReserveInfo();
             SearchPg();
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
     }
 }
Exemple #30
0
 public ReserveViewItem(ReserveData info)
 {
     TitleDrawErr = false;
     ReserveInfo  = info;
 }
Exemple #31
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            if (addMode == AddMode.Add || reserveInfo == null)
            {
                addMode = AddMode.Add;
                reserveInfo = null;
                ReserveMode = UIReserveMode.Program;
                CanSelectAutoAdd = false;

                if (comboBox_service.Items.Count > 0)
                {
                    comboBox_service.SelectedIndex = 0;
                }

                SetAddMode(AddMode.Add);
                SetReserveTime(DateTime.Now.AddMinutes(1), DateTime.Now.AddMinutes(31));
                reserveInfo = new ReserveData();
            }
            else
            {
                ReserveMode = GetReserveModeFromInfo();
                CanSelectAutoAdd = (ReserveMode == UIReserveMode.EPGAuto);

                SetReserveTimeInfo(reserveInfo);
            }

            ResetProgramContent();                  //番組詳細を初期表示
            tabControl.SelectedIndex = openMode;

            initialized = true;
        }
        /// <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);
            }
        }
Exemple #33
0
 public ReserveItem(ReserveData item)
 {
     base.ReserveInfo = item;
 }
Exemple #34
0
 public TunerReserveViewItem(ReserveData info) : base(info) { }
Exemple #35
0
 public static ReserveData Clone(this ReserveData src)
 {
     return(CopyObj.Clone(src, CopyData));
 }
Exemple #36
0
        public EpgEventInfo GetReserveEventList(ReserveData master, bool isSrv = true)
        {
            if (master == null || master.ReserveID == 0)
            {
                return(null);
            }

            if (reserveEventList == null)
            {
                if (IsEpgLoaded || Settings.Instance.NoReserveEventList == true)
                {
                    reserveEventList = ReserveList.Values.ToDictionary(rs => rs.ReserveID,
                                                                       rs => rs.IsEpgReserve ? MenuUtil.GetPgInfoUid(rs.CurrentPgUID()) : MenuUtil.GetPgInfoLikeThat(rs));
                }
                else
                {
                    reserveEventList      = new Dictionary <uint, EpgEventInfo>();
                    reserveEventListCache = reserveEventListCache ?? new Dictionary <ulong, EpgEventInfo>();

                    //要求はしないが、有効なデータが既に存在していればキーワード予約の追加データを参照する。
                    bool useAppend = epgAutoAddAppendList != null && updateEpgAutoAddAppend == false &&
                                     updateEpgAutoAddAppendReserveInfo == false;

                    //プログラム予約はここで探しても精度低いので諦める
                    var trgList = new List <ReserveData>();
                    foreach (ReserveData data in ReserveList.Values.Where(r => r.IsEpgReserve))
                    {
                        EpgEventInfo info = null;
                        ulong        key  = data.Create64PgKey();
                        if (useAppend == true)
                        {
                            List <EpgAutoAddData> epgAutoList = data.GetEpgAutoAddList();
                            if (epgAutoList.Count != 0)
                            {
                                SearchItem item = epgAutoList[0].GetSearchList()
                                                  .Find(sI => sI.IsReserved == true && sI.ReserveInfo.ReserveID == data.ReserveID);
                                if (item != null)
                                {
                                    info = item.EventInfo;
                                    reserveEventListCache[key] = info;
                                }
                            }
                        }
                        if (info != null || reserveEventListCache.TryGetValue(key, out info))
                        {
                            reserveEventList[data.ReserveID] = info;
                        }
                        else
                        {
                            trgList.Add(data);
                        }
                    }

                    if (isSrv == true && trgList.Any())
                    {
                        var pgIDset = trgList.ToLookup(data => data.Create64PgKey(), data => data.ReserveID);
                        var keys    = pgIDset.Select(lu => lu.Key).ToList();
                        var list    = new List <EpgEventInfo>();
                        try { CommonManager.CreateSrvCtrl().SendGetPgInfoList(keys, ref list); } catch { }

                        foreach (EpgEventInfo info in list)
                        {
                            ulong key = info.Create64PgKey();
                            if (pgIDset.Contains(key) == true)
                            {
                                foreach (uint rID in pgIDset[key])
                                {
                                    reserveEventList[rID] = info;
                                }
                                reserveEventListCache[key] = info;
                            }
                        }
                    }
                }
            }

            EpgEventInfo retv;

            reserveEventList.TryGetValue(master.ReserveID, out retv);
            return(retv);
        }
Exemple #37
0
        private void recmode_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                MenuItem           menuItem = sender as MenuItem;
                List <ReserveData> list     = new List <ReserveData>();
                foreach (ReserveItem item in listView_reserve.SelectedItems)
                {
                    ReserveData reserveInfo = item.ReserveInfo;

                    byte recMode = 0;
                    if (menuItem.Name.CompareTo("recmode_all") == 0)
                    {
                        recMode = 0;
                    }
                    else if (menuItem.Name.CompareTo("recmode_only") == 0)
                    {
                        recMode = 1;
                    }
                    else if (menuItem.Name.CompareTo("recmode_all_nodec") == 0)
                    {
                        recMode = 2;
                    }
                    else if (menuItem.Name.CompareTo("recmode_only_nodec") == 0)
                    {
                        recMode = 3;
                    }
                    else if (menuItem.Name.CompareTo("recmode_view") == 0)
                    {
                        recMode = 4;
                    }
                    else if (menuItem.Name.CompareTo("recmode_no") == 0)
                    {
                        recMode = 5;
                    }
                    else
                    {
                        return;
                    }
                    reserveInfo.RecSetting.RecMode = recMode;

                    list.Add(reserveInfo);
                }
                if (list.Count > 0)
                {
                    ErrCode err = (ErrCode)cmd.SendChgReserve(list);
                    if (err == ErrCode.CMD_ERR_CONNECT)
                    {
                        MessageBox.Show("サーバー または EpgTimerSrv に接続できませんでした。");
                    }
                    if (err == ErrCode.CMD_ERR_TIMEOUT)
                    {
                        MessageBox.Show("EpgTimerSrvとの接続にタイムアウトしました。032");
                    }
                    if (err != ErrCode.CMD_SUCCESS)
                    {
                        MessageBox.Show("チューナー一覧の取得でエラーが発生しました。");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
 public ReserveViewItem(ReserveData info)
 {
     ReserveInfo = info;
 }
Exemple #39
0
        public String ConvertReserveText(ReserveData reserveInfo)
        {
            String view = "";
            view = reserveInfo.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ ");
            DateTime endTime = reserveInfo.StartTime + TimeSpan.FromSeconds(reserveInfo.DurationSecond);
            view += endTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss") + "\r\n";

            String recMode = "";
            switch (reserveInfo.RecSetting.RecMode)
            {
                case 0:
                    recMode = "全サービス";
                    break;
                case 1:
                    recMode = "指定サービス";
                    break;
                case 2:
                    recMode = "全サービス(デコード処理なし)";
                    break;
                case 3:
                    recMode = "指定サービス(デコード処理なし)";
                    break;
                case 4:
                    recMode = "視聴";
                    break;
                case 5:
                    recMode = "無効";
                    break;
                default:
                    break;
            } 
            String tuijyu = "";
            if (reserveInfo.RecSetting.TuijyuuFlag == 0)
            {
                tuijyu = "しない";
            }
            else if (reserveInfo.RecSetting.TuijyuuFlag == 1)
            {
                tuijyu = "する";
            }
            String pittari = "";
            if (reserveInfo.RecSetting.PittariFlag == 0)
            {
                pittari = "しない";
            }
            else if (reserveInfo.RecSetting.PittariFlag == 1)
            {
                pittari = "する";
            }

            view += reserveInfo.StationName;
            if (0x7880 <= reserveInfo.OriginalNetworkID && reserveInfo.OriginalNetworkID <= 0x7FE8)
            {
                view += " (地デジ)";
            }
            else if (reserveInfo.OriginalNetworkID == 0x0004)
            {
                view += " (BS)";
            }
            else if (reserveInfo.OriginalNetworkID == 0x0006)
            {
                view += " (CS1)";
            }
            else if (reserveInfo.OriginalNetworkID == 0x0007)
            {
                view += " (CS2)";
            }
            else
            {
                view += " (その他)";
            }
            view += "\r\n";

            view += reserveInfo.Title + "\r\n\r\n";
            view += "録画モード : " + recMode + "\r\n";
            view += "優先度 : " + reserveInfo.RecSetting.Priority.ToString() + "\r\n";
            view += "追従 : " + tuijyu + "\r\n";
            view += "ぴったり(?) : " + pittari + "\r\n";
            if ((reserveInfo.RecSetting.ServiceMode & 0x01) == 0)
            {
                view += "指定サービス対象データ : デフォルト\r\n";
            }
            else
            {
                view += "指定サービス対象データ : ";
                if ((reserveInfo.RecSetting.ServiceMode & 0x10) > 0)
                {
                    view += "字幕含む ";
                }
                if ((reserveInfo.RecSetting.ServiceMode & 0x20) > 0)
                {
                    view += "データカルーセル含む";
                }
                view += "\r\n";
            }

            view += "録画実行bat : " + reserveInfo.RecSetting.BatFilePath + "\r\n";

            if (reserveInfo.RecSetting.RecFolderList.Count == 0)
            {
                view += "録画フォルダ : デフォルト\r\n";
            }
            else
            {
                view += "録画フォルダ : \r\n";
                foreach (RecFileSetInfo info in reserveInfo.RecSetting.RecFolderList)
                {
                    view += info.RecFolder + " (WritePlugIn:" + info.WritePlugIn + " ファイル名PlugIn:" + info.RecNamePlugIn + ")\r\n";
                }
            }

            if (reserveInfo.RecSetting.UseMargineFlag == 0)
            {
                view += "録画マージン : デフォルト\r\n";
            }
            else
            {
                view += "録画マージン : 開始 " + reserveInfo.RecSetting.StartMargine.ToString() +
                    " 終了 " + reserveInfo.RecSetting.EndMargine.ToString() + "\r\n";
            }

            if (reserveInfo.RecSetting.SuspendMode == 0)
            {
                view += "録画後動作 : デフォルト\r\n";
            }
            else
            {
                view += "録画後動作 : ";
                switch (reserveInfo.RecSetting.SuspendMode)
                {
                    case 1:
                        view += "スタンバイ";
                        break;
                    case 2:
                        view += "休止";
                        break;
                    case 3:
                        view += "シャットダウン";
                        break;
                    case 4:
                        view += "何もしない";
                        break;
                }
                if (reserveInfo.RecSetting.RebootFlag == 1)
                {
                    view += " 復帰後再起動する";
                }
                view += "\r\n";
            }
            if (reserveInfo.RecSetting.PartialRecFlag == 0)
            {
                view += "部分受信 : 同時出力なし\r\n";
            }
            else
            {
                view += "部分受信 : 同時出力あり\r\n";
                view += "部分受信 録画フォルダ : \r\n";
                foreach (RecFileSetInfo info in reserveInfo.RecSetting.PartialRecFolder)
                {
                    view += info.RecFolder + " (WritePlugIn:" + info.WritePlugIn + " ファイル名PlugIn:" + info.RecNamePlugIn + ")\r\n";
                }
            }
            if (reserveInfo.RecSetting.ContinueRecFlag == 0)
            {
                view += "連続録画動作 : 分割\r\n";
            }
            else
            {
                view += "連続録画動作 : 同一ファイル出力\r\n";
            }
            if (reserveInfo.RecSetting.TunerID == 0)
            {
                view += "使用チューナー強制指定 : 自動\r\n";
            }
            else
            {
                view += "使用チューナー強制指定 : ID:" + reserveInfo.RecSetting.TunerID.ToString("X8") + "\r\n";
            }

            view += "予約状況 : " + reserveInfo.Comment;
            view += "\r\n\r\n"; 
            
            view += "OriginalNetworkID : " + reserveInfo.OriginalNetworkID.ToString() + " (0x" + reserveInfo.OriginalNetworkID.ToString("X4") + ")\r\n";
            view += "TransportStreamID : " + reserveInfo.TransportStreamID.ToString() + " (0x" + reserveInfo.TransportStreamID.ToString("X4") + ")\r\n";
            view += "ServiceID : " + reserveInfo.ServiceID.ToString() + " (0x" + reserveInfo.ServiceID.ToString("X4") + ")\r\n";
            view += "EventID : " + reserveInfo.EventID.ToString() + " (0x" + reserveInfo.EventID.ToString("X4") + ")\r\n";

            return view;
        }
Exemple #40
0
        private void buttonOrMenuItem_add_reserve_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (listView_result.SelectedItem != null)
                {
                    List <ReserveData> list    = new List <ReserveData>();
                    RecSettingData     setInfo = sender is MenuItem?Settings.CreateRecSetting((uint)((MenuItem)sender).Tag) :
                                                     recSettingView.GetRecSetting();

                    foreach (SearchItem item in listView_result.SelectedItems)
                    {
                        EpgEventInfo eventInfo = item.EventInfo;
                        if (item.IsReserved == false && eventInfo.StartTimeFlag != 0)
                        {
                            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;

                            reserveInfo.RecSetting = setInfo;

                            list.Add(reserveInfo);
                        }
                    }

                    if (list.Count > 0)
                    {
                        ErrCode err = CommonManager.CreateSrvCtrl().SendAddReserve(list);
                        if (err != ErrCode.CMD_SUCCESS)
                        {
                            MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "予約登録でエラーが発生しました。終了時間がすでに過ぎている可能性があります。");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Exemple #41
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);
            }
        }
Exemple #42
0
 public ReserveItem(ReserveData item)
 {
     this.ReserveInfo = item;
 }
Exemple #43
0
 public ReserveItem(ReserveData item)
 {
     this.ReserveInfo = item;
 }
Exemple #44
0
 public static bool EqualsPg(this ReserveData i1, EpgEventInfo i2, bool IdMode = true, bool TimeMode = false)
 {
     return(EqualsPg(i2, i1, IdMode, TimeMode));
 }
Exemple #45
0
        void NotifyStatus(NotifySrvInfo status)
        {
            System.Diagnostics.Trace.WriteLine((UpdateNotifyItem)status.notifyID);

            switch ((UpdateNotifyItem)status.notifyID)
            {
                case UpdateNotifyItem.EpgData:
                    {
                        CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData);
                        if (PresentationSource.FromVisual(Application.Current.MainWindow) != null)
                        {
                            epgView.UpdateEpgData();
                        }
                        GC.Collect();
                    }
                    break;
                case UpdateNotifyItem.ReserveInfo:
                    {
                        CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo);
                        reserveView.UpdateReserveData();
                        epgView.UpdateReserveData();
                        tunerReserveView.UpdateReserveData();

                    }
                    break;
                case UpdateNotifyItem.RecInfo:
                    {
                        CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo);
                        recInfoView.UpdateInfo();
                    }
                    break;
                case UpdateNotifyItem.AutoAddEpgInfo:
                    {
                        CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo);
                        autoAddView.UpdateAutoAddInfo();
                    }
                    break;
                case UpdateNotifyItem.AutoAddManualInfo:
                    {
                        CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo);
                        autoAddView.UpdateAutoAddInfo();
                    }
                    break;
                case UpdateNotifyItem.SrvStatus:
                    {
                        if (status.param1 == 1)
                        {
                            taskTray.Icon = Properties.Resources.TaskIconRed;
                        }
                        else if (status.param1 == 2)
                        {
                            taskTray.Icon = Properties.Resources.TaskIconGreen;
                        }
                        else
                        {
                            taskTray.Icon = Properties.Resources.TaskIconBlue;
                        }
                    }
                    break;
                case UpdateNotifyItem.PreRecStart:
                    {
                        taskTray.ShowBalloonTip("予約録画開始準備", status.param4, 10 * 1000);
                        CommonManager.Instance.NotifyLogList.Add(status);
                    }
                    break;
                case UpdateNotifyItem.RecStart:
                    {
                        taskTray.ShowBalloonTip("録画開始", status.param4, 10 * 1000);
                        CommonManager.Instance.NotifyLogList.Add(status);
                    }
                    break;
                case UpdateNotifyItem.RecEnd:
                    {
                        taskTray.ShowBalloonTip("録画終了", status.param4, 10 * 1000);
                        CommonManager.Instance.NotifyLogList.Add(status);
                    }
                    break;
                case UpdateNotifyItem.RecTuijyu:
                    {
                        taskTray.ShowBalloonTip("追従発生", status.param4, 10 * 1000);
                        CommonManager.Instance.NotifyLogList.Add(status);
                    }
                    break;
                case UpdateNotifyItem.ChgTuijyu:
                    {
                        taskTray.ShowBalloonTip("番組変更", status.param4, 10 * 1000);
                        CommonManager.Instance.NotifyLogList.Add(status);
                    }
                    break;
                case UpdateNotifyItem.PreEpgCapStart:
                    {
                        taskTray.ShowBalloonTip("EPG取得", status.param4, 10 * 1000);
                        CommonManager.Instance.NotifyLogList.Add(status);
                    }
                    break;
                case UpdateNotifyItem.EpgCapStart:
                    {
                        taskTray.ShowBalloonTip("EPG取得", "開始", 10 * 1000);
                        CommonManager.Instance.NotifyLogList.Add(status);
                    }
                    break;
                case UpdateNotifyItem.EpgCapEnd:
                    {
                        taskTray.ShowBalloonTip("EPG取得", "終了", 10 * 1000);
                        CommonManager.Instance.NotifyLogList.Add(status);
                    }
                    break;
                default:
                    break;
            }

            CommonManager.Instance.DB.ReloadReserveInfo();
            ReserveData item = new ReserveData();

            if (CommonManager.Instance.DB.GetNextReserve(ref item) == true)
            {
                String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ ");
                DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond);
                timeView += endTime.ToString("HH:mm:ss");
                taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title;
            }
            else
            {
                taskTray.Text = "次の予約なし";
            }
        }
Exemple #46
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);
            }
        }
Exemple #47
0
 public ReserveViewItem(ReserveData info)
 {
     ReserveInfo = info;
 }
Exemple #48
0
 /// <summary>予約情報を取得する</summary>
 public ErrCode SendGetReserve(uint reserveID, ref ReserveData val)
 {
     object o = val; return(SendAndReceiveCmdData2(CtrlCmd.CMD_EPG_SRV_GET_RESERVE2, reserveID, ref o));
 }
 /// <summary>
 /// 右クリックメニュー 予約変更クリックイベント呼び出し
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void cm_chg_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         ReserveData reserve = new ReserveData();
         if (GetReserveItem(clickPos, ref reserve) == false)
         {
             return;
         }
         ChangeReserve(reserve);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
     }
 }
Exemple #50
0
        private void button_chg_reserve_Click(object sender, ExecutedRoutedEventArgs e)
        {
            try
            {
                if (CmdExeUtil.IsDisplayKgMessage(e) == true)
                {
                    bool change_proc = false;
                    switch (addMode)
                    {
                        case AddMode.Add:
                            change_proc = (MessageBox.Show("予約を追加します。\r\nよろしいですか?", "予約の確認", MessageBoxButton.OKCancel) == MessageBoxResult.OK);
                            break;
                        case AddMode.Re_Add:
                            change_proc = (MessageBox.Show("この内容で再予約します。\r\nよろしいですか?", "再予約の確認", MessageBoxButton.OKCancel) == MessageBoxResult.OK);
                            break;
                        case AddMode.Change:
                            change_proc = (MessageBox.Show("この予約を変更します。\r\nよろしいですか?", "変更の確認", MessageBoxButton.OKCancel) == MessageBoxResult.OK);
                            break;
                    }
                    if (change_proc == false) return;
                }

                if (addMode == AddMode.Change && CheckExistReserveItem() == false) return;

                //ダイアログを閉じないときはreserveInfoを変更しないよう注意する
                if (ReserveMode == UIReserveMode.Program)
                {
                    var resInfo = new ReserveData();
                    if (GetReserveTimeInfo(ref resInfo) == -2)
                    {
                        MessageBox.Show("終了日時が開始日時より前です");
                        return;
                    }

                    //reserveInfo取得前に保存する。サービスや時間が変わったら、個別予約扱いにする。タイトルのみ変更は見ない。
                    bool chgManualMode = !CtrlCmdDefEx.EqualsPg(resInfo, reserveInfo, false, true);

                    GetReserveTimeInfo(ref reserveInfo);
                    if (reserveInfo.EventID != 0xFFFF || chgManualMode == true)
                    {
                        reserveInfo.EventID = 0xFFFF;
                        reserveInfo.Comment = "";
                    }
                    reserveInfo.StartTimeEpg = reserveInfo.StartTime;
                }
                else if(ReserveMode == UIReserveMode.EPGManual)
                {
                    //EPG予約に変える場合、またはEPG予約で別の番組に変わる場合
                    if (eventInfoNew != null)
                    {
                        //基本的にAddReserveEpgWindowと同じ処理内容
                        if (mutil.IsEnableReserveAdd(eventInfoNew) == false) return;
                        eventInfoNew.ConvertToReserveData(ref reserveInfo);
                        reserveInfo.Comment = "";
                    }
                    // 自動予約から個別予約に変える場合
                    else if(GetReserveModeFromInfo() == UIReserveMode.EPGAuto)
                    {
                        reserveInfo.Comment = "";
                    }
                }

                reserveInfo.RecSetting = recSettingView.GetRecSetting();

                if (addMode == AddMode.Change)
                {
                    mutil.ReserveChange(CommonUtil.ToList(reserveInfo));
                }
                else
                {
                    mutil.ReserveAdd(CommonUtil.ToList(reserveInfo));
                }

                // EPG自動予約以外になったら戻せないようにしておく
                if(ReserveMode != UIReserveMode.EPGAuto)
                {
                    CanSelectAutoAdd = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }

            DialogResult = true;
        }
 /// <summary>
 /// 右クリックメニュー 予約削除クリックイベント呼び出し
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void cm_del_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         ReserveData reserve = new ReserveData();
         if (GetReserveItem(clickPos, ref reserve) == false)
         {
             return;
         }
         List<UInt32> list = new List<UInt32>();
         list.Add(reserve.ReserveID);
         ErrCode err = (ErrCode)cmd.SendDelReserve(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("予約削除でエラーが発生しました。");
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
     }
 }
Exemple #52
0
        private int GetReserveTimeInfo(ref ReserveData resInfo)
        {
            if (resInfo == null) return -1;

            try
            {
                resInfo.Title = textBox_title.Text;
                ChSet5Item ch = comboBox_service.SelectedItem as ChSet5Item;

                resInfo.StationName = ch.ServiceName;
                resInfo.OriginalNetworkID = ch.ONID;
                resInfo.TransportStreamID = ch.TSID;
                resInfo.ServiceID = ch.SID;
                //resInfo.EventID = 0xFFFF; 条件付の情報なのでここでは書き換えないことにする

                resInfo.StartTime = new DateTime(datePicker_start.SelectedDate.Value.Year,
                    datePicker_start.SelectedDate.Value.Month,
                    datePicker_start.SelectedDate.Value.Day,
                    comboBox_sh.SelectedIndex,
                    comboBox_sm.SelectedIndex,
                    comboBox_ss.SelectedIndex,
                    0,
                    DateTimeKind.Utc
                    );

                DateTime endTime = new DateTime(datePicker_end.SelectedDate.Value.Year,
                    datePicker_end.SelectedDate.Value.Month,
                    datePicker_end.SelectedDate.Value.Day,
                    comboBox_eh.SelectedIndex,
                    comboBox_em.SelectedIndex,
                    comboBox_es.SelectedIndex,
                    0,
                    DateTimeKind.Utc
                    );
                if (resInfo.StartTime > endTime)
                {
                    resInfo.DurationSecond = 0;
                    return -2;
                }
                else
                {
                    TimeSpan duration = endTime - resInfo.StartTime;
                    resInfo.DurationSecond = (uint)duration.TotalSeconds;
                    return 0;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
            return -1;
        }
 /// <summary>
 /// マウス位置から予約情報を取得する
 /// </summary>
 /// <param name="cursorPos">[IN]マウス位置</param>
 /// <param name="reserve">[OUT]予約情報</param>
 /// <returns>falseで存在しない</returns>
 private bool GetReserveItem(Point cursorPos, ref ReserveData reserve)
 {
     try
     {
         if (timeList.Count > 0)
         {
             int timeIndex = (int)Math.Floor(cursorPos.Y / (60 * Settings.Instance.MinHeight));
             TimePosInfo time = timeList.GetByIndex(timeIndex) as TimePosInfo;
             foreach (ReserveViewItem resInfo in time.ReserveList)
             {
                 if (resInfo.LeftPos <= cursorPos.X && cursorPos.X < resInfo.LeftPos + resInfo.Width &&
                     resInfo.TopPos <= cursorPos.Y && cursorPos.Y < resInfo.TopPos + resInfo.Height)
                 {
                     reserve = resInfo.ReserveInfo;
                     return true;
                 }
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
     }
     return false;
 }
Exemple #54
0
        private void ReserveModeChanged()
        {
            // UIに反映させる
            SetResModeProgram();

            if (!initialized) return;

            if (ReserveMode == UIReserveMode.Program)
            {
                eventInfoNew = null;
            }
            else if (ReserveMode == UIReserveMode.EPGManual)
            {
                var resInfo = new ReserveData();
                GetReserveTimeInfo(ref resInfo);

                if (reserveInfo.EventID != 0xFFFF && CtrlCmdDefEx.EqualsPg(reserveInfo, resInfo, false, true) == true)
                {
                    //EPG予約で、元の状態に戻る場合
                    textBox_title.Text = reserveInfo.Title;
                    eventInfoNew = null;
                }
                else
                {
                    eventInfoNew = resInfo.SearchEventInfoLikeThat();
                    if (eventInfoNew == null)
                    {
                        MessageBox.Show("変更可能な番組がありません。\r\n" +
                                        "EPGの期間外か、EPGデータが読み込まれていません。");
                        ReserveMode = UIReserveMode.Program;
                    }
                    else
                    {
                        SetReserveTimeInfo(CtrlCmdDefEx.ConvertEpgToReserveData(eventInfoNew));
                    }
                }
            }
            else if (ReserveMode == UIReserveMode.EPGAuto)
            {
                SetReserveTimeInfo(reserveInfo);
            }

            eventInfoSelected = eventInfoNew;
        }
        /// <summary>
        /// 右ボタンクリック
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="cursorPos"></param>
        void tunerReserveView_RightClick(object sender, Point cursorPos)
        {
            try
            {
                //右クリック表示メニューの作成
                clickPos = cursorPos;
                ReserveData reserve = new ReserveData();
                if (GetReserveItem(cursorPos, ref reserve) == false)
                {
                    return;
                }
                ContextMenu menu = new ContextMenu();

                Separator separate2 = new Separator();
                MenuItem menuItemChg = new MenuItem();
                menuItemChg.Header = "予約変更";
                MenuItem menuItemChgDlg = new MenuItem();
                menuItemChgDlg.Header = "ダイアログ表示";
                menuItemChgDlg.Click += new RoutedEventHandler(cm_chg_Click);

                menuItemChg.Items.Add(menuItemChgDlg);
                menuItemChg.Items.Add(separate2);

                MenuItem menuItemChgRecMode = new MenuItem();
                menuItemChgRecMode.Header = "録画モード";

                MenuItem menuItemChgRecMode0 = new MenuItem();
                menuItemChgRecMode0.Header = "全サービス";
                menuItemChgRecMode0.DataContext = 0;
                menuItemChgRecMode0.Click += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode1 = new MenuItem();
                menuItemChgRecMode1.Header = "指定サービス";
                menuItemChgRecMode1.DataContext = 1;
                menuItemChgRecMode1.Click += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode2 = new MenuItem();
                menuItemChgRecMode2.Header = "全サービス(デコード処理なし)";
                menuItemChgRecMode2.DataContext = 2;
                menuItemChgRecMode2.Click += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode3 = new MenuItem();
                menuItemChgRecMode3.Header = "指定サービス(デコード処理なし)";
                menuItemChgRecMode3.DataContext = 3;
                menuItemChgRecMode3.Click += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode4 = new MenuItem();
                menuItemChgRecMode4.Header = "視聴";
                menuItemChgRecMode4.DataContext = 4;
                menuItemChgRecMode4.Click += new RoutedEventHandler(cm_chg_recmode_Click);
                MenuItem menuItemChgRecMode5 = new MenuItem();
                menuItemChgRecMode5.Header = "無効";
                menuItemChgRecMode5.DataContext = 5;
                menuItemChgRecMode5.Click += new RoutedEventHandler(cm_chg_recmode_Click);

                menuItemChgRecMode.Items.Add(menuItemChgRecMode0);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode1);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode2);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode3);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode4);
                menuItemChgRecMode.Items.Add(menuItemChgRecMode5);

                menuItemChg.Items.Add(menuItemChgRecMode);

                MenuItem menuItemChgRecPri = new MenuItem();
                menuItemChgRecPri.Header = "優先度";

                MenuItem menuItemChgRecPri1 = new MenuItem();
                menuItemChgRecPri1.Header = "1";
                menuItemChgRecPri1.DataContext = 1;
                menuItemChgRecPri1.Click += new RoutedEventHandler(cm_chg_priority_Click);
                MenuItem menuItemChgRecPri2 = new MenuItem();
                menuItemChgRecPri2.Header = "2";
                menuItemChgRecPri2.DataContext = 2;
                menuItemChgRecPri2.Click += new RoutedEventHandler(cm_chg_priority_Click);
                MenuItem menuItemChgRecPri3 = new MenuItem();
                menuItemChgRecPri3.Header = "3";
                menuItemChgRecPri3.DataContext = 3;
                menuItemChgRecPri3.Click += new RoutedEventHandler(cm_chg_priority_Click);
                MenuItem menuItemChgRecPri4 = new MenuItem();
                menuItemChgRecPri4.Header = "4";
                menuItemChgRecPri4.DataContext = 4;
                menuItemChgRecPri4.Click += new RoutedEventHandler(cm_chg_priority_Click);
                MenuItem menuItemChgRecPri5 = new MenuItem();
                menuItemChgRecPri5.Header = "5";
                menuItemChgRecPri5.DataContext = 5;
                menuItemChgRecPri5.Click += new RoutedEventHandler(cm_chg_priority_Click);

                menuItemChgRecPri.Items.Add(menuItemChgRecPri1);
                menuItemChgRecPri.Items.Add(menuItemChgRecPri2);
                menuItemChgRecPri.Items.Add(menuItemChgRecPri3);
                menuItemChgRecPri.Items.Add(menuItemChgRecPri4);
                menuItemChgRecPri.Items.Add(menuItemChgRecPri5);

                menuItemChg.Items.Add(menuItemChgRecPri);

                MenuItem menuItemDel = new MenuItem();
                menuItemDel.Header = "予約削除";
                menuItemDel.Click += new RoutedEventHandler(cm_del_Click);

                MenuItem menuItemAutoAdd = new MenuItem();
                menuItemAutoAdd.Header = "自動予約登録";
                menuItemAutoAdd.Click += new RoutedEventHandler(cm_autoadd_Click);
                MenuItem menuItemTimeshift = new MenuItem();
                menuItemTimeshift.Header = "追っかけ再生";
                menuItemTimeshift.Click += new RoutedEventHandler(cm_timeShiftPlay_Click);

                menuItemChg.IsEnabled = true;
                menuItemDel.IsEnabled = true;
                menuItemAutoAdd.IsEnabled = true;
                menuItemTimeshift.IsEnabled = true;

                menu.Items.Add(menuItemChg);
                menu.Items.Add(menuItemDel);
                menu.Items.Add(menuItemAutoAdd);
                menu.Items.Add(menuItemTimeshift);
                menu.IsOpen = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
Exemple #56
0
        private void SetReserveTimeInfo(ReserveData resInfo)
        {
            if (resInfo == null) return;

            try
            {
                textBox_title.Text = resInfo.Title;

                foreach (ChSet5Item ch in comboBox_service.Items)
                {
                    if (ch.Key == resInfo.Create64Key())
                    {
                        comboBox_service.SelectedItem = ch;
                        break;
                    }
                }

                SetReserveTime(resInfo.StartTime,resInfo.StartTime.AddSeconds(resInfo.DurationSecond));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
Exemple #57
0
        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);
            }
        }
Exemple #58
0
        private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (tabControl.SelectedIndex == TabSelectedIndex) return;
            TabSelectedIndex = tabControl.SelectedIndex;

            if (tabItem_program.IsSelected)
            {
                if (ReserveMode == UIReserveMode.Program)
                {
                    var resInfo = new ReserveData();
                    GetReserveTimeInfo(ref resInfo);

                    //描画回数の削減を気にしないなら、この条件文は無くてもいい
                    if (CtrlCmdDefEx.EqualsPg(resInfoDisplay, resInfo, false, true) == false)
                    {
                        //EPGを自動で読み込んでない時でも、元がEPG予約ならその番組情報は表示させられるようにする
                        if (reserveInfo.EventID != 0xFFFF && CtrlCmdDefEx.EqualsPg(reserveInfo, resInfo, false, true) == true)
                        {
                            SetProgramContent(reserveInfo.SearchEventInfo(true));
                        }
                        else
                        {
                            SetProgramContent(resInfo.SearchEventInfoLikeThat());
                        }

                        resInfoDisplay = resInfo;
                    }
                }
                else
                {
                    //EPG予約を変更していない場合引っかかる。
                    //最も表示される可能性が高いので、何度も探しにいかせないようにする。
                    if (eventInfoSelected == null)
                    {
                        eventInfoSelected = reserveInfo.SearchEventInfo(true);
                    }
                    SetProgramContent(eventInfoSelected);
                    resInfoDisplay = null;
                }
            }
        }
Exemple #59
0
        public static string Call(string Str, bool Indent = true, bool NotUseCache = false)
        {
            string JsonData = "";
            JsonResult Data = new JsonResult(null, false, ErrCode.CMD_NO_ARG);
            try
            {
                string Command = Str;
                var Arg = new Dictionary<string, string>();
                if (Str.IndexOf("/") > 0)
                {
                    Command = Str.Split('/')[0];
                    Arg = ParseArgs(Str);
                }

                if (Command == "EnumReserve")
                {
                    Data = new JsonResult(CommonManager.Instance.DB.ReserveList.Values);
                }
                else if (Command == "EnumService")
                {
                    Data = new JsonResult(ChSet5.Instance.ChList.Values);
                }
                else if (Command == "EnumRecFileInfo")
                {
                    Data = new JsonResult(CommonManager.Instance.DB.RecFileInfo.Values);
                }
                else if (Command == "GenerateEpgHTML")
                {
                    int MaxHour = 6;
                    DateTime Start = DateTime.Now;
                    List<ulong> ServiceKeys = null;
                    int MinSize = 5;
                    bool EpgCapOnly = false;
                    bool SetBgColor = false;
                    EpgSearchKeyInfo search = null;
                    if (Arg.ContainsKey("maxhour"))
                    {
                        MaxHour = int.Parse(Arg["maxhour"]);
                    }
                    if (Arg.ContainsKey("unixstart"))
                    {
                        Start = UnixTime.FromUnixTime(long.Parse(Arg["unixstart"]));
                        if (Start < DateTime.Now.AddMinutes(DateTime.Now.Minute * -1).AddSeconds(DateTime.Now.Second * -1).AddSeconds(-1))
                        {
                            Start = DateTime.Now.AddMinutes(-1 * DateTime.Now.Minute).AddSeconds(-1 * DateTime.Now.Second); //変な時間対策
                            Debug.Print("変な時間発動");
                        }
                    }
                    if (Arg.ContainsKey("services"))
                    {
                        ServiceKeys = new List<ulong>();
                        if (Arg["services"].IndexOf(",") > 0)
                        {
                            ServiceKeys.AddRange(Arg["services"].Split(',').Select(s => ulong.Parse(s)));
                        }
                        else
                        {
                            ServiceKeys.Add(ulong.Parse(Arg["services"]));
                        }
                    }
                    if (Arg.ContainsKey("minsize"))
                    {
                        MinSize = int.Parse(Arg["minsize"]);
                    }
                    if (Arg.ContainsKey("epgcaponly"))
                        EpgCapOnly = true;
                    if (Arg.ContainsKey("setbg"))
                        SetBgColor = true;
                    if (Arg.ContainsKey("search"))
                        search = GetEpgSKey(Arg);
                    string Page = EpgPage.Generate(Start, MaxHour, ServiceKeys, MinSize, EpgCapOnly: EpgCapOnly, SetBgColor: SetBgColor, Search: search);
                    Data = new JsonResult(Page, Page != null || Page != "");
                }
                else if (Command == "EnumServiceEvent")
                {
                    int MaxHour = 6;
                    ulong Key = 0;
                    DateTime Start = DateTime.Now;
                    if (Arg.ContainsKey("maxhour"))
                    {
                        MaxHour = int.Parse(Arg["maxhour"]);
                    }
                    if (Arg.ContainsKey("key"))
                    {
                        Key = ulong.Parse(Arg["key"]);
                    }
                    if (Arg.ContainsKey("unixstart"))
                    {
                        Start = UnixTime.FromUnixTime(long.Parse(Arg["unixstart"]));
                        if (Start < DateTime.Now.AddMinutes(DateTime.Now.Minute * -1).AddSeconds(DateTime.Now.Second * -1).AddSeconds(-1))
                        {
                            Start = DateTime.Now.AddMinutes(-1 * DateTime.Now.Minute).AddSeconds(-1 * DateTime.Now.Second); //変な時間対策
                            Debug.Print("変な時間発動");
                        }
                    }
                    DateTime End = Start.AddHours(MaxHour);
                    var Out = new Dictionary<string, List<EventInfoItem>>();
                    foreach (var a in CommonManager.Instance.DB.ServiceEventList)
                    {
                        if (Key != 0 && a.Key != Key) continue;
                        Out.Add(
                            a.Key.ToString(),
                            //1: 指定された時間よりも前にある
                            //2: 終わっていない
                            a.Value.eventList.Where(b => b.start_time.AddSeconds(b.start_time.Second * -1) < Start.AddHours(MaxHour))
                                .Where(c => c.start_time.AddSeconds(c.durationSec) > Start)
                                .OrderBy(d => d.start_time)
                                .Select(e => new EventInfoItem(e))
                                .ToList()
                            );
                    }
                    Data = new JsonResult(Out);
                }
                else if (Command == "GetEpgEvent")
                {
                    ulong Key = 0;
                    if (Arg.ContainsKey("key"))
                    {
                        Key = ulong.Parse(Arg["key"]);
                    }
                    else if (ContainsMultipleKeys(Arg, "o", "t", "s", "e"))
                    {
                        Key = CommonManager.Create64PgKey(ushort.Parse(Arg["o"]), ushort.Parse(Arg["t"]),
                            ushort.Parse(Arg["s"]), ushort.Parse(Arg["e"]));
                    }
                    if (Key == 0) return "";
                    EpgEventInfo Event = null;
                    foreach (var service in CommonManager.Instance.DB.ServiceEventList.Values)
                    {
                        foreach (var _event in service.eventList)
                        {
                            if (CommonManager.Create64PgKey(_event.original_network_id, _event.transport_stream_id, _event.service_id, _event.event_id) == Key)
                            {
                                Event = _event;
                                break;
                            }
                        }
                        if (Event != null) break;
                    }
                    if (Event == null)
                        Data = new JsonResult(null, false, ErrCode.CMD_NO_RES);
                    else
                        Data = new JsonResult(new EventInfoItem(Event));
                }
                else if (Command == "EnumContentKindList1")
                {
                    Data = new JsonResult(CommonManager.Instance.ContentKindDictionary);
                }
                else if (Command == "EnumContentKindList2")
                {
                    Data = new JsonResult(CommonManager.Instance.ContentKindDictionary2);
                }
                else if (Command == "EnumWritePlugInList")
                {
                    Data = new JsonResult(CommonManager.Instance.DB.WritePlugInList);
                }
                else if (Command == "EnumRecNamePlugInList")
                {
                    Data = new JsonResult(CommonManager.Instance.DB.RecNamePlugInList);
                }
                else if (Command == "EnumEpgAutoAddList")
                {
                    Data = new JsonResult(CommonManager.Instance.DB.EpgAutoAddList);
                }
                else if (Command == "EpgCapNow")
                {
                    ErrCode Err = (ErrCode)CommonManager.Instance.CtrlCmd.SendEpgCapNow();
                    Data = new JsonResult(null, Err);
                }
                else if (Command == "EpgReload")
                {
                    ErrCode Err = (ErrCode)CommonManager.Instance.CtrlCmd.SendReloadEpg();
                    Data = new JsonResult(null, Err);
                }
                else if (Command == "EnumTunerReserve")
                {
                    List<TunerReserveInfo> reserves = new List<TunerReserveInfo>();
                    ErrCode Err = (ErrCode)CommonManager.Instance.CtrlCmd.SendEnumTunerReserve(ref reserves);
                    if (Err == ErrCode.CMD_SUCCESS)
                    {
                        Data = new JsonResult(reserves, true, Err);
                    }
                    else
                    {
                        Data = new JsonResult(null, false, Err);
                    }
                }
                else if (Command == "GetSetting")
                {
                    Data = new JsonResult(Setting.Instance);
                }
                else if (Command == "GetCommonManager")
                {
                    Data = new JsonResult(CommonManagerJson.Instance);
                }
                else if (Command == "AddReserve")
                {
                    if (ContainsMultipleKeys(Arg, "tsid", "onid", "sid", "eid")) //最低限必要
                    {
                        ushort ONID = ushort.Parse(Arg["onid"]);
                        ushort SID = ushort.Parse(Arg["sid"]);
                        ushort TSID = ushort.Parse(Arg["tsid"]);
                        ushort EventID = ushort.Parse(Arg["eid"]);
                        ulong Key = CommonManager.Create64Key(ONID, TSID, SID);
                        ulong PGKey = CommonManager.Create64PgKey(ONID, TSID, SID, EventID);
                        EpgEventInfo Event = null;
                        if (!CommonManager.Instance.DB.ServiceEventList.ContainsKey(Key)) JsonData = "{\"result\":false}";
                        if (CommonManager.Instance.DB.ServiceEventList[Key].eventList.Count(e => e.event_id == EventID) == 1)
                        {
                            Event = CommonManager.Instance.DB.ServiceEventList[Key].eventList.First(e => e.event_id == EventID);
                        }
                        else
                        {
                            CommonManager.Instance.CtrlCmd.SendGetPgInfo(PGKey, ref Event);
                        }
                        if (Event != null)
                        {
                            ReserveData Reserve = new ReserveData();
                            if (Event.ShortInfo != null) Reserve.Title = Event.ShortInfo.event_name;
                            Reserve.StartTime = Event.start_time;
                            Reserve.StartTimeEpg = Event.start_time;
                            if (Event.DurationFlag == 0)
                            {
                                Reserve.DurationSecond = 10 * 60;
                            }
                            else
                            {
                                Reserve.DurationSecond = Event.durationSec;
                            }
                            if (ChSet5.Instance.ChList.ContainsKey(Key)) Reserve.StationName = ChSet5.Instance.ChList[Key].ServiceName;
                            Reserve.OriginalNetworkID = Event.original_network_id;
                            Reserve.TransportStreamID = Event.transport_stream_id;
                            Reserve.ServiceID = Event.service_id;
                            Reserve.EventID = Event.event_id;
                            RecSettingData Setting = GetPreset(Arg, new RecSettingData());
                            Reserve.RecSetting = Setting;
                            ErrCode err = (ErrCode)CommonManager.Instance.CtrlCmd.SendAddReserve(new List<ReserveData> { Reserve });
                            Data = new JsonResult(Reserve, err);
                        }
                        else
                        {
                            Data = new JsonResult(null, false, ErrCode.CMD_NO_RES);
                        }
                    }
                    else
                    {
                        Data = new JsonResult(null, false, ErrCode.CMD_NO_ARG);
                    }
                }

                else if (Command == "AddAutoReserve")
                {
                    var Preset = GetPreset(Arg, new RecSettingData());
                    var Search = GetEpgSKey(Arg);
                    if (ContainsMultipleKeys(Arg, "overlap", "overlap_day"))
                    {
                        Search.chkRecDay = ushort.Parse(Arg["overlap_day"]);
                        Search.chkRecEnd = 1;
                    }

                    ErrCode err = (ErrCode)CommonManager.Instance.CtrlCmd.SendAddEpgAutoAdd(new List<EpgAutoAddData>{
                        new EpgAutoAddData(){
                            searchInfo = Search,
                            recSetting = Preset
                        }
                    });
                    Data = new JsonResult(new EpgAutoAddData()
                    {
                        searchInfo = Search,
                        recSetting = Preset
                    }, err);
                }
                else if (Command == "EnumPresets")
                {
                    Data = new JsonResult(PresetDb.Instance.Presets);
                }
                else if (Command == "AddPreset")
                {
                    if (!Arg.ContainsKey("name")) return JsonData;
                    uint ID = PresetDb.Instance.AddPreset(GetPreset(Arg, new RecSettingData()), Arg["name"]);
                    Data = new JsonResult(PresetDb.Instance.Presets[ID]);
                }
                else if (Command == "EpgSearch")
                {
                    if (Arg.ContainsKey("srvlist"))
                    {
                        List<EpgEventInfo> EpgResult = new List<EpgEventInfo>();
                        ErrCode code = (ErrCode)CommonManager.Instance.CtrlCmd.SendSearchPg(new List<EpgSearchKeyInfo> { GetEpgSKey(Arg) }, ref EpgResult);
                        Data = new JsonResult(EpgResult.Select(s => new EventInfoItem(s)), code);
                    }
                    else
                    {
                        Data = new JsonResult(null, false, ErrCode.CMD_NO_ARG);
                    }
                }
                else if (Command == "EnumEvents")
                {
                    Data = new JsonResult(EventStore.Instance.Events);
                }
                else if (Command == "GetContentColorTable")
                {
                    Data = new JsonResult(Setting.Instance.ContentToColorTable);
                }
                else if (Command == "SetContentColorTable")
                {
                    Regex ColorRegex = new Regex(@"[0-9a-fA-F]{6}");
                    if (ContainsMultipleKeys(Arg, "id", "color") && uint.Parse(Arg["id"]) >= 0 && ColorRegex.IsMatch(Arg["color"]))
                    {
                        if (Setting.Instance.ContentToColorTable.Count(s => s.ContentLevel1 == uint.Parse(Arg["id"])) == 0)
                        {
                            Setting.Instance.ContentToColorTable.Add(new ContentColorItem(uint.Parse(Arg["id"]), "#" + Arg["color"]));
                        }
                        else
                        {
                            Setting.Instance.ContentToColorTable.RemoveAll(s => s.ContentLevel1 == uint.Parse(Arg["id"]));
                            Setting.Instance.ContentToColorTable.Add(new ContentColorItem(uint.Parse(Arg["id"]), "#" + Arg["color"]));
                        }

                        Data = new JsonResult(null);
                    }
                }
                else if (Command == "RemoveReserve")
                {
                    if (Arg.ContainsKey("id"))
                    {
                        ErrCode err = (ErrCode)CommonManager.Instance.CtrlCmd.SendDelReserve(new List<uint> { uint.Parse(Arg["id"]) });
                        Data = new JsonResult(null, err);
                    }
                }
                else if (Command == "RemoveAutoReserve")
                {
                    if (Arg.ContainsKey("id"))
                    {
                        ErrCode err = (ErrCode)CommonManager.Instance.CtrlCmd.SendDelEpgAutoAdd(new List<uint> { uint.Parse(Arg["id"]) });
                        Data = new JsonResult(null, err);
                    }
                }
                else if (Command == "RemoveManualReserve")
                {
                    if (Arg.ContainsKey("id"))
                    {
                        ErrCode err = (ErrCode)CommonManager.Instance.CtrlCmd.SendDelManualAdd(new List<uint> { uint.Parse(Arg["id"]) });
                        Data = new JsonResult(null, err);
                    }
                }
                else if (Command == "RemoveRecFile")
                {
                    if (Arg.ContainsKey("id"))
                    {
                        ErrCode err = (ErrCode)CommonManager.Instance.CtrlCmd.SendDelRecInfo(new List<uint> { uint.Parse(Arg["id"]) });
                        Data = new JsonResult(null, err);
                    }
                }
                else if (Command == "UpdateReserve")
                {
                    if (Arg.ContainsKey("id") &&
                        CommonManager.Instance.DB.ReserveList.ContainsKey(uint.Parse(Arg["id"])))
                    {
                        ReserveData Target = CommonManager.Instance.DB.ReserveList[uint.Parse(Arg["id"])];
                        Target.RecSetting = GetPreset(Arg, Target.RecSetting);
                        ErrCode err = (ErrCode)CommonManager.Instance.CtrlCmd.SendChgReserve(new List<ReserveData> { Target });
                        Data = new JsonResult(Target, err);
                    }
                }
                else if (Command == "Hello")
                {
                    Data = new JsonResult(VersionInfo.Instance);
                }
                else if (Command == "ReloadLocal")
                {
                    CommonManager.Instance.DB.ReloadAll(Arg.ContainsKey("force"));
                }
                else if (Command == "FileBrowse")
                {
                    if (Arg.ContainsKey("path"))
                    {
                        if (Arg["path"].IndexOf(":") == 1
                            && Arg["path"].IndexOf("..") < 0
                            && Arg["path"].IndexOf("\\.\\") < 0
                            && Arg["path"].EndsWith("\\")
                            && Directory.Exists(Arg["path"]))
                        {
                            List<string> Items = new List<string>();
                            Items.AddRange(Directory.GetFiles(Arg["path"]));
                            Items.AddRange(Directory.GetDirectories(Arg["path"]).Select(s => s + "\\"));
                            Data = new JsonResult(Items);
                        }
                        else
                        {
                            Data = new JsonResult(null, ErrCode.CMD_NO_ARG);
                        }
                    }
                    else
                    {
                        Data = new JsonResult(Directory.GetLogicalDrives());
                    }
                }
                JsonData = JsonUtil.Serialize(Data, Indent);
            }
            catch (Exception ex)
            {
                JsonData = JsonUtil.Serialize(new JsonResult(null, ErrCode.CMD_ERR), Indent);
                Debug.Print(ex.Message);
            }
            return JsonData;
        }
Exemple #60
0
 public static void CopyContent2Clipboard(ReserveData resInfo, bool NotToggle = false)
 {
     CopyContent2Clipboard(resInfo.SearchEventInfo(true), NotToggle);
 }