예제 #1
0
    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;
    }
예제 #2
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);
    }
예제 #3
0
    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);
    }
예제 #4
0
    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;
        }
      }
    }
예제 #5
0
        public List<String> GetSchedules(bool kodiHasSeriesSupport = false)
        {
            List<String> schedlist = new List<String>();
            try
            {
                IList<Schedule> schedules = Schedule.ListAll();
                foreach (Schedule sched in schedules)
                {
                    String schedule;
                    String channelname;
                    String strIsRecording = "False";
                    String strStartTime;
                    String strEndTime;
                    String strSchedId;
                    String strIdChannel;
                    String strProgramName;
                    int idProgram = 0;

                    if (sched.IdParentSchedule != -1) //If it has a parent it's a recording of a series we won't use this.
                        continue;

                    //XBMC pvr side:
                    //
                    //[0]  index/id
                    //[1]  start date + time
                    //[2]  end   date + time
                    //[3]  channel nr (mediaportal channel id)
                    //[4]  channel name
                    //[5]  program name
                    //[6]  repeat info/schedule type
                    //[7]  priorty
                    //[8]  isdone
                    //[9]  ismanual
                    //[10] directory
                    //[11] keep method
                    //[12] keep date
                    //[13] preRecordInterval
                    //[14] postRecordInterval
                    //[15] canceled
                    //[16] series
                    //[17] isrecording (TODO)
                    //[18] idProgram
                    //[19] parent schedule id
                    //[20] genre of the program
                    //[21] program description
                    try
                    {
                        channelname = sched.ReferencedChannel().DisplayName;
                    }
                    catch
                    {   // Occurs for example when a recording is pointing to a channel
                        // that is deleted in the meantime
                        channelname = sched.IdChannel.ToString();
                    }

                    try
                    {
                        strSchedId = sched.IdSchedule.ToString();
                        strStartTime = sched.StartTime.ToString("u");
                        strEndTime = sched.EndTime.ToString("u");
                        strIdChannel = sched.IdChannel.ToString();
                        strProgramName = sched.ProgramName;

                        IList<Program> progs = Schedule.GetProgramsForSchedule(sched);
                        IList<CanceledSchedule> canceled_progs = sched.ReferringCanceledSchedule();

                        if (kodiHasSeriesSupport == true && sched.ScheduleType != 0 /* Once */)
                        {
                            // return also the real schedule and not only the underlying programs
                            schedule = FormatSchedule(strSchedId, strStartTime, strEndTime, strIdChannel, channelname.Replace("|", ""),
                                        strProgramName.Replace("|", ""), sched, strIsRecording, idProgram.ToString(), sched.Canceled, sched.IdParentSchedule, "", "");
                            schedlist.Add(schedule);
                        }

                        foreach (Program pr in progs)
                        {
                            DateTime dtCanceled = sched.Canceled;
                            int parentSchedule;

                            if (kodiHasSeriesSupport && sched.ScheduleType != 0 /* Once */)
                            {
                                // add the programs for this schedule as sub-timers in Kodi
                                parentSchedule = sched.IdSchedule;
                            }
                            else
                            {
                                parentSchedule = sched.IdParentSchedule;
                            }

                            strStartTime = pr.StartTime.ToString("u");
                            strEndTime = pr.EndTime.ToString("u");
                            strIdChannel = pr.IdChannel.ToString();
                            strProgramName = pr.Title;
                            if (pr.EpisodeName.Length > 0)
                                strProgramName += " - " + pr.EpisodeName;
                            if (pr.IsRecording)
                                strIsRecording = "True";
                            else strIsRecording = "False";
                            idProgram = pr.IdProgram;

                            // Check if this program is in the CanceledSchedule list
                            foreach (CanceledSchedule cs in canceled_progs)
                            {
                              if (cs.CancelDateTime == pr.StartTime)
                              {
                                dtCanceled = cs.CancelDateTime;
                                break;
                              }
                            }

                            schedule = FormatSchedule(strSchedId, strStartTime, strEndTime, strIdChannel, channelname.Replace("|", ""),
                                          strProgramName.Replace("|", ""), sched, strIsRecording, idProgram.ToString(), dtCanceled, parentSchedule, pr.Genre, pr.Description);
                            schedlist.Add(schedule);
                        }

                        if (progs.Count == 0)
                        {
                            if ((ScheduleRecordingType)sched.ScheduleType != (ScheduleRecordingType.Once))
                            {
                                continue; //This timer does not resolve to a program. Do not return it until we have a state for it in XBMC.
                            }
                            else //If the schedule did not resolve to any program, typical when creating an Instant Recording from XBMC and the name does not match a program name.
                            {
                                VirtualCard card;
                                TvControl.TvServer tv = new TvServer();
                                if (tv.IsRecordingSchedule(sched.IdSchedule, out card))
                                    strIsRecording = "True";
                                idProgram = -1;
                                schedule = FormatSchedule(strSchedId, strStartTime, strEndTime, strIdChannel, channelname.Replace("|", ""),
                                            strProgramName.Replace("|", ""), sched, strIsRecording, idProgram.ToString(), sched.Canceled, sched.IdParentSchedule, "", "");
                                schedlist.Add(schedule);
                            }
                        }
                    }
                    catch
                    { }

                }
            }
            catch (Exception ex)
            {
                lastException = ex;
                Console.WriteLine(ex.ToString());
                Log.Error("TVServerKodi: " + ex.ToString());
                return null;
            }
            return schedlist;
        }