public static ReserveData ConvertEpgToReserveData(EpgEventInfo epgInfo) { if (epgInfo == null) return null; ReserveData resInfo = new ReserveData(); epgInfo.ConvertToReserveData(ref resInfo); return resInfo; }
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); } }
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); } }
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; }
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); }
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); }
public static void CopyContent2Clipboard(ReserveData resInfo, bool NotToggle = false) { EpgEventInfo info = resInfo == null ? null : resInfo.ReserveEventInfo(); CopyContent2Clipboard(info, NotToggle); }
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(); }
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; }
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"); } }
protected virtual SearchItem mcs_GetSearchItem() { ReserveData data = mcs_GetNextReserve(); return(data == null ? null : new ReserveItem(data)); }
public ReserveItem(ReserveData item) { base.ReserveInfo = item; }
public ReserveItem(ReserveData item) { ReserveInfo = item; }
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); } }
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); } }
/// <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); } }
/// <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()); } }
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); } }
public ReserveViewItem(ReserveData info) { TitleDrawErr = false; ReserveInfo = info; }
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); } }
public TunerReserveViewItem(ReserveData info) : base(info) { }
public static ReserveData Clone(this ReserveData src) { return(CopyObj.Clone(src, CopyData)); }
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); }
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; }
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; }
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()); } }
/// <summary> /// 初期値の予約情報をセットする /// </summary> /// <param name="info">[IN] 初期値の予約情報</param> public void SetReserveInfo(ReserveData info) { try { reserveInfo = info; recSettingView.SetDefSetting(info.RecSetting); if (info.EventID != 0xFFFF) { UInt64 key = CommonManager.Create64Key(info.OriginalNetworkID, info.TransportStreamID, info.ServiceID); EpgEventInfo eventInfo = null; if (CommonManager.Instance.DB.ServiceEventList.ContainsKey(key) == true) { foreach (EpgEventInfo eventChkInfo in CommonManager.Instance.DB.ServiceEventList[key].eventList) { if (eventChkInfo.event_id == info.EventID) { eventInfo = eventChkInfo; break; } } } if(eventInfo == null ) { UInt64 pgId = CommonManager.Create64PgKey(info.OriginalNetworkID, info.TransportStreamID, info.ServiceID, info.EventID); eventInfo = new EpgEventInfo(); cmd.SendGetPgInfo(pgId, ref eventInfo); } if (eventInfo != null) { String text = CommonManager.Instance.ConvertProgramText(eventInfo, EventInfoTextMode.All); Regex regex = new Regex("((http://|https://|http://|https://).*\r\n)"); if (regex.IsMatch(text) == true) { try { //Regexのsplitでやるとhttp://だけのも取れたりするので、1つずつ行う FlowDocument flowDoc = new FlowDocument(); Paragraph para = new Paragraph(); do { Match matchVal = regex.Match(text); int index = text.IndexOf(matchVal.Value); para.Inlines.Add(text.Substring(0, index)); text = text.Remove(0, index); Hyperlink h = new Hyperlink(new Run(matchVal.Value.Replace("\r\n", ""))); h.MouseLeftButtonDown += new MouseButtonEventHandler(h_MouseLeftButtonDown); h.Foreground = Brushes.Blue; h.Cursor = Cursors.Hand; String url = CommonManager.ReplaceUrl(matchVal.Value.Replace("\r\n", "")); h.NavigateUri = new Uri(url); para.Inlines.Add(h); para.Inlines.Add("\r\n"); text = text.Remove(0, matchVal.Value.Length); } while (regex.IsMatch(text) == true); para.Inlines.Add(text); flowDoc.Blocks.Add(para); richTextBox_descInfo.Document = flowDoc; } catch { text = CommonManager.Instance.ConvertProgramText(eventInfo, EventInfoTextMode.All); FlowDocument flowDoc = new FlowDocument(); flowDoc.Blocks.Add(new Paragraph(new Run(text))); richTextBox_descInfo.Document = flowDoc; } } else { FlowDocument flowDoc = new FlowDocument(); flowDoc.Blocks.Add(new Paragraph(new Run(text))); richTextBox_descInfo.Document = flowDoc; } } } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
public ReserveItem(ReserveData item) { this.ReserveInfo = item; }
public static bool EqualsPg(this ReserveData i1, EpgEventInfo i2, bool IdMode = true, bool TimeMode = false) { return(EqualsPg(i2, i1, IdMode, TimeMode)); }
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 = "次の予約なし"; } }
/// <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); } }
/// <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); } }
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); } }
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; }
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; }
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); } }
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 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; } } }
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; }
public static void CopyContent2Clipboard(ReserveData resInfo, bool NotToggle = false) { CopyContent2Clipboard(resInfo.SearchEventInfo(true), NotToggle); }