internal bool PlayRecording(int index) { TvDatabase.Recording rec = (TvDatabase.Recording)latestTVRecordings[index]; _rec = rec; _filename = rec.FileName; bool _bIsLiveRecording = false; IList <TvDatabase.Recording> itemlist = TvDatabase.Recording.ListAll(); TvServer server = new TvServer(); foreach (TvDatabase.Recording recItem in itemlist) { if (rec.IdRecording == recItem.IdRecording && IsRecordingActual(recItem)) { _bIsLiveRecording = true; break; } } int stoptime = rec.StopTime; if (_bIsLiveRecording) { stoptime = -1; } if (TVHome.Card != null) { TVHome.Card.StopTimeShifting(); } return(TVUtil.PlayRecording(rec, stoptime)); }
private static bool PromptDeleteRecording(int idSchedule, Program prg) { bool confirmed = false; bool isRec = false; if (prg != null) { isRec = TvDatabase.Schedule.IsScheduleRecording(idSchedule, prg); } else { var tvServer = new TvServer(); VirtualCard vCard; isRec = tvServer.IsRecordingSchedule(idSchedule, out vCard); } if (isRec) { confirmed = SetupConfirmDelRecDialogue(); } else { confirmed = true; } return(confirmed); }
public string GetRecordingURL(int idRecording) { TvServer server = new TvServer(); string url = server.GetStreamUrlForFileName(idRecording); return(url); }
private void mpButtonDel_Click(object sender, EventArgs e) { mpListView1.BeginUpdate(); try { IList <Schedule> schedules = Schedule.ListAll(); TvServer server = new TvServer(); //Since it takes a very long time to add channels, make sure the user really wants to delete them if (mpListView1.SelectedItems.Count > 0) { string holder = String.Format("Are you sure you want to delete these {0:d} channels?", mpListView1.SelectedItems.Count); if (MessageBox.Show(holder, "", MessageBoxButtons.YesNo) == DialogResult.No) { //mpListView1.EndUpdate(); return; } } NotifyForm dlg = new NotifyForm("Deleting selected tv channels...", "This can take some time\n\nPlease be patient..."); dlg.Show(this); dlg.WaitForDisplay(); foreach (ListViewItem item in mpListView1.SelectedItems) { Channel channel = (Channel)item.Tag; //also delete any still active schedules if (schedules != null) { for (int i = schedules.Count - 1; i > -1; i--) { Schedule schedule = schedules[i]; if (schedule.IdChannel == channel.IdChannel) { server.StopRecordingSchedule(schedule.IdSchedule); schedule.Delete(); schedules.RemoveAt(i); } } } channel.Delete(); mpListView1.Items.Remove(item); } dlg.Close(); ReOrder(); mpListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); } finally { mpListView1.EndUpdate(); } }
private void LoadDirectory() { GUIControl.ClearControl(GetID, listPriorities.GetID); SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof(Schedule)); sb.AddOrderByField(false, "priority"); SqlStatement stmt = sb.GetStatement(true); IList itemlist = ObjectFactory.GetCollection(typeof(Schedule), stmt.Execute()); int total = 0; foreach (Schedule rec in itemlist) { if (rec.IsSerieIsCanceled(rec.StartTime, rec.IdChannel)) { continue; } GUIListItem item = new GUIListItem(); item.Label = String.Format("{0}.{1}", total, rec.ProgramName); item.TVTag = rec; string strLogo = Utils.GetCoverArt(Thumbs.TVChannel, rec.ReferencedChannel().DisplayName); if (string.IsNullOrEmpty(strLogo)) { strLogo = "defaultVideoBig.png"; } TvServer server = new TvServer(); VirtualCard card; if (server.IsRecordingSchedule(rec.IdSchedule, out card)) { if (rec.ScheduleType != (int)ScheduleRecordingType.Once) { item.PinImage = Thumbs.TvRecordingSeriesIcon; } else { item.PinImage = Thumbs.TvRecordingIcon; } } else if (rec.ReferringConflicts().Count > 0) { item.PinImage = Thumbs.TvConflictRecordingIcon; } item.ThumbnailImage = strLogo; item.IconImageBig = strLogo; item.IconImage = strLogo; listPriorities.Add(item); total++; } //set object count label GUIPropertyManager.SetProperty("#itemcount", Utils.GetObjectCountLabel(total)); GUIControl.SelectItemControl(GetID, listPriorities.GetID, m_iSelectedItem); }
private static bool StopRecAndDeleteEntireSchedule(Schedule schedule, Schedule parentSchedule, DateTime canceledStartTime) { int idChannel = schedule.IdChannel; CancelEpisode(canceledStartTime, parentSchedule, idChannel); TvServer server = new TvServer(); bool wasRecStopped = StopRecording(schedule); bool wasDeleted = DeleteEntireOrOnceSchedule(schedule, parentSchedule); server.OnNewSchedule(); return(wasRecStopped || wasDeleted); }
private static bool StopRecording(Schedule schedule) { bool stoppedRec = false; bool isRec = TvDatabase.Schedule.IsScheduleRecording(schedule.IdSchedule); if (isRec) { TvServer server = new TvServer(); server.StopRecordingSchedule(schedule.IdSchedule); stoppedRec = true; } return(stoppedRec); }
private void mpButtonDel_Click(object sender, EventArgs e) { foreach (ListViewItem item in listView1.SelectedItems) { Schedule schedule = (Schedule)item.Tag; TvServer server = new TvServer(); server.StopRecordingSchedule(schedule.IdSchedule); schedule.Delete(); listView1.Items.Remove(item); } listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); }
public void GrabData(object ParamTo) { DataGrabArgs ParamToUse = (DataGrabArgs)ParamTo; int ChannelID = ParamToUse.ChannelID; int Seconds = ParamToUse.Seconds; List <int> Pids = ParamToUse.Pids; string Filename = "Custom_" + ChannelID.ToString() + ".ts"; Complete = false; TvServer server = new TvServer(); IUser user = new User(Filename, false); WantedPIDS = Pids; TvResult result = default(TvResult); //Used to start and ensure we can tune the channel result = server.StartTimeShifting(ref user, ChannelID, out _card); if ((result == TvResult.Succeeded)) { Thread.Sleep(2000); _card.StopTimeShifting(); result = server.StartTimeShiftingWithCustom(ref user, ChannelID, out _card, Filename, Pids); if ((result == TvResult.Succeeded)) { string NewFile = _card.TimeshiftFolder + "\\" + Filename; TimeStamp = DateTime.Now.AddSeconds(Seconds); ProcessPackets(NewFile); Decoders.Remove(ChannelID); } else { Decoders.Remove(ChannelID); if (OnComplete != null) { OnComplete(true, result.ToString()); } } } else { Decoders.Remove(ChannelID); if (OnComplete != null) { OnComplete(true, result.ToString()); } } }
private void OnMoveUp(int item) { if (item == 0) { return; } m_iSelectedItem = item - 1; GUIListItem pItem = GetItem(GetSelectedItemNo()); if (pItem == null) { return; } Schedule rec = pItem.TVTag as Schedule; if (rec == null) { return; } GUIListItem tmpItem; Schedule tmprec; for (int i = 0; i < item - 1; ++i) { tmpItem = GetItem(i); tmprec = tmpItem.TVTag as Schedule; tmprec.Priority = Schedule.HighestPriority - i; } for (int i = item - 1; i < GetItemCount(); ++i) { if (item == i) { continue; } tmpItem = GetItem(i); tmprec = tmpItem.TVTag as Schedule; tmprec.Priority = Schedule.HighestPriority - i - 1; } rec.Priority = Schedule.HighestPriority - item + 1; rec.Persist(); TvServer server = new TvServer(); server.OnNewSchedule(); LoadDirectory(); }
private void ScanForUsableChannels() { _abortScanning = false; _isScanning = true; NotifyForm dlg = new NotifyForm("Testing all checked tv channels...", "Please be patient..."); dlg.Show(this); dlg.WaitForDisplay(); // Create tunning objects Server, User and Card TvServer _server = new TvServer(); IUser _user = new User(); VirtualCard _card; foreach (ListViewItem item in mpListView1.Items) { if (item.Checked == false) { continue; // do not test "un-checked" channels } Channel _channel = (Channel)item.Tag; // get channel dlg.SetMessage( string.Format("Please be patient...\n\nTesting channel {0} ( {1} of {2} )", _channel.DisplayName, item.Index + 1, mpListView1.Items.Count)); Application.DoEvents(); TvResult result = _server.StartTimeShifting(ref _user, _channel.IdChannel, out _card); if (result == TvResult.Succeeded) { _card.StopTimeShifting(); } else { item.Checked = false; _channel.VisibleInGuide = false; _channel.Persist(); } if (_abortScanning) { break; } } mpButtonTestAvailable.Text = "Test"; dlg.Close(); _isScanning = false; _abortScanning = false; }
public static void OnSetEpisodesToKeep(Schedule rec) { Schedule schedule = Schedule.Retrieve(rec.IdSchedule); GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg == null) { return; } dlg.Reset(); dlg.SetHeading(887); //quality settings dlg.ShowQuickNumbers = false; dlg.AddLocalizedString(889); //All episodes for (int i = 1; i < 40; ++i) { dlg.Add(i.ToString() + " " + GUILocalizeStrings.Get(874)); } if (schedule.MaxAirings == Int32.MaxValue) { dlg.SelectedLabel = 0; } else { dlg.SelectedLabel = schedule.MaxAirings; } dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedLabel == -1) { return; } if (dlg.SelectedLabel == 0) { schedule.MaxAirings = Int32.MaxValue; } else { schedule.MaxAirings = dlg.SelectedLabel; } schedule.Persist(); TvServer server = new TvServer(); server.OnNewSchedule(); }
private static bool StopRecAndDeleteSchedule(Schedule schedule, Schedule parentSchedule, int idChannel, DateTime canceledStartTime) { bool wasCanceled = CancelEpisode(canceledStartTime, parentSchedule, idChannel); bool wasDeleted = false; if (canceledStartTime == schedule.StartTime) { bool isScheduleTypeOnce = IsScheduleTypeOnce(schedule.IdSchedule); wasDeleted = StopRecording(schedule); if (isScheduleTypeOnce && !wasDeleted) { wasDeleted = DeleteSchedule(schedule.IdSchedule); } } TvServer server = new TvServer(); server.OnNewSchedule(); return(wasDeleted || wasCanceled); }
public new DialogResult ShowDialog(IWin32Window owner) { Text = "Preview " + _channel.DisplayName; TvServer server = new TvServer(); IUser user = new User("setuptv", false); TvResult result = server.StartTimeShifting(ref user, _channel.IdChannel, out _card); if (result != TvResult.Succeeded) { MessageBox.Show("Preview failed:" + result); Close(); return(DialogResult.None); } Log.Info("preview {0} user:{1} {2} {3} {4}", _channel.DisplayName, user.CardId, user.SubChannel, user.Name, _card.TimeShiftFileName); _player = new Player(); _player.Play(_card.TimeShiftFileName, this); return(base.ShowDialog(owner)); }
public void ShowVideo(IWin32Window owner) { Text = "Preview " + _channel.DisplayName; TvServer server = new TvServer(); IUser user = UserFactory.CreateBasicUser("setuptv"); TvResult result = server.StartTimeShifting(ref user, _channel.IdChannel, out _card); if (result != TvResult.Succeeded) { MessageBox.Show("Preview failed:" + result); Close(); throw new Exception(result.ToString()); } Log.Info("preview {0} user:{1} {2} {3} {4}", _channel.DisplayName, user.CardId, user.SubChannel, user.Name, _card.TimeShiftFileName); _player = new Player(); _player.Play(_card.TimeShiftFileName, this); this.Show(owner); }
private void OnEdit(Schedule rec) { GUIDialogDateTime dlg = (GUIDialogDateTime)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_DATETIME); if (dlg != null) { IList <Channel> channels = Channel.ListAll(); dlg.SetHeading(637); dlg.Items.Clear(); dlg.EnableChannel = true; dlg.EnableStartTime = true; TvServer server = new TvServer(); if (rec.IsRecordingProgram(rec.ReferencedChannel().CurrentProgram, true)) { dlg.EnableChannel = false; dlg.EnableStartTime = false; } foreach (Channel chan in channels) { dlg.Items.Add(chan.DisplayName); } dlg.Channel = rec.ReferencedChannel().DisplayName; dlg.StartDateTime = rec.StartTime; dlg.EndDateTime = rec.EndTime; dlg.DoModal(GetID); if (dlg.IsConfirmed) { //@rec.Channel = dlg.Channel; rec.EndTime = dlg.EndDateTime; rec.Canceled = Schedule.MinSchedule; rec.Persist(); server.OnNewSchedule(); LoadDirectory(); } } }
private void OnClick(int iItem) { m_iSelectedItem = GetSelectedItemNo(); GUIListItem item = GetItem(iItem); if (item == null) { return; } if (item.IsFolder) { if (item.Label == "..") { if (selectedItem != null) { selectedItem = null; } LoadDirectory(); return; } if (selectedItem == null) { selectedItem = item; } LoadDirectory(); return; } Schedule schedule = item.TVTag as Schedule; if (schedule == null) { return; } if (schedule.ScheduleType == (int)ScheduleRecordingType.Once) { GUIDialogYesNo dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_YES_NO); if (null != dlgYesNo) { dlgYesNo.SetHeading(GUILocalizeStrings.Get(653)); //Delete this recording? dlgYesNo.SetLine(1, schedule.ReferencedChannel().DisplayName); dlgYesNo.SetLine(2, schedule.ProgramName); dlgYesNo.SetLine(3, GUILocalizeStrings.Get(732)); //are you sure dlgYesNo.DoModal(GUIWindowManager.ActiveWindow); if (dlgYesNo.IsConfirmed) { if (schedule.ScheduleType == (int)ScheduleRecordingType.Once) { schedule.Delete(); selectedItem = null; } } } } else // advanced recording { GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg != null) { dlg.Reset(); dlg.SetHeading(schedule.ProgramName); dlg.AddLocalizedString(981); //Delete this recording dlg.AddLocalizedString(982); //Delete series recording dlg.DoModal(GetID); if (dlg.SelectedLabel == -1) { return; } switch (dlg.SelectedId) { case 981: //delete specific series CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, schedule.IdChannel, schedule.StartTime); canceledSchedule.Persist(); selectedItem = null; TvServer server = new TvServer(); server.OnNewSchedule(); break; case 982: //Delete entire recording schedule.Delete(); selectedItem = null; break; } } } LoadDirectory(); }
/// <summary> /// Ensures that the navigator has the correct current channel (retrieved from the Recorder). /// </summary> public void UpdateCurrentChannel() { Channel newChannel = null; //if current card is watching tv then use that channel int id; if (TVHome.Connected) { if (TVHome.Card.IsTimeShifting || TVHome.Card.IsRecording) { id = TVHome.Card.IdChannel; if (id >= 0) { newChannel = Channel.Retrieve(id); } } else { // else if any card is recording // then get & use that channel if (TVHome.IsAnyCardRecording) { TvServer server = new TvServer(); for (int i = 0; i < server.Count; ++i) { User user = new User(); VirtualCard card = server.CardByIndex(user, i); if (card.IsRecording) { id = card.IdChannel; if (id >= 0) { newChannel = Channel.Retrieve(id); break; } } } } } if (newChannel == null) { newChannel = m_currentChannel; } int currentChannelId = 0; int newChannelId = 0; if (m_currentChannel != null) { currentChannelId = m_currentChannel.IdChannel; } if (newChannel != null) { newChannelId = newChannel.IdChannel; } if (currentChannelId != newChannelId) { m_currentChannel = newChannel; m_currentChannel.CurrentGroup = CurrentGroup; } } }
private void OnShowContextMenu(int iItem, bool clicked) { m_iSelectedItem = iItem; GUIListItem item = GetItem(iItem); if (item == null) { return; } if (item.IsFolder && clicked) { bool noitems = false; if (item.Label == "..") { if (selectedItem != null) { selectedItem = null; } LoadDirectory(); return; } if (selectedItem == null) { IList <Schedule> seriesList = TVHome.Util.GetRecordingTimes(item.TVTag as Schedule); if (seriesList.Count < 1) { noitems = true; // no items existing } else { selectedItem = item.TVTag as Schedule; } } if (noitems == false) { LoadDirectory(); return; } } bool showSeries = btnSeries.Selected; Schedule rec = item.TVTag as Schedule; if (rec == null) { return; } Log.Info("OnShowContextMenu: Rec = {0}", rec.ToString()); GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg == null) { return; } dlg.Reset(); dlg.SetHeading(rec.ProgramName); if (showSeries && item.IsFolder) { dlg.AddLocalizedString(982); //Cancel this show (618=delete) dlg.AddLocalizedString(888); //Episodes management } else if (rec.Series == false) { dlg.AddLocalizedString(618); //delete } else { dlg.AddLocalizedString(981); //Cancel this show dlg.AddLocalizedString(982); //Delete this entire recording dlg.AddLocalizedString(888); //Episodes management } VirtualCard card; TvServer server = new TvServer(); bool isRec = Schedule.IsScheduleRecording(rec.IdSchedule); //TVHome.IsRecordingSchedule(rec, null, out card); if (isRec) { dlg.AddLocalizedString(979); //Play recording from beginning dlg.AddLocalizedString(980); //Play recording from live point } //Schedule schedDB = Schedule.Retrieve(rec.IdSchedule); //if (schedDB.ScheduleType != (int)ScheduleRecordingType.Once) //{ dlg.AddLocalizedString(1048); // settings //} dlg.DoModal(GetID); if (dlg.SelectedLabel == -1) { return; } bool isSchedRec = TvDatabase.Schedule.IsScheduleRecording(rec.IdSchedule); //TVHome.IsRecordingSchedule(rec, null, out card); string fileName = ""; if (isSchedRec) { bool isCardRec = server.IsRecording(rec.ReferencedChannel().IdChannel, out card); if (isCardRec && card != null) { fileName = card.RecordingFileName; } } Log.Info("recording fname:{0}", fileName); switch (dlg.SelectedId) { case 888: ////Episodes management TvPriorities.OnSetEpisodesToKeep(rec); break; case 1048: ////settings Schedule schedule = item.MusicTag as Schedule; if (schedule == null) { schedule = item.TVTag as Schedule; } if (schedule != null) { TVProgramInfo.CurrentRecording = schedule; GUIWindowManager.ActivateWindow((int)Window.WINDOW_TV_PROGRAM_INFO); } return; case 882: ////Quality settings TvPriorities.OnSetQuality(rec); break; case 981: //Cancel this show { var layer = new TvBusinessLayer(); // get the program that this episode is for var progs = layer.GetPrograms(rec.ReferencedChannel(), rec.StartTime, rec.EndTime); // pick up the schedule that is actually used for recording // see TVUtil.GetRecordingTimes where schedules are all spawend as one off types // and this is what rec is (ie. it does not actually exist in the database) var realSchedule = Schedule.Retrieve(rec.IdParentSchedule) ?? rec; bool res = TVUtil.DeleteRecAndSchedWithPrompt(realSchedule, progs[0]); if (res) { LoadDirectory(); } } break; case 982: //Delete series recording goto case 618; case 618: // delete entire recording { bool res = TVUtil.DeleteRecAndEntireSchedWithPrompt(rec, rec.StartTime); if (res) { if (showSeries && !item.IsFolder) { OnShowContextMenu(0, true); return; } else { LoadDirectory(); } } } break; case 979: // Play recording from beginning { Recording recDB = Recording.Retrieve(fileName); if (recDB != null) { TVUtil.PlayRecording(recDB); } } return; case 980: // Play recording from live point { TVHome.ViewChannelAndCheck(rec.ReferencedChannel()); if (g_Player.Playing) { g_Player.ShowFullScreenWindow(); } /* * g_Player.Stop(); * if (System.IO.File.Exists(fileName)) * { * g_Player.Play(fileName, g_Player.MediaType.Recording); * g_Player.SeekAbsolute(g_Player.Duration); * g_Player.ShowFullScreenWindow(); * return; * } * else * { * string url = server.GetRtspUrlForFile(fileName); * Log.Info("recording url:{0}", url); * if (url.Length > 0) * { * g_Player.Play(url, g_Player.MediaType.Recording); * * if (g_Player.Playing) * { * g_Player.SeekAbsolute(g_Player.Duration); * g_Player.SeekAbsolute(g_Player.Duration); * g_Player.ShowFullScreenWindow(); * return; * } * } * }*/ } break; } while (m_iSelectedItem >= GetItemCount() && m_iSelectedItem > 0) { m_iSelectedItem--; } GUIControl.SelectItemControl(GetID, listSchedules.GetID, m_iSelectedItem); }
private void ChangeType(Schedule rec) { GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg != null) { dlg.Reset(); dlg.SetHeading(GUILocalizeStrings.Get(616)); //616=Select Recording type //611=Record once //612=Record everytime on this channel //613=Record everytime on every channel //614=Record every week at this time //615=Record every day at this time for (int i = 611; i <= 615; ++i) { dlg.Add(GUILocalizeStrings.Get(i)); } dlg.Add(GUILocalizeStrings.Get(WeekEndTool.GetText(DayType.Record_WorkingDays))); dlg.Add(GUILocalizeStrings.Get(WeekEndTool.GetText(DayType.Record_WeekendDays))); switch ((ScheduleRecordingType)rec.ScheduleType) { case ScheduleRecordingType.Once: dlg.SelectedLabel = 0; break; case ScheduleRecordingType.EveryTimeOnThisChannel: dlg.SelectedLabel = 1; break; case ScheduleRecordingType.EveryTimeOnEveryChannel: dlg.SelectedLabel = 2; break; case ScheduleRecordingType.Weekly: dlg.SelectedLabel = 3; break; case ScheduleRecordingType.Daily: dlg.SelectedLabel = 4; break; case ScheduleRecordingType.WorkingDays: dlg.SelectedLabel = 5; break; case ScheduleRecordingType.Weekends: dlg.SelectedLabel = 6; break; case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel: dlg.SelectedLabel = 7; break; } dlg.DoModal(GetID); if (dlg.SelectedLabel == -1) { return; } switch (dlg.SelectedLabel) { case 0: //once rec.ScheduleType = (int)ScheduleRecordingType.Once; rec.Canceled = Schedule.MinSchedule; break; case 1: //everytime, this channel rec.ScheduleType = (int)ScheduleRecordingType.EveryTimeOnThisChannel; rec.Canceled = Schedule.MinSchedule; break; case 2: //everytime, all channels rec.ScheduleType = (int)ScheduleRecordingType.EveryTimeOnEveryChannel; rec.Canceled = Schedule.MinSchedule; break; case 3: //weekly rec.ScheduleType = (int)ScheduleRecordingType.Weekly; rec.Canceled = Schedule.MinSchedule; break; case 4: //daily rec.ScheduleType = (int)ScheduleRecordingType.Daily; rec.Canceled = Schedule.MinSchedule; break; case 5: //WorkingDays rec.ScheduleType = (int)ScheduleRecordingType.WorkingDays; rec.Canceled = Schedule.MinSchedule; break; case 6: //Weekends rec.ScheduleType = (int)ScheduleRecordingType.Weekends; rec.Canceled = Schedule.MinSchedule; break; case 7://Weekly everytime, this channel rec.ScheduleType = (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel; rec.Canceled = Schedule.MinSchedule; break; } rec.Persist(); TvServer server = new TvServer(); server.OnNewSchedule(); LoadDirectory(); } }
private void ShowPrograms() { if (lblOnTvNow != null) { lblOnTvNow.EnableUpDown = false; lblOnTvNow.Clear(); } if (lblOnTvNext != null) { lblOnTvNext.EnableUpDown = false; lblOnTvNext.Clear(); } // Set recorder status if (imgRecIcon != null) { VirtualCard card; TvServer server = new TvServer(); imgRecIcon.IsVisible = server.IsRecording(idChannel, out card); } if (lblZapToCannelNo != null) { lblZapToCannelNo.Label = channelNr; lblZapToCannelNo.Visible = !string.IsNullOrEmpty(channelNr); } if (LastError != null) { lblStartTime.Label = ""; lblEndTime.Label = ""; if (LastError.FailingChannel != null) { lblCurrentChannel.Label = LastError.FailingChannel.DisplayName; } if (LastError.Messages.Count > 0) { lblOnTvNow.Label = LastError.Messages[0]; // first line in "NOW" if (LastError.Messages.Count > 1) { lblOnTvNext.Label = String.Join(", ", LastError.Messages.ToArray(), 1, LastError.Messages.Count - 1); // 2nd and later in "NEXT" } } m_lastError = null; // reset member only, not the failing channel info in Navigator } else { if (lblCurrentChannel != null) { lblCurrentChannel.Label = channelName; } Channel chan = TVHome.Navigator.GetChannel(idChannel, true); Program prog = chan.GetProgramAt(m_dateTime); if (prog != null) { string strTime = String.Format("{0}-{1}", prog.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat), prog.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); if (lblCurrentTime != null) { lblCurrentTime.Label = strTime; } if (lblOnTvNow != null) { lblOnTvNow.Label = prog.Title; } if (lblStartTime != null) { strTime = String.Format("{0}", prog.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); lblStartTime.Label = strTime; } if (lblEndTime != null) { strTime = String.Format("{0} ", prog.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); lblEndTime.Label = strTime; } // next program prog = chan.GetProgramAt(prog.EndTime.AddMinutes(1)); //prog = TVHome.Navigator.GetChannel(channelName).GetProgramAt(prog.EndTime.AddMinutes(1)); if (prog != null) { if (lblOnTvNext != null) { lblOnTvNext.Label = prog.Title; } } } else { lblOnTvNow.Label = GUILocalizeStrings.Get(736); // no epg for this channel if (lblStartTime != null) { lblStartTime.Label = String.Empty; } if (lblEndTime != null) { lblEndTime.Label = String.Empty; } if (lblCurrentTime != null) { lblCurrentTime.Label = String.Empty; } } } UpdateProgressBar(); }
private void OnMoveDown(int item) { if (item == GetItemCount() - 1) { return; } m_iSelectedItem = item + 1; GUIListItem pItem = GetItem(GetSelectedItemNo()); if (pItem == null) { return; } Schedule rec = pItem.TVTag as Schedule; if (rec == null) { return; } GUIListItem tmpItem; Schedule tmprec; //0 //1 //2 ---->3 //3 ---- //4 //5 int tempPriority; for (int i = 0; i < item; ++i) { tmpItem = GetItem(i); tmprec = tmpItem.TVTag as Schedule; tempPriority = tmprec.Priority; tmprec.Priority = Schedule.HighestPriority - i; if (tempPriority != tmprec.Priority) { tmprec.Persist(); } } tmpItem = GetItem(item + 1); tmprec = tmpItem.TVTag as Schedule; tempPriority = tmprec.Priority; tmprec.Priority = Schedule.HighestPriority - item; if (tempPriority != tmprec.Priority) { tmprec.Persist(); } for (int i = item + 2; i < GetItemCount(); ++i) { tmpItem = GetItem(i); tmprec = tmpItem.TVTag as Schedule; tempPriority = tmprec.Priority; tmprec.Priority = Schedule.HighestPriority - i; if (tempPriority != tmprec.Priority) { tmprec.Persist(); } } rec.Priority = Schedule.HighestPriority - item - 1; rec.Persist(); TvServer server = new TvServer(); server.OnNewSchedule(); LoadDirectory(); }
private void OnClick(int iItem) { m_iSelectedItem = GetSelectedItemNo(); GUIListItem item = GetItem(iItem); if (item == null) { return; } Schedule rec = (Schedule)item.TVTag; GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg == null) { return; } dlg.Reset(); dlg.SetHeading(rec.ProgramName); if (rec.Series == false) { dlg.AddLocalizedString(618); //delete } else { dlg.AddLocalizedString(981); //Delete this recording dlg.AddLocalizedString(982); //Delete series recording dlg.AddLocalizedString(888); //Episodes management } VirtualCard card; TvServer server = new TvServer(); if (server.IsRecordingSchedule(rec.IdSchedule, out card)) { dlg.AddLocalizedString(979); //Play recording from beginning dlg.AddLocalizedString(980); //Play recording from live point } else { IList <TuningDetail> details = Channel.Retrieve(rec.IdChannel).ReferringTuningDetail(); foreach (TuningDetail detail in details) { if (detail.ChannelType == 0) { dlg.AddLocalizedString(882); //Quality settings break; } } } dlg.DoModal(GetID); if (dlg.SelectedLabel == -1) { return; } switch (dlg.SelectedId) { case 888: ////Episodes management OnSetEpisodesToKeep(rec); break; case 882: OnSetQuality(rec); break; case 981: //Delete this recording only { if (server.IsRecordingSchedule(rec.IdSchedule, out card)) { GUIDialogYesNo dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_YES_NO); if (null != dlgYesNo) { dlgYesNo.SetHeading(GUILocalizeStrings.Get(653)); //Delete this recording? dlgYesNo.SetLine(1, GUILocalizeStrings.Get(730)); //This schedule is recording. If you delete dlgYesNo.SetLine(2, GUILocalizeStrings.Get(731)); //the schedule then the recording is stopped. dlgYesNo.SetLine(3, GUILocalizeStrings.Get(732)); //are you sure dlgYesNo.DoModal(GUIWindowManager.ActiveWindow); if (dlgYesNo.IsConfirmed) { server.StopRecordingSchedule(rec.IdSchedule); CanceledSchedule schedule = new CanceledSchedule(rec.IdSchedule, rec.IdChannel, rec.StartTime); rec.Persist(); server.OnNewSchedule(); } } } else { server.StopRecordingSchedule(rec.IdSchedule); CanceledSchedule schedule = new CanceledSchedule(rec.IdSchedule, rec.IdChannel, rec.StartTime); rec.Persist(); server.OnNewSchedule(); } LoadDirectory(); } break; case 982: //Delete series recording goto case 618; case 618: // delete entire recording { if (server.IsRecordingSchedule(rec.IdSchedule, out card)) { GUIDialogYesNo dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_YES_NO); if (null != dlgYesNo) { dlgYesNo.SetHeading(GUILocalizeStrings.Get(653)); //Delete this recording? dlgYesNo.SetLine(1, GUILocalizeStrings.Get(730)); //This schedule is recording. If you delete dlgYesNo.SetLine(2, GUILocalizeStrings.Get(731)); //the schedule then the recording is stopped. dlgYesNo.SetLine(3, GUILocalizeStrings.Get(732)); //are you sure dlgYesNo.DoModal(GUIWindowManager.ActiveWindow); if (dlgYesNo.IsConfirmed) { server.StopRecordingSchedule(rec.IdSchedule); rec.Delete(); server.OnNewSchedule(); } } } else { rec.Delete(); server.OnNewSchedule(); } LoadDirectory(); } break; case 979: // Play recording from beginning if (g_Player.Playing && g_Player.IsTVRecording) { g_Player.Stop(true); } //TVHome.IsTVOn = true; TVHome.ViewChannel(rec.ReferencedChannel()); g_Player.SeekAbsolute(0); if (TVHome.Card.IsTimeShifting) { g_Player.ShowFullScreenWindow(); return; } break; case 980: // Play recording from live point //TVHome.IsTVOn = true; TVHome.ViewChannel(rec.ReferencedChannel()); if (TVHome.Card.IsTimeShifting) { if (g_Player.Playing) { g_Player.SeekAsolutePercentage(99); } g_Player.ShowFullScreenWindow(); return; } break; } while (m_iSelectedItem >= GetItemCount() && m_iSelectedItem > 0) { m_iSelectedItem--; } GUIControl.SelectItemControl(GetID, listPriorities.GetID, m_iSelectedItem); }
private void OnQuickRecord() { GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg == null) { return; } dlg.Reset(); dlg.SetHeading(GUILocalizeStrings.Get(891)); //Select TV Channel IList <GroupMap> channels = TVHome.Navigator.CurrentGroup.ReferringGroupMap(); foreach (GroupMap chan in channels) { GUIListItem item = new GUIListItem(chan.ReferencedChannel().DisplayName); string strLogo = Utils.GetCoverArt(Thumbs.TVChannel, chan.ReferencedChannel().DisplayName); if (string.IsNullOrEmpty(strLogo)) { strLogo = "defaultVideoBig.png"; } item.ThumbnailImage = strLogo; item.IconImageBig = strLogo; item.IconImage = strLogo; dlg.Add(item); } dlg.DoModal(GetID); if (dlg.SelectedLabel < 0) { return; } Channel selectedChannel = (channels[dlg.SelectedLabel]).ReferencedChannel(); dlg.Reset(); dlg.SetHeading(616); //select recording type for (int i = 611; i <= 615; ++i) { dlg.Add(GUILocalizeStrings.Get(i)); } dlg.Add(GUILocalizeStrings.Get(WeekEndTool.GetText(DayType.Record_WorkingDays))); dlg.Add(GUILocalizeStrings.Get(WeekEndTool.GetText(DayType.Record_WeekendDays))); Schedule rec = new Schedule(selectedChannel.IdChannel, "", Schedule.MinSchedule, Schedule.MinSchedule); TvBusinessLayer layer = new TvBusinessLayer(); rec.PreRecordInterval = Int32.Parse(layer.GetSetting("preRecordInterval", "5").Value); rec.PostRecordInterval = Int32.Parse(layer.GetSetting("postRecordInterval", "5").Value); rec.ScheduleType = (int)ScheduleRecordingType.Once; DateTime dtNow = DateTime.Now; int day; day = 0; dlg.Reset(); dlg.SetHeading(142); //select time dlg.ShowQuickNumbers = false; //time //int no = 0; int hour, minute, steps; steps = 15; dlg.Add("00:00"); for (hour = 0; hour <= 23; hour++) { for (minute = 0; minute < 60; minute += steps) { if (hour == 0 && minute == 0) { continue; } string time; if (hour < 10) { time = "0" + hour; } else { time = hour.ToString(); } time += ":"; if (minute < 10) { time = time + "0" + minute; } else { time += minute.ToString(); } //if (hour < 1) time = String.Format("{0} {1}", minute, GUILocalizeStrings.Get(3004)); dlg.Add(time); } } // pre-select the current time dlg.SelectedLabel = (DateTime.Now.Hour * (60 / steps)) + (Convert.ToInt16(DateTime.Now.Minute / steps)); dlg.DoModal(GetID); if (dlg.SelectedLabel == -1) { return; } int mins = (dlg.SelectedLabel) * steps; hour = (mins) / 60; minute = ((mins) % 60); dlg.Reset(); dlg.SetHeading(180); //select time dlg.ShowQuickNumbers = false; //duration for (float hours = 0.5f; hours <= 24f; hours += 0.5f) { dlg.Add(String.Format("{0} {1}", hours.ToString("f2"), GUILocalizeStrings.Get(3002))); } dlg.DoModal(GetID); if (dlg.SelectedLabel == -1) { return; } int duration = (dlg.SelectedLabel + 1) * 30; dtNow = DateTime.Now.AddDays(day); rec.StartTime = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day, hour, minute, 0, 0); rec.EndTime = rec.StartTime.AddMinutes(duration); rec.ProgramName = GUILocalizeStrings.Get(413) + " (" + rec.ReferencedChannel().DisplayName + ")"; rec.Persist(); TvServer server = new TvServer(); server.OnNewSchedule(); GUIWindowManager.ShowPreviousWindow(); }
public static void OnSetQuality(Schedule rec) { GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg != null) { dlg.Reset(); dlg.SetHeading(882); dlg.ShowQuickNumbers = true; dlg.AddLocalizedString(968); dlg.AddLocalizedString(965); dlg.AddLocalizedString(966); dlg.AddLocalizedString(967); VIDEOENCODER_BITRATE_MODE _newBitRate = rec.BitRateMode; switch (_newBitRate) { case VIDEOENCODER_BITRATE_MODE.NotSet: dlg.SelectedLabel = 0; break; case VIDEOENCODER_BITRATE_MODE.ConstantBitRate: dlg.SelectedLabel = 1; break; case VIDEOENCODER_BITRATE_MODE.VariableBitRateAverage: dlg.SelectedLabel = 2; break; case VIDEOENCODER_BITRATE_MODE.VariableBitRatePeak: dlg.SelectedLabel = 3; break; } dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedLabel == -1) { return; } switch (dlg.SelectedLabel) { case 0: // Not Set _newBitRate = VIDEOENCODER_BITRATE_MODE.NotSet; break; case 1: // CBR _newBitRate = VIDEOENCODER_BITRATE_MODE.ConstantBitRate; break; case 2: // VBR _newBitRate = VIDEOENCODER_BITRATE_MODE.VariableBitRateAverage; break; case 3: // VBR Peak _newBitRate = VIDEOENCODER_BITRATE_MODE.VariableBitRatePeak; break; } rec.BitRateMode = _newBitRate; rec.Persist(); dlg.Reset(); dlg.SetHeading(882); dlg.ShowQuickNumbers = true; dlg.AddLocalizedString(968); dlg.AddLocalizedString(886); //Default dlg.AddLocalizedString(993); // Custom dlg.AddLocalizedString(893); //Portable dlg.AddLocalizedString(883); //Low dlg.AddLocalizedString(884); //Medium dlg.AddLocalizedString(885); //High QualityType _newQuality = rec.QualityType; switch (_newQuality) { case QualityType.NotSet: dlg.SelectedLabel = 0; break; case QualityType.Default: dlg.SelectedLabel = 1; break; case QualityType.Custom: dlg.SelectedLabel = 2; break; case QualityType.Portable: dlg.SelectedLabel = 3; break; case QualityType.Low: dlg.SelectedLabel = 4; break; case QualityType.Medium: dlg.SelectedLabel = 5; break; case QualityType.High: dlg.SelectedLabel = 6; break; } dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedLabel == -1) { return; } switch (dlg.SelectedLabel) { case 0: // Not Set _newQuality = QualityType.NotSet; break; case 1: // Default _newQuality = QualityType.Default; break; case 2: // Custom _newQuality = QualityType.Custom; break; case 3: // Protable _newQuality = QualityType.Portable; break; case 4: // Low _newQuality = QualityType.Low; break; case 5: // Medium _newQuality = QualityType.Medium; break; case 6: // High _newQuality = QualityType.High; break; } rec.QualityType = _newQuality; rec.Persist(); } TvServer server = new TvServer(); server.OnNewSchedule(); }
private void SetLabels() { for (int i = 0; i < GetItemCount(); ++i) { GUIListItem item = GetItem(i); Schedule rec = (Schedule)item.TVTag; //@ /* * switch (rec.Status) * { * case Schedule.RecordingStatus.Waiting: * item.Label3 = GUILocalizeStrings.Get(681);//waiting * break; * case Schedule.RecordingStatus.Finished: * item.Label3 = GUILocalizeStrings.Get(683);//Finished * break; * case Schedule.RecordingStatus.Canceled: * item.Label3 = GUILocalizeStrings.Get(684);//Canceled * break; * }*/ // check with recorder. VirtualCard card; TvServer server = new TvServer(); if (server.IsRecordingSchedule(rec.IdSchedule, out card)) { item.Label3 = GUILocalizeStrings.Get(682); //Recording if (rec.ScheduleType != (int)ScheduleRecordingType.Once) { item.PinImage = Thumbs.TvRecordingSeriesIcon; } else { item.PinImage = Thumbs.TvRecordingIcon; } } else if (rec.ReferringConflicts().Count > 0) { item.PinImage = Thumbs.TvConflictRecordingIcon; } else { item.PinImage = String.Empty; } string strType = String.Empty; item.Label = rec.ProgramName; string strTime = String.Format("{0} {1} - {2}", rec.StartTime.ToShortDateString(), rec.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat), rec.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); string day; switch ((ScheduleRecordingType)rec.ScheduleType) { case ScheduleRecordingType.Once: item.Label2 = String.Format("{0} {1} - {2}", Utils.GetShortDayString(rec.StartTime), rec.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat), rec.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); ; break; case ScheduleRecordingType.Daily: strTime = String.Format("{0}-{1}", rec.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat), rec.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); strType = GUILocalizeStrings.Get(648); item.Label2 = String.Format("{0} {1}", strType, strTime); break; case ScheduleRecordingType.WorkingDays: strTime = String.Format("{0}-{1} {2}-{3}", GUILocalizeStrings.Get(WeekEndTool.GetText(DayType.FirstWorkingDay)), GUILocalizeStrings.Get(WeekEndTool.GetText(DayType.LastWorkingDay)), rec.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat), rec.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); strType = GUILocalizeStrings.Get(648); item.Label2 = String.Format("{0} {1}", strType, strTime); break; case ScheduleRecordingType.Weekends: strTime = String.Format("{0}-{1} {2}-{3}", GUILocalizeStrings.Get(WeekEndTool.GetText(DayType.FirstWeekendDay)), GUILocalizeStrings.Get(WeekEndTool.GetText(DayType.LastWeekendDay)), rec.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat), rec.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); strType = GUILocalizeStrings.Get(649); item.Label2 = String.Format("{0} {1}", strType, strTime); break; case ScheduleRecordingType.Weekly: switch (rec.StartTime.DayOfWeek) { case DayOfWeek.Monday: day = GUILocalizeStrings.Get(11); break; case DayOfWeek.Tuesday: day = GUILocalizeStrings.Get(12); break; case DayOfWeek.Wednesday: day = GUILocalizeStrings.Get(13); break; case DayOfWeek.Thursday: day = GUILocalizeStrings.Get(14); break; case DayOfWeek.Friday: day = GUILocalizeStrings.Get(15); break; case DayOfWeek.Saturday: day = GUILocalizeStrings.Get(16); break; default: day = GUILocalizeStrings.Get(17); break; } strTime = String.Format("{0}-{1}", rec.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat), rec.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat)); strType = GUILocalizeStrings.Get(649); item.Label2 = String.Format("{0} {1} {2}", strType, day, strTime); break; case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel: switch (rec.StartTime.DayOfWeek) { case DayOfWeek.Monday: day = GUILocalizeStrings.Get(11); break; case DayOfWeek.Tuesday: day = GUILocalizeStrings.Get(12); break; case DayOfWeek.Wednesday: day = GUILocalizeStrings.Get(13); break; case DayOfWeek.Thursday: day = GUILocalizeStrings.Get(14); break; case DayOfWeek.Friday: day = GUILocalizeStrings.Get(15); break; case DayOfWeek.Saturday: day = GUILocalizeStrings.Get(16); break; default: day = GUILocalizeStrings.Get(17); break; } item.Label = rec.ProgramName; item.Label2 = GUILocalizeStrings.Get(990001, new object[] { day, rec.ReferencedChannel().DisplayName }); break; case ScheduleRecordingType.EveryTimeOnThisChannel: item.Label = rec.ProgramName; item.Label2 = GUILocalizeStrings.Get(650); break; case ScheduleRecordingType.EveryTimeOnEveryChannel: item.Label = rec.ProgramName; item.Label2 = GUILocalizeStrings.Get(651); break; } } }
private void mpButtonTimeShift_Click(object sender, EventArgs e) { if (ServiceHelper.IsStopped) { return; } if (mpComboBoxChannels.SelectedItem == null) { return; } int id = ((ComboBoxExItem)mpComboBoxChannels.SelectedItem).Id; TvServer server = new TvServer(); VirtualCard card = GetCardTimeShiftingChannel(id); if (card != null) { card.StopTimeShifting(); mpButtonRec.Enabled = false; } else { string timeShiftingFilename = string.Empty; int cardId = -1; foreach (ListViewItem listViewItem in mpListView1.SelectedItems) { if (listViewItem.SubItems[2].Text != "disabled") { cardId = Convert.ToInt32(listViewItem.SubItems[0].Tag); break; // Keep the first card enabled selected only } } IUser user = UserFactory.CreateSchedulerUser(); user.Name = "setuptv-" + id + "-" + cardId; user.CardId = cardId; TvResult result = server.StartTimeShifting(ref user, id, out card, cardId != -1); if (result != TvResult.Succeeded) { switch (result) { case TvResult.NoPmtFound: MessageBox.Show(this, "No PMT found"); break; case TvResult.NoSignalDetected: MessageBox.Show(this, "No signal"); break; case TvResult.CardIsDisabled: MessageBox.Show(this, "Card is not enabled"); break; case TvResult.AllCardsBusy: MessageBox.Show(this, "All cards are busy"); break; case TvResult.ChannelIsScrambled: MessageBox.Show(this, "Channel is scrambled"); break; case TvResult.NoVideoAudioDetected: MessageBox.Show(this, "No Video/Audio detected"); break; case TvResult.UnableToStartGraph: MessageBox.Show(this, "Unable to create/start graph"); break; case TvResult.ChannelNotMappedToAnyCard: MessageBox.Show(this, "Channel is not mapped to any card"); break; case TvResult.NoTuningDetails: MessageBox.Show(this, "No tuning information available for this channel"); break; case TvResult.UnknownChannel: MessageBox.Show(this, "Unknown channel"); break; case TvResult.UnknownError: MessageBox.Show(this, "Unknown error occured"); break; case TvResult.ConnectionToSlaveFailed: MessageBox.Show(this, "Cannot connect to slave server"); break; case TvResult.NotTheOwner: MessageBox.Show(this, "Failed since card is in use and we are not the owner"); break; case TvResult.GraphBuildingFailed: MessageBox.Show(this, "Unable to create graph"); break; case TvResult.SWEncoderMissing: MessageBox.Show(this, "No suppported software encoder installed"); break; case TvResult.NoFreeDiskSpace: MessageBox.Show(this, "No free disk space"); break; case TvResult.TuneCancelled: MessageBox.Show(this, "Tune cancelled"); break; } } else { mpButtonRec.Enabled = true; } } }