Example #1
0
        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);
        }
Example #2
0
        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();
        }
Example #3
0
        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();
        }
Example #4
0
        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);
        }
Example #5
0
        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();
                }
            }
        }
Example #6
0
        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();
        }
Example #7
0
        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();
            }
        }
Example #8
0
        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();
        }
Example #9
0
        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);
        }
Example #10
0
        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();
        }
Example #11
0
        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();
        }