コード例 #1
0
ファイル: ManualSchedule.cs プロジェクト: twemperor/ARGUS-TV
 private void OnChangeName()
 {
     if (_upcomingProgram != null)
     {
         Schedule schedule = SchedulerAgent.GetScheduleById(_upcomingProgram.ScheduleId);
         if (schedule == null)
         {
             return;
         }
         string          schedname = schedule.Name;
         VirtualKeyboard keyboard  = (VirtualKeyboard)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_VIRTUAL_KEYBOARD);
         if (keyboard != null)
         {
             keyboard.Reset();
             keyboard.IsSearchKeyboard = false;
             keyboard.Text             = schedname ?? String.Empty;
             keyboard.DoModal(GetID);
             if (keyboard.IsConfirmed)
             {
                 schedule.Name = keyboard.Text;
                 SchedulerAgent.SaveSchedule(schedule);
             }
         }
     }
 }
コード例 #2
0
ファイル: ManualSchedule.cs プロジェクト: twemperor/ARGUS-TV
 private void OnPriority()
 {
     if (_upcomingProgram != null)
     {
         Schedule schedule = SchedulerAgent.GetScheduleById(_upcomingProgram.ScheduleId);
         if (schedule == null)
         {
             return;
         }
         GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
         if (dlg != null)
         {
             dlg.Reset();
             dlg.SetHeading(Utility.GetLocalizedText(TextId.RecordingsListItemsSuffix));
             dlg.Add(Utility.GetLocalizedText(TextId.VeryLow));
             dlg.Add(Utility.GetLocalizedText(TextId.Low));
             dlg.Add(Utility.GetLocalizedText(TextId.Normal));
             dlg.Add(Utility.GetLocalizedText(TextId.High));
             dlg.Add(Utility.GetLocalizedText(TextId.VeryHigh));
             dlg.SelectedLabel = (int)schedule.SchedulePriority + 2;
             dlg.DoModal(GetID);
             if (dlg.SelectedLabel >= 0)
             {
                 schedule.SchedulePriority = (SchedulePriority)(dlg.SelectedLabel - 2);
                 SchedulerAgent.SaveSchedule(schedule);
             }
         }
     }
 }
コード例 #3
0
ファイル: ManualSchedule.cs プロジェクト: twemperor/ARGUS-TV
        private void OnKeep()
        {
            if (_upcomingProgram != null)
            {
                Schedule schedule = SchedulerAgent.GetScheduleById(_upcomingProgram.ScheduleId);
                if (schedule == null)
                {
                    return;
                }

                GUIDialogMenu dialog = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
                if (dialog == null)
                {
                    return;
                }
                dialog.Reset();

                dialog.SetHeading(1042); // Keep until
                dialog.Add(Utility.GetLocalizedText(TextId.UntilSpaceNeeded));
                dialog.Add(Utility.GetLocalizedText(TextId.NumberOfDays));
                dialog.Add(Utility.GetLocalizedText(TextId.NumberOfEpisodes));
                dialog.Add(Utility.GetLocalizedText(TextId.NumberOfWatchedEpisodes));
                dialog.Add(Utility.GetLocalizedText(TextId.Forever));

                switch (schedule.KeepUntilMode)
                {
                case KeepUntilMode.UntilSpaceIsNeeded:
                    dialog.SelectedLabel = 0;
                    break;

                case KeepUntilMode.NumberOfDays:
                    dialog.SelectedLabel = 1;
                    break;

                case KeepUntilMode.NumberOfEpisodes:
                    dialog.SelectedLabel = 2;
                    break;

                case KeepUntilMode.NumberOfWatchedEpisodes:
                    dialog.SelectedLabel = 3;
                    break;

                case KeepUntilMode.Forever:
                    dialog.SelectedLabel = 4;
                    break;
                }

                dialog.DoModal(GetID);
                if (dialog.SelectedId == -1)
                {
                    return;
                }

                switch (dialog.SelectedLabel)
                {
                case 0:
                    schedule.KeepUntilMode = KeepUntilMode.UntilSpaceIsNeeded;
                    break;

                case 1:
                {
                    int?value = GetKeepValue(1045, KeepUntilMode.NumberOfDays, 3014, 3015,
                                             schedule.KeepUntilMode == KeepUntilMode.NumberOfDays ? schedule.KeepUntilValue : 7);
                    if (value.HasValue)
                    {
                        schedule.KeepUntilMode  = KeepUntilMode.NumberOfDays;
                        schedule.KeepUntilValue = value;
                    }
                }
                break;

                case 2:
                {
                    int?value = GetKeepValue(887, KeepUntilMode.NumberOfEpisodes, 682, 914,
                                             schedule.KeepUntilMode == KeepUntilMode.NumberOfEpisodes ? schedule.KeepUntilValue : 3);
                    if (value.HasValue)
                    {
                        schedule.KeepUntilMode  = KeepUntilMode.NumberOfEpisodes;
                        schedule.KeepUntilValue = value;
                    }
                }
                break;

                case 3:
                {
                    int?value = GetKeepValue(887, KeepUntilMode.NumberOfWatchedEpisodes, 682, 914,
                                             schedule.KeepUntilMode == KeepUntilMode.NumberOfWatchedEpisodes ? schedule.KeepUntilValue : 3);
                    if (value.HasValue)
                    {
                        schedule.KeepUntilMode  = KeepUntilMode.NumberOfWatchedEpisodes;
                        schedule.KeepUntilValue = value;
                    }
                }
                break;

                case 4:
                    schedule.KeepUntilMode = KeepUntilMode.Forever;
                    break;
                }

                if (schedule != null)
                {
                    SchedulerAgent.SaveSchedule(schedule);
                }
            }
        }
コード例 #4
0
ファイル: ManualSchedule.cs プロジェクト: twemperor/ARGUS-TV
        private void Onrecord(ScheduleType scheduleType)
        {
            Schedule schedule = null;

            if (_upcomingProgram != null)
            {
                schedule = SchedulerAgent.GetScheduleById(_upcomingProgram.ScheduleId);
            }
            if (_upcomingProgram != null && schedule != null &&
                schedule.ScheduleType == scheduleType)   //delete schedule
            {
                if (_upcomingProgram.IsCancelled)
                {
                    SchedulerAgent.UncancelUpcomingProgram(_upcomingProgram.ScheduleId, _upcomingProgram.GuideProgramId, _upcomingProgram.Channel.ChannelId, _upcomingProgram.StartTime);
                    try
                    {
                        //refresh _upcomingProgram
                        _upcomingProgram = SchedulerAgent.GetUpcomingPrograms(schedule, true)[0];
                    }
                    catch { }
                }
                else
                {
                    if (_upcomingProgram.IsPartOfSeries)
                    {
                        GUIDialogYesNo dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_YES_NO);
                        if (dlgYesNo != null)
                        {
                            dlgYesNo.SetHeading(Utility.GetLocalizedText(TextId.DeleteEntireSchedule));
                            dlgYesNo.SetLine(1, "\"" + schedule.Name + "\"");
                            dlgYesNo.SetLine(2, Utility.GetLocalizedText(TextId.AreYouSure));
                            dlgYesNo.SetLine(3, String.Empty);
                            dlgYesNo.SetDefaultToYes(false);
                            dlgYesNo.DoModal(GUIWindowManager.ActiveWindow);
                            if (dlgYesNo.IsConfirmed)
                            {
                                SchedulerAgent.DeleteSchedule(schedule.ScheduleId);
                                _upcomingProgram = null;
                            }
                        }
                    }
                    else
                    {
                        SchedulerAgent.DeleteSchedule(_upcomingProgram.ScheduleId);
                        _upcomingProgram = null;
                    }
                }
            }
            else//create new schedule
            {
                TimeSpan           duration   = new TimeSpan(Int32.Parse(_spinHoursDuration.GetLabel()), Int32.Parse(_spinMinutesDuration.GetLabel()), 0);
                DateTime           startTime  = new DateTime(Int32.Parse(_spinStartYear.GetLabel()), Int32.Parse(_spinStartMonth.GetLabel()), Int32.Parse(_spinStartDay.GetLabel()), Int32.Parse(_spinStartHour.GetLabel()), Int32.Parse(_spinStartMinute.GetLabel()), 0);
                ScheduleDaysOfWeek daysOfWeek = new ScheduleDaysOfWeek();

                //TODO: What if we have multiple channels with the same name
                Channel channel = SchedulerAgent.GetChannelByDisplayName(_channelType, _spinChannel.GetLabel());

                Schedule newSchedule = null;
                newSchedule = SchedulerAgent.CreateNewSchedule(_channelType, scheduleType);
                newSchedule.Rules.Add(ScheduleRuleType.Channels, channel.ChannelId);
                newSchedule.Rules.Add(ScheduleRuleType.ManualSchedule, startTime, new ScheduleTime(duration));
                if (!_recordOnce)
                {
                    string days = " ";
                    if (_mondayButton.Selected)
                    {
                        daysOfWeek = daysOfWeek | ScheduleDaysOfWeek.Mondays;
                        days      += Utility.GetLocalizedText(TextId.Mon) + ",";
                    }
                    if (_tuesdayButton.Selected)
                    {
                        daysOfWeek = daysOfWeek | ScheduleDaysOfWeek.Tuesdays;
                        days      += Utility.GetLocalizedText(TextId.Tue) + ",";
                    }
                    if (_wednesdayButton.Selected)
                    {
                        daysOfWeek = daysOfWeek | ScheduleDaysOfWeek.Wednesdays;
                        days      += Utility.GetLocalizedText(TextId.Wed) + ",";
                    }
                    if (_thursdayButton.Selected)
                    {
                        daysOfWeek = daysOfWeek | ScheduleDaysOfWeek.Thursdays;
                        days      += Utility.GetLocalizedText(TextId.Thu) + ",";
                    }
                    if (_fridayButton.Selected)
                    {
                        daysOfWeek = daysOfWeek | ScheduleDaysOfWeek.Fridays;
                        days      += Utility.GetLocalizedText(TextId.Fri) + ",";
                    }
                    if (_saturdayButton.Selected)
                    {
                        daysOfWeek = daysOfWeek | ScheduleDaysOfWeek.Saturdays;
                        days      += Utility.GetLocalizedText(TextId.Sat) + ",";
                    }
                    if (_sundayButton.Selected)
                    {
                        daysOfWeek = daysOfWeek | ScheduleDaysOfWeek.Sundays;
                        days      += Utility.GetLocalizedText(TextId.Sun) + ",";
                    }
                    days = days.Remove(days.Length - 1);
                    newSchedule.Rules.Add(ScheduleRuleType.DaysOfWeek, daysOfWeek);
                    newSchedule.Name = String.Format(CultureInfo.CurrentCulture, "{0} {1} {2:t}-{3:t}", channel.DisplayName, days, startTime, startTime.Add(duration));
                }
                else
                {
                    newSchedule.Name = String.Format(CultureInfo.CurrentCulture, "{0} {1:g}-{2:t}", channel.DisplayName, startTime, startTime.Add(duration));
                }

                //TODO: try to prevent dublicate manual schedules
                //and find a better way to get the newly created "_schedule" and  "_upcomingProgram"
                if (newSchedule != null)
                {
                    newSchedule.ScheduleType = scheduleType;
                    SchedulerAgent.SaveSchedule(newSchedule);

                    bool found = false;
                    UpcomingProgram[] _programs = SchedulerAgent.GetAllUpcomingPrograms(scheduleType, true);
                    foreach (UpcomingProgram _prog in _programs)
                    {
                        if (_prog.Channel.ChannelId == channel.ChannelId &&
                            _prog.Duration == duration &&
                            !found)
                        {
                            Schedule _schedule = SchedulerAgent.GetScheduleById(_prog.ScheduleId);
                            if (_schedule.Rules.FindRuleByType(ScheduleRuleType.ManualSchedule) != null)
                            {
                                if (_schedule.Name == newSchedule.Name)
                                {
                                    if (_recordOnce &&
                                        _prog.StartTime == startTime)
                                    {
                                        _upcomingProgram = _prog;
                                        found            = true;
                                    }
                                    else if (!_recordOnce && _schedule.Rules.FindRuleByType(ScheduleRuleType.DaysOfWeek) != null &&
                                             _schedule.Rules.FindRuleByType(ScheduleRuleType.DaysOfWeek).Arguments[0].ToString() == daysOfWeek.ToString() &&
                                             Convert.ToDateTime(_schedule.Rules.FindRuleByType(ScheduleRuleType.ManualSchedule).Arguments[0]) == startTime)
                                    {
                                        _upcomingProgram = _prog;
                                        found            = true;
                                    }
                                    Update(_schedule);
                                    break;
                                }
                            }
                        }
                    }

                    if (!found)
                    {
                        GUIWindowManager.ShowPreviousWindow();
                    }
                }
            }
        }
コード例 #5
0
ファイル: ManualSchedule.cs プロジェクト: twemperor/ARGUS-TV
        private void UpdateDateTime()
        {
            DateTime     time        = DateTime.Now;
            Schedule     sched       = null;
            ScheduleRule _manualRule = null;
            int          valueYear   = 0;
            bool         yearFound   = true;

            if (_upcomingProgram != null)
            {
                sched = SchedulerAgent.GetScheduleById(_upcomingProgram.ScheduleId);
                if (sched != null)
                {
                    yearFound   = false;
                    _manualRule = sched.Rules.FindRuleByType(ScheduleRuleType.ManualSchedule);
                    if (_manualRule != null)
                    {
                        time = Convert.ToDateTime(_manualRule.Arguments[0]);
                    }
                }
            }

            for (int i = DateTime.Now.Year; i <= DateTime.Now.Year + 2; i++)
            {
                _spinStartYear.AddLabel(i.ToString(), 0);
                if (_upcomingProgram != null && sched != null && yearFound == false)
                {
                    if (i.ToString() == time.Year.ToString())
                    {
                        yearFound = true;
                    }
                    valueYear++;
                }
            }

            if (yearFound == false)
            {
                // year not found in list, add year in list
                _spinStartYear.AddLabel(time.ToString(), 0);
                yearFound = true;
                valueYear++;
            }

            for (int i = 1; i <= 12; i++)
            {
                if (i < 10)
                {
                    _spinStartMonth.AddLabel("0" + i.ToString(), 0);
                }
                else
                {
                    _spinStartMonth.AddLabel(i.ToString(), 0);
                }
            }

            UpdateDaysinMonth(Int32.Parse(_spinStartMonth.GetLabel()), Int32.Parse(_spinStartYear.GetLabel()));

            for (int i = 0; i <= 23; i++)
            {
                if (i < 10)
                {
                    _spinStartHour.AddLabel("0" + i.ToString(), 0);
                    _spinHoursDuration.AddLabel("0" + i.ToString(), 0);
                }
                else
                {
                    _spinStartHour.AddLabel(i.ToString(), 0);
                    _spinHoursDuration.AddLabel(i.ToString(), 0);
                }
            }

            for (int i = 0; i <= 59; i++)
            {
                if (i < 10)
                {
                    _spinStartMinute.AddLabel("0" + i.ToString(), 0);
                    _spinMinutesDuration.AddLabel("0" + i.ToString(), 0);
                }
                else
                {
                    _spinStartMinute.AddLabel(i.ToString(), 0);
                    _spinMinutesDuration.AddLabel(i.ToString(), 0);
                }
            }

            _spinStartMonth.Value  = (time.Month - 1);
            _spinStartDay.Value    = (time.Day - 1);
            _spinStartHour.Value   = time.Hour;
            _spinStartMinute.Value = time.Minute;

            if (_upcomingProgram != null && sched != null && _manualRule != null)
            {
                if (yearFound)
                {
                    _spinStartYear.Value = (valueYear - 1);
                }
                _spinHoursDuration.Value   = _upcomingProgram.Duration.Hours;
                _spinMinutesDuration.Value = _upcomingProgram.Duration.Minutes;
            }
            else
            {
                //default duration = 1 hour
                _spinHoursDuration.Value   = 1;
                _spinMinutesDuration.Value = 0;
            }
        }
コード例 #6
0
ファイル: ManualSchedule.cs プロジェクト: twemperor/ARGUS-TV
        private void UpdateChannels()
        {
            Schedule schedule     = null;
            bool     channelFound = false;
            int      channelIndex = 0;
            int      groupIndex   = 0;

            if (_upcomingProgram != null)
            {
                schedule = SchedulerAgent.GetScheduleById(_upcomingProgram.ScheduleId);
                if (schedule != null)
                {
                    _channelType = _upcomingProgram.Channel.ChannelType;
                }
            }

            List <ChannelGroup> groups = new List <ChannelGroup>(PluginMain.Navigator.GetGroups(_channelType));

            if (_spinGroup.GetLabel() == "" || _spinGroup.GetLabel() == GUILocalizeStrings.Get(2014))
            {
                _spinGroup.Reset();
                foreach (ChannelGroup group in groups)
                {
                    _spinGroup.AddLabel(group.GroupName, 0);
                }
            }

            //based on name but I don't know anything better
            string groupName = _spinGroup.GetLabel();

            _spinChannel.Reset();

            foreach (ChannelGroup group in groups)
            {
                if (group.GroupName == groupName || (channelFound == false && schedule != null))
                {
                    foreach (Channel chan in SchedulerAgent.GetChannelsInGroup(group.ChannelGroupId, true))
                    {
                        _spinChannel.AddLabel(chan.DisplayName, 0);
                        if (!channelFound && schedule != null)
                        {
                            if (_upcomingProgram.Channel.ChannelId == chan.ChannelId)
                            {
                                channelFound = true;
                            }
                            channelIndex++;
                        }
                    }
                }
                if (!channelFound)
                {
                    groupIndex++;
                }
            }

            if (!channelFound && schedule != null)
            {
                // channel not found in groups, create a "unknown group" for this channel
                _spinGroup.AddLabel(GUILocalizeStrings.Get(2014), 0);
                _spinGroup.Value = groupIndex;
                _spinChannel.Reset();
                _spinChannel.AddLabel(_upcomingProgram.Channel.DisplayName, 0);
            }

            if (channelFound)
            {
                _spinChannel.Value = channelIndex - 1;
                _spinGroup.Value   = groupIndex;
            }
        }
コード例 #7
0
ファイル: ManualSchedule.cs プロジェクト: twemperor/ARGUS-TV
        private void UpdateButtonStates()
        {
            Schedule sched = null;

            if (_upcomingProgram != null)
            {
                sched = SchedulerAgent.GetScheduleById(_upcomingProgram.ScheduleId);
            }

            if (_upcomingProgram != null &&
                sched != null &&
                sched.ScheduleType == ScheduleType.Recording &&
                !_upcomingProgram.IsCancelled)
            {
                _RecordButton.Label      = Utility.GetLocalizedText(TextId.DontRecord);
                _AlertMeButton.IsEnabled = false;
            }
            else
            {
                _RecordButton.Label      = Utility.GetLocalizedText(TextId.Record);
                _AlertMeButton.IsEnabled = true;
            }

            if (_upcomingProgram != null &&
                sched != null &&
                sched.ScheduleType == ScheduleType.Alert &&
                !_upcomingProgram.IsCancelled)
            {
                _AlertMeButton.Label = Utility.GetLocalizedText(TextId.CancelReminder);
            }
            else
            {
                _AlertMeButton.Label = Utility.GetLocalizedText(TextId.SetReminder);
            }

            _StartTimeLabel.Label  = Utility.GetLocalizedText(TextId.OnDate);
            _SelectDaysLabel.Label = Utility.GetLocalizedText(TextId.SelectDays);

            if (_upcomingProgram != null && sched != null)
            {
                try
                {
                    var daysofweekrule = sched.Rules.FindRuleByType(ScheduleRuleType.DaysOfWeek);
                    if (daysofweekrule != null)
                    {
                        string daysofweek = daysofweekrule.Arguments[0].ToString();

                        if (daysofweek.Contains(ScheduleDaysOfWeek.Mondays.ToString()))
                        {
                            _mondayButton.Selected = true;
                        }
                        if (daysofweek.Contains(ScheduleDaysOfWeek.Tuesdays.ToString()))
                        {
                            _tuesdayButton.Selected = true;
                        }
                        if (daysofweek.Contains(ScheduleDaysOfWeek.Wednesdays.ToString()))
                        {
                            _wednesdayButton.Selected = true;
                        }
                        if (daysofweek.Contains(ScheduleDaysOfWeek.Thursdays.ToString()))
                        {
                            _thursdayButton.Selected = true;
                        }
                        if (daysofweek.Contains(ScheduleDaysOfWeek.Fridays.ToString()))
                        {
                            _fridayButton.Selected = true;
                        }
                        if (daysofweek.Contains(ScheduleDaysOfWeek.Saturdays.ToString()))
                        {
                            _saturdayButton.Selected = true;
                        }
                        if (daysofweek.Contains(ScheduleDaysOfWeek.Sundays.ToString()))
                        {
                            _sundayButton.Selected = true;
                        }
                    }
                }
                catch
                {
                    Log.Error("ManualSchedule: error updating select buttons");
                }

                _spinChannel.IsEnabled         = false;
                _spinGroup.IsEnabled           = false;
                _spinHoursDuration.IsEnabled   = false;
                _spinMinutesDuration.IsEnabled = false;
                _spinStartDay.IsEnabled        = false;
                _spinStartHour.IsEnabled       = false;
                _spinStartMinute.IsEnabled     = false;
                _spinStartMonth.IsEnabled      = false;
                _spinStartYear.IsEnabled       = false;

                _mondayButton.IsEnabled    = false;
                _tuesdayButton.IsEnabled   = false;
                _wednesdayButton.IsEnabled = false;
                _thursdayButton.IsEnabled  = false;
                _fridayButton.IsEnabled    = false;
                _saturdayButton.IsEnabled  = false;
                _sundayButton.IsEnabled    = false;

                if (sched.ScheduleType == ScheduleType.Recording &&
                    !_upcomingProgram.IsCancelled)
                {
                    _KeepButton.IsEnabled     = true;
                    _PriorityButton.IsEnabled = true;
                }
                else
                {
                    _KeepButton.IsEnabled     = false;
                    _PriorityButton.IsEnabled = false;
                }

                if (_upcomingProgram.IsCancelled)
                {
                    _ChangeNameButton.IsEnabled = false;
                }
                else
                {
                    _ChangeNameButton.IsEnabled = true;
                }
            }
            else
            {
                _spinChannel.IsEnabled         = true;
                _spinGroup.IsEnabled           = true;
                _spinHoursDuration.IsEnabled   = true;
                _spinMinutesDuration.IsEnabled = true;
                _spinStartDay.IsEnabled        = true;
                _spinStartHour.IsEnabled       = true;
                _spinStartMinute.IsEnabled     = true;
                _spinStartMonth.IsEnabled      = true;
                _spinStartYear.IsEnabled       = true;

                _mondayButton.IsEnabled    = true;
                _tuesdayButton.IsEnabled   = true;
                _wednesdayButton.IsEnabled = true;
                _thursdayButton.IsEnabled  = true;
                _fridayButton.IsEnabled    = true;
                _saturdayButton.IsEnabled  = true;
                _sundayButton.IsEnabled    = true;

                _KeepButton.IsEnabled       = false;
                _PriorityButton.IsEnabled   = false;
                _ChangeNameButton.IsEnabled = false;
            }

            if (_mondayButton.Selected || _tuesdayButton.Selected || _wednesdayButton.Selected ||
                _thursdayButton.Selected || _fridayButton.Selected || _saturdayButton.Selected ||
                _sundayButton.Selected)
            {
                _StartTimeLabel.Label = Utility.GetLocalizedText(TextId.FromDate);
                _recordOnce           = false;
            }
            else
            {
                _StartTimeLabel.Label = Utility.GetLocalizedText(TextId.OnDate);
                _recordOnce           = true;
            }

            Update(sched);
        }
コード例 #8
0
        private void LoadUpcomingPrograms(ScheduleSummary schedule)
        {
            GUIControl.ClearControl(GetID, _viewsList.GetID);

            if (schedule == null)
            {
                _isInSubDirectory = false;
                bool group = false;
                if (_groupBySchedButton != null)
                {
                    group = _groupBySchedButton.Selected;
                }

                if (group)
                {
                    ScheduleSummary[] schedules = SchedulerAgent.GetAllSchedules(this._channelType, _currentProgramType, true);
                    foreach (ScheduleSummary sched in schedules)
                    {
                        GUIListItem item = CreateListItem(null, null, sched);
                        _viewsList.Add(item);
                    }
                }
                else
                {
                    if (_currentProgramType == ScheduleType.Recording)
                    {
                        List <UpcomingRecording> upcomingRecordings = new List <UpcomingRecording>(
                            this.ControlAgent.GetAllUpcomingRecordings(UpcomingRecordingsFilter.Recordings | UpcomingRecordingsFilter.CancelledByUser, false));
                        foreach (UpcomingRecording recording in upcomingRecordings)
                        {
                            if (recording.Program.Channel.ChannelType == this._channelType)
                            {
                                GUIListItem item = CreateListItem(recording.Program, recording, null);
                                _viewsList.Add(item);
                            }
                        }
                    }
                    else
                    {
                        List <UpcomingProgram> upcomingPrograms = new List <UpcomingProgram>(
                            this.SchedulerAgent.GetAllUpcomingPrograms(_currentProgramType, true));
                        foreach (UpcomingProgram program in upcomingPrograms)
                        {
                            if (program.Channel.ChannelType == this._channelType)
                            {
                                GUIListItem item = CreateListItem(program, null, null);
                                _viewsList.Add(item);
                            }
                        }
                    }
                }
            }
            else if (schedule != null)
            {
                //add prev directory folder
                GUIListItem item = new GUIListItem();
                item.Label    = _parentDirectoryLabel;
                item.IsFolder = true;
                Utils.SetDefaultIcons(item);
                _viewsList.Add(item);

                _selectedSchedule = schedule;
                if (_currentProgramType == ScheduleType.Recording)
                {
                    UpcomingRecording[] upcomingRecordings = ControlAgent.GetUpcomingRecordings(schedule.ScheduleId, true);
                    foreach (UpcomingRecording recording in upcomingRecordings)
                    {
                        item = CreateListItem(recording.Program, recording, null);
                        _viewsList.Add(item);
                    }
                }
                else
                {
                    Schedule          sched            = SchedulerAgent.GetScheduleById(schedule.ScheduleId);
                    UpcomingProgram[] upcomingPrograms = SchedulerAgent.GetUpcomingPrograms(sched, true);
                    foreach (UpcomingProgram upcomingProgram in upcomingPrograms)
                    {
                        item = CreateListItem(upcomingProgram, null, null);
                        _viewsList.Add(item);
                    }
                }

                _isInSubDirectory = true;
            }

            string strObjects = string.Format("{0}", _viewsList.Count - (_viewsList.Count > 0 && _viewsList[0].Label == _parentDirectoryLabel ? 1 : 0));

            GUIPropertyManager.SetProperty("#itemcount", strObjects);

            OnSort();
            UpdateButtonStates();
            UpdateProperties();

            if (GetItemCount() > 0)
            {
                if (_isInSubDirectory)
                {
                    while (m_iSelectedItemInFolder >= GetItemCount() && m_iSelectedItemInFolder > 0)
                    {
                        m_iSelectedItemInFolder--;
                    }
                    GUIControl.SelectItemControl(GetID, _viewsList.GetID, m_iSelectedItemInFolder);
                }
                else
                {
                    while (m_iSelectedItem >= GetItemCount() && m_iSelectedItem > 0)
                    {
                        m_iSelectedItem--;
                    }
                    GUIControl.SelectItemControl(GetID, _viewsList.GetID, m_iSelectedItem);
                }
            }
        }
コード例 #9
0
        protected override void OnShowContextMenu()
        {
            int         iItem = GetSelectedItemNo();
            GUIListItem pItem = GetItem(iItem);

            if (pItem == null)
            {
                return;
            }
            if (pItem.IsFolder)
            {
                ScheduleSummary schedule = pItem.TVTag as ScheduleSummary;
                if (schedule != null)
                {
                    GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
                    if (dlg == null)
                    {
                        return;
                    }
                    dlg.Reset();
                    dlg.SetHeading(schedule.Name ?? string.Empty);
                    dlg.Add(Utility.GetLocalizedText(TextId.Settings));
                    if (schedule.IsActive)
                    {
                        dlg.Add(Utility.GetLocalizedText(TextId.CancelThisSchedule));
                    }
                    else
                    {
                        dlg.Add(Utility.GetLocalizedText(TextId.UnCancelThisSchedule));
                    }

                    dlg.Add(Utility.GetLocalizedText(TextId.DeleteThisSchedule));
                    dlg.DoModal(GetID);

                    Schedule _sched = SchedulerAgent.GetScheduleById(schedule.ScheduleId);
                    switch (dlg.SelectedLabel)
                    {
                    case 0:
                        if (_sched != null)
                        {
                            UpcomingProgram[] programs = SchedulerAgent.GetUpcomingPrograms(_sched, true);
                            if (programs != null && programs.Length > 0)
                            {
                                OnEditSchedule(programs[0]);
                            }
                        }
                        break;

                    case 1:
                        if (_sched != null)
                        {
                            if (_sched.IsActive)
                            {
                                _sched.IsActive = false;
                                SchedulerAgent.SaveSchedule(_sched);
                            }
                            else
                            {
                                _sched.IsActive = true;
                                SchedulerAgent.SaveSchedule(_sched);
                            }
                        }
                        break;

                    case 2:
                    {
                        GUIDialogYesNo dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_YES_NO);
                        if (dlgYesNo != null)
                        {
                            dlgYesNo.Reset();
                            dlgYesNo.SetHeading(schedule.Name);
                            dlgYesNo.SetLine(1, Utility.GetLocalizedText(TextId.DeleteThisSchedule));
                            dlgYesNo.SetLine(2, Utility.GetLocalizedText(TextId.AreYouSure));
                            dlgYesNo.SetLine(3, string.Empty);
                            dlgYesNo.SetDefaultToYes(false);
                            dlgYesNo.DoModal(GetID);

                            if (dlgYesNo.IsConfirmed)
                            {
                                SchedulerAgent.DeleteSchedule(schedule.ScheduleId);
                                _selectedSchedule = null;
                            }
                        }
                    }
                    break;
                    }
                    m_iSelectedItem = GetSelectedItemNo();
                    LoadUpcomingPrograms(null);
                }
            }
            else
            {
                UpcomingProgram upcoming = pItem.TVTag as UpcomingProgram;
                if (upcoming != null)
                {
                    GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
                    if (dlg == null)
                    {
                        return;
                    }
                    dlg.Reset();
                    dlg.SetHeading(upcoming.Title);
                    dlg.Add(Utility.GetLocalizedText(TextId.Settings));
                    dlg.Add(Utility.GetLocalizedText(TextId.Priority));
                    if (upcoming.IsCancelled)
                    {
                        if (upcoming.CancellationReason == UpcomingCancellationReason.Manual)
                        {
                            dlg.Add(Utility.GetLocalizedText(TextId.UncancelThisShow));
                        }
                    }
                    else
                    {
                        dlg.Add(Utility.GetLocalizedText(TextId.CancelThisShow));
                    }
                    dlg.DoModal(GetID);

                    switch (dlg.SelectedLabel)
                    {
                    case 0:     // settings/information
                        OnEditSchedule(upcoming);
                        break;

                    case 1:     // Priority
                        OnChangePriority(upcoming);
                        break;

                    case 2:     // (Un)Cancel
                        if (upcoming.IsCancelled)
                        {
                            this.SchedulerAgent.UncancelUpcomingProgram(upcoming.ScheduleId, upcoming.GuideProgramId, upcoming.Channel.ChannelId, upcoming.StartTime);
                        }
                        else
                        {
                            this.SchedulerAgent.CancelUpcomingProgram(upcoming.ScheduleId, upcoming.GuideProgramId, upcoming.Channel.ChannelId, upcoming.StartTime);
                        }
                        m_iSelectedItem = GetSelectedItemNo();
                        LoadUpcomingPrograms(null);
                        break;
                    }
                }
            }
        }