コード例 #1
0
ファイル: TVUtil.cs プロジェクト: doskabouter/MediaPortal-1
    private IList<Schedule> AddProgramsToSchedulesList(Schedule rec, IList<Program> programs)
    {
      IList<Schedule> recordings = new List<Schedule>();
      if (programs != null && programs.Count > 0)
      {
        foreach (Program prg in programs)
        {
          Schedule recNew = rec.Clone();          
          recNew.ScheduleType = (int)ScheduleRecordingType.Once;
          recNew.StartTime = prg.StartTime;
          recNew.EndTime = prg.EndTime;
          recNew.IdChannel = prg.IdChannel;
          recNew.Series = true;
          recNew.IdParentSchedule = rec.IdSchedule;
          recNew.ProgramName = prg.Title;

          if (rec.IsSerieIsCanceled(rec.GetSchedStartTimeForProg(prg)))
          {
            recNew.Canceled = recNew.StartTime;
          }
          
          recordings.Add(recNew);
        }
      }
      return recordings;
    }
コード例 #2
0
    public List<Schedule> GetRecordingTimes(Schedule rec, int days)
    {
      TvBusinessLayer layer = new TvBusinessLayer();
      List<Schedule> recordings = new List<Schedule>();

      DateTime dtDay = DateTime.Now;
      if (rec.ScheduleType == (int)ScheduleRecordingType.Once)
      {
        recordings.Add(rec);
        return recordings;
      }

      if (rec.ScheduleType == (int)ScheduleRecordingType.Daily)
      {
        for (int i = 0; i < days; ++i)
        {
          Schedule recNew = rec.Clone();
          recNew.ScheduleType = (int)ScheduleRecordingType.Once;
          recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute,
                                          0);
          if (rec.EndTime.Day > rec.StartTime.Day)
          {
            dtDay = dtDay.AddDays(1);
          }
          recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0);
          if (rec.EndTime.Day > rec.StartTime.Day)
          {
            dtDay = dtDay.AddDays(-1);
          }
          recNew.Series = true;
          if (recNew.StartTime >= DateTime.Now)
          {
            if (rec.IsSerieIsCanceled(recNew.StartTime))
            {
              recNew.Canceled = recNew.StartTime;
            }
            recordings.Add(recNew);
          }
          dtDay = dtDay.AddDays(1);
        }
        return recordings;
      }

      if (rec.ScheduleType == (int)ScheduleRecordingType.WorkingDays)
      {
        for (int i = 0; i < days; ++i)
        {
          if (WeekEndTool.IsWorkingDay(dtDay.DayOfWeek))
          {
            Schedule recNew = rec.Clone();
            recNew.ScheduleType = (int)ScheduleRecordingType.Once;
            recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute,
                                            0);
            if (rec.EndTime.Day > rec.StartTime.Day)
            {
              dtDay = dtDay.AddDays(1);
            }
            recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0);
            if (rec.EndTime.Day > rec.StartTime.Day)
            {
              dtDay = dtDay.AddDays(-1);
            }
            recNew.Series = true;
            if (rec.IsSerieIsCanceled(recNew.StartTime))
            {
              recNew.Canceled = recNew.StartTime;
            }
            if (recNew.StartTime >= DateTime.Now)
            {
              recordings.Add(recNew);
            }
          }
          dtDay = dtDay.AddDays(1);
        }
        return recordings;
      }

      if (rec.ScheduleType == (int)ScheduleRecordingType.Weekends)
      {
        IList<Program> progList = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,
                                                              rec.ReferencedChannel());

        foreach (Program prog in progList)
        {
          if ((rec.IsRecordingProgram(prog, false)) &&
              (WeekEndTool.IsWeekend(prog.StartTime.DayOfWeek)))
          {
            Schedule recNew = rec.Clone();
            recNew.ScheduleType = (int)ScheduleRecordingType.Once;
            recNew.StartTime = prog.StartTime;
            recNew.EndTime = prog.EndTime;
            recNew.Series = true;

            if (rec.IsSerieIsCanceled(recNew.StartTime))
            {
              recNew.Canceled = recNew.StartTime;
            }
            recordings.Add(recNew);
          }
        }
        return recordings;
      }
      if (rec.ScheduleType == (int)ScheduleRecordingType.Weekly)
      {
        for (int i = 0; i < days; ++i)
        {
          if ((dtDay.DayOfWeek == rec.StartTime.DayOfWeek) && (dtDay.Date >= rec.StartTime.Date))
          {
            Schedule recNew = rec.Clone();
            recNew.ScheduleType = (int)ScheduleRecordingType.Once;
            recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute,
                                            0);
            if (rec.EndTime.Day > rec.StartTime.Day)
            {
              dtDay = dtDay.AddDays(1);
            }
            recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0);
            if (rec.EndTime.Day > rec.StartTime.Day)
            {
              dtDay = dtDay.AddDays(-1);
            }
            recNew.Series = true;
            if (rec.IsSerieIsCanceled(recNew.StartTime))
            {
              recNew.Canceled = recNew.StartTime;
            }
            if (recNew.StartTime >= DateTime.Now)
            {
              recordings.Add(recNew);
            }
          }
          dtDay = dtDay.AddDays(1);
        }
        return recordings;
      }

      IList<Program> programs;
      if (rec.ScheduleType == (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel)
      {
        //Log.Debug("get {0} {1} EveryTimeOnThisChannel", rec.ProgramName, rec.ReferencedChannel().Name);
        programs = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, rec.ReferencedChannel());
        foreach (Program prog in programs)
        {
          // dtDay.DayOfWeek == rec.StartTime.DayOfWeek
          // Log.Debug("BusinessLayer.cs Program prog in programs WeeklyEveryTimeOnThisChannel: {0} {1} prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek {2} == {3}", rec.ProgramName, rec.ReferencedChannel().Name, prog.StartTime.DayOfWeek, rec.StartTime.DayOfWeek);
          if (prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek && rec.IsRecordingProgram(prog, false))
          {
            Schedule recNew = rec.Clone();
            recNew.ScheduleType = (int)ScheduleRecordingType.Once;
            recNew.IdChannel = prog.IdChannel;
            recNew.StartTime = prog.StartTime;
            recNew.EndTime = prog.EndTime;
            recNew.Series = true;
            if (rec.IsSerieIsCanceled(recNew.StartTime))
            {
              recNew.Canceled = recNew.StartTime;
            }
            recordings.Add(recNew);

            //Log.Debug("BusinessLayer.cs Added Recording WeeklyEveryTimeOnThisChannel: {0} {1} prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek {2} == {3}", rec.ProgramName, rec.ReferencedChannel().Name, prog.StartTime.DayOfWeek, rec.StartTime.DayOfWeek);
          }
        }
        return recordings;
      }

      programs = rec.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel
                   ? layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,
                                                 rec.ReferencedChannel())
                   : layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, null);
      foreach (Program prog in programs)
      {
        if (rec.IsRecordingProgram(prog, false))
        {
          Schedule recNew = rec.Clone();
          recNew.ScheduleType = (int)ScheduleRecordingType.Once;
          recNew.IdChannel = prog.IdChannel;
          recNew.StartTime = prog.StartTime;
          recNew.EndTime = prog.EndTime;
          recNew.Series = true;
          if (rec.IsSerieIsCanceled(rec.GetSchedStartTimeForProg(prog), prog.IdChannel))
          {
            recNew.Canceled = recNew.StartTime;
          }
          recordings.Add(recNew);
        }
      }
      return recordings;
    }
コード例 #3
0
 private RecordingDetail CreateNewRecordingDetail(Schedule schedule, DateTime currentTime)
 {
   RecordingDetail newRecording = null;
   DateTime start = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, schedule.StartTime.Hour,
                                 schedule.StartTime.Minute, schedule.StartTime.Second);
   DateTime end = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, schedule.EndTime.Hour,
                               schedule.EndTime.Minute, schedule.EndTime.Second);
   if (start > end)
     end = end.AddDays(1);
   if (currentTime >= start.AddMinutes(-schedule.PreRecordInterval) &&
       currentTime <= end.AddMinutes(schedule.PostRecordInterval))
   {
     if (!schedule.IsSerieIsCanceled(start))
     {
       VirtualCard vCard = null;
       bool isRecordingSchedule = IsRecordingSchedule(schedule.IdSchedule, out vCard);
       if (!isRecordingSchedule)
       {
         newRecording = new RecordingDetail(schedule, schedule.ReferencedChannel(), end, true);
       }
     }
   }
   return newRecording;
 }
コード例 #4
0
    private bool IsTimeToRecordEveryTimeOnThisChannel(Schedule schedule, DateTime currentTime)
    {
      bool isTimeToRecord = false;
      TvDatabase.Program current =
        schedule.ReferencedChannel().GetProgramAt(currentTime.AddMinutes(schedule.PreRecordInterval),
                                                  schedule.ProgramName);

      if (current != null)
      {
        if (currentTime >= current.StartTime.AddMinutes(-schedule.PreRecordInterval) &&
            currentTime <= current.EndTime.AddMinutes(schedule.PostRecordInterval))
        {
          if (!schedule.IsSerieIsCanceled(current.StartTime))
          {
            bool createSpawnedOnceSchedule = CreateSpawnedOnceSchedule(schedule, current);
            if (createSpawnedOnceSchedule)
            {
              ResetTimer(); //lets process the spawned once schedule at once.
            }
          }
        }
      }

      return isTimeToRecord;
    }
コード例 #5
0
    private bool IsTimeToRecordEveryTimeOnEveryChannel(Schedule schedule)
    {
      bool isTimeToRecord = false;
      bool createSpawnedOnceSchedule = false;

      IList<TvDatabase.Program> programs = TvDatabase.Program.RetrieveCurrentRunningByTitle(schedule.ProgramName,
                                                                                            schedule.PreRecordInterval,
                                                                                            schedule.PostRecordInterval);
      foreach (TvDatabase.Program program in programs)
      {
        if (!schedule.IsSerieIsCanceled(program.StartTime))
        {
          if (CreateSpawnedOnceSchedule(schedule, program))
          {
            createSpawnedOnceSchedule = true;
          }
        }
      }
      if (createSpawnedOnceSchedule)
      {
        ResetTimer(); //lets process the spawned once schedule at once.
      }
      return isTimeToRecord;
    }
コード例 #6
0
    private bool IsScheduleReadyForRecording(Schedule schedule)
    {
      bool isScheduleReadyForRecording = true;
      DateTime now = DateTime.Now;
      VirtualCard card;

      if (schedule.Canceled != Schedule.MinSchedule ||
        IsRecordingSchedule(schedule.IdSchedule, out card) ||
        schedule.IsSerieIsCanceled(new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0)))
      {
        isScheduleReadyForRecording = false;
      }

      return isScheduleReadyForRecording;
    }
コード例 #7
0
ファイル: EpgClass.cs プロジェクト: huha001/TvWishList
      //-------------------------------------------------------------------------------------------------------------        
      // gets the recording time of a schedule
      //-------------------------------------------------------------------------------------------------------------
      public List<Schedule> GetRecordingTimes(Schedule rec, int days)
      {
          TvBusinessLayer layer = new TvBusinessLayer();
          List<Schedule> recordings = new List<Schedule>();

          DateTime dtDay = DateTime.Now;
          if (rec.ScheduleType == (int)ScheduleRecordingType.Once)
          {
              recordings.Add(rec);
              return recordings;
          }

          if (rec.ScheduleType == (int)ScheduleRecordingType.Daily)
          {
              for (int i = 0; i < days; ++i)
              {
                  Schedule recNew = rec.Clone();
                  recNew.ScheduleType = (int)ScheduleRecordingType.Once;
                  recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute,
                                                  0);
                  if (rec.EndTime.Day > rec.StartTime.Day)
                  {
                      dtDay = dtDay.AddDays(1);
                  }
                  recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0);
                  if (rec.EndTime.Day > rec.StartTime.Day)
                  {
                      dtDay = dtDay.AddDays(-1);
                  }
                  recNew.Series = true;
                  if (recNew.StartTime >= DateTime.Now)
                  {
                      if (rec.IsSerieIsCanceled(recNew.StartTime))
                      {
                          recNew.Canceled = recNew.StartTime;
                      }
                      recordings.Add(recNew);
                  }
                  dtDay = dtDay.AddDays(1);
              }
              return recordings;
          }

          if (rec.ScheduleType == (int)ScheduleRecordingType.WorkingDays)
          {

#if (TV100 || TV101 || TV12)
              for (int i = 0; i < days; ++i)
              {
                  if (dtDay.DayOfWeek != DayOfWeek.Saturday && dtDay.DayOfWeek != DayOfWeek.Sunday)
#elif(TV11)
              WeekEndTool weekEndTool = Setting.GetWeekEndTool();
              for (int i = 0; i < days; ++i)
              {
                  if (weekEndTool.IsWorkingDay(dtDay.DayOfWeek))  
#endif             
                  {
                      Schedule recNew = rec.Clone();
                      recNew.ScheduleType = (int)ScheduleRecordingType.Once;
                      recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute,
                                                      0);
                      if (rec.EndTime.Day > rec.StartTime.Day)
                      {
                          dtDay = dtDay.AddDays(1);
                      }
                      recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0);
                      if (rec.EndTime.Day > rec.StartTime.Day)
                      {
                          dtDay = dtDay.AddDays(-1);
                      }
                      recNew.Series = true;
                      if (rec.IsSerieIsCanceled(recNew.StartTime))
                      {
                          recNew.Canceled = recNew.StartTime;
                      }
                      if (recNew.StartTime >= DateTime.Now)
                      {
                          recordings.Add(recNew);
                      }
                  }
                  dtDay = dtDay.AddDays(1);
              }
              return recordings;
          }

          if (rec.ScheduleType == (int)ScheduleRecordingType.Weekends)
          {
#if(TV100)
              IList progList = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,rec.ReferencedChannel());
              foreach (Program prog in progList)
              {
                  if ((rec.IsRecordingProgram(prog, false)) &&
                      (prog.StartTime.DayOfWeek == DayOfWeek.Saturday || prog.StartTime.DayOfWeek == DayOfWeek.Sunday))
#elif(TV101 || TV12)
              IList<Program> progList = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,rec.ReferencedChannel());
              foreach (Program prog in progList)
              {
                  if ((rec.IsRecordingProgram(prog, false)) &&
                      (prog.StartTime.DayOfWeek == DayOfWeek.Saturday || prog.StartTime.DayOfWeek == DayOfWeek.Sunday))

#elif(TV11)
              IList<Program> progList = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, rec.ReferencedChannel());
              WeekEndTool weekEndTool = Setting.GetWeekEndTool();
              foreach (Program prog in progList)
              {
                  if ((rec.IsRecordingProgram(prog, false)) &&
                      (weekEndTool.IsWeekend(prog.StartTime.DayOfWeek)))
#endif
              

              
                  {
                      Schedule recNew = rec.Clone();
                      recNew.ScheduleType = (int)ScheduleRecordingType.Once;
                      recNew.StartTime = prog.StartTime;
                      recNew.EndTime = prog.EndTime;
                      recNew.Series = true;

                      if (rec.IsSerieIsCanceled(recNew.StartTime))
                      {
                          recNew.Canceled = recNew.StartTime;
                      }
                      recordings.Add(recNew);
                  }
              }
              return recordings;


              




          }
          if (rec.ScheduleType == (int)ScheduleRecordingType.Weekly)
          {
              for (int i = 0; i < days; ++i)
              {
                  if ((dtDay.DayOfWeek == rec.StartTime.DayOfWeek) && (dtDay.Date >= rec.StartTime.Date))
                  {
                      Schedule recNew = rec.Clone();
                      recNew.ScheduleType = (int)ScheduleRecordingType.Once;
                      recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute,
                                                      0);
                      if (rec.EndTime.Day > rec.StartTime.Day)
                      {
                          dtDay = dtDay.AddDays(1);
                      }
                      recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0);
                      if (rec.EndTime.Day > rec.StartTime.Day)
                      {
                          dtDay = dtDay.AddDays(-1);
                      }
                      recNew.Series = true;
                      if (rec.IsSerieIsCanceled(recNew.StartTime))
                      {
                          recNew.Canceled = recNew.StartTime;
                      }
                      if (recNew.StartTime >= DateTime.Now)
                      {
                          recordings.Add(recNew);
                      }
                  }
                  dtDay = dtDay.AddDays(1);
              }
              return recordings;
          }

#if(TV100)
          IList programs = rec.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel
                                      ? layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,
                                                                    rec.ReferencedChannel())
                                      : layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, null);
#elif(TV101 || TV11 || TV12)
          IList<Program> programs = rec.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel
                                      ? layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,
                                                                    rec.ReferencedChannel())
                                      : layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, null);
#endif

          foreach (Program prog in programs)
          {
              if (rec.IsRecordingProgram(prog, false))
              {
                  Schedule recNew = rec.Clone();
                  recNew.ScheduleType = (int)ScheduleRecordingType.Once;
                  recNew.IdChannel = prog.IdChannel;
                  recNew.StartTime = prog.StartTime;
                  recNew.EndTime = prog.EndTime;
                  recNew.Series = true;
                  if (rec.IsSerieIsCanceled(recNew.StartTime))
                  {
                      recNew.Canceled = recNew.StartTime;
                  }
                  recordings.Add(recNew);
              }
          }
          return recordings;
      }