vdr  2.4.1
timers.h
Go to the documentation of this file.
1 /*
2  * timers.h: Timer handling
3  *
4  * See the main source file 'vdr.c' for copyright information and
5  * how to reach the author.
6  *
7  * $Id: timers.h 4.11.1.1 2019/05/23 10:02:45 kls Exp $
8  */
9 
10 #ifndef __TIMERS_H
11 #define __TIMERS_H
12 
13 #include "channels.h"
14 #include "config.h"
15 #include "epg.h"
16 #include "tools.h"
17 
18 enum eTimerFlags { tfNone = 0x0000,
19  tfActive = 0x0001,
20  tfInstant = 0x0002,
21  tfVps = 0x0004,
22  tfRecording = 0x0008,
23  tfAll = 0xFFFF,
24  };
26 
27 class cTimer : public cListObject {
28  friend class cMenuEditTimer;
29 private:
30  int id;
31  mutable time_t startTime, stopTime;
33  mutable time_t deferred;
35  uint flags;
36  const cChannel *channel;
37  mutable time_t day;
38  int weekdays;
39  int start;
40  int stop;
41  int priority;
42  int lifetime;
43  mutable char file[NAME_MAX * 2 + 1]; // *2 to be able to hold 'title' and 'episode', which can each be up to 255 characters long
44  char *aux;
45  char *remote;
46  const cEvent *event;
47 public:
48  cTimer(bool Instant = false, bool Pause = false, const cChannel *Channel = NULL);
49  cTimer(const cEvent *Event);
50  cTimer(const cTimer &Timer);
51  virtual ~cTimer();
52  cTimer& operator= (const cTimer &Timer);
53  virtual int Compare(const cListObject &ListObject) const;
54  int Id(void) const { return id; }
55  bool Recording(void) const { return HasFlags(tfRecording); }
56  bool Pending(void) const { return pending; }
57  bool InVpsMargin(void) const { return inVpsMargin; }
58  uint Flags(void) const { return flags; }
59  const cChannel *Channel(void) const { return channel; }
60  time_t Day(void) const { return day; }
61  int WeekDays(void) const { return weekdays; }
62  int Start(void) const { return start; }
63  int Stop(void) const { return stop; }
64  int Priority(void) const { return priority; }
65  int Lifetime(void) const { return lifetime; }
66  const char *File(void) const { return file; }
67  time_t FirstDay(void) const { return weekdays ? day : 0; }
68  const char *Aux(void) const { return aux; }
69  const char *Remote(void) const { return remote; }
70  bool Local(void) const { return !remote; } // convenience
71  time_t Deferred(void) const { return deferred; }
72  cString ToText(bool UseChannelID = false) const;
73  cString ToDescr(void) const;
74  const cEvent *Event(void) const { return event; }
75  bool Parse(const char *s);
76  bool Save(FILE *f);
77  bool IsSingleEvent(void) const;
78  static int GetMDay(time_t t);
79  static int GetWDay(time_t t);
80  bool DayMatches(time_t t) const;
81  static time_t IncDay(time_t t, int Days);
82  static time_t SetTime(time_t t, int SecondsFromMidnight);
83  void SetFile(const char *File);
84  bool Matches(time_t t = 0, bool Directly = false, int Margin = 0) const;
85  eTimerMatch Matches(const cEvent *Event, int *Overlap = NULL) const;
86  bool Expired(void) const;
87  time_t StartTime(void) const;
88  time_t StopTime(void) const;
89  void SetId(int Id);
90  bool SetEventFromSchedule(const cSchedules *Schedules);
91  bool SetEvent(const cEvent *Event);
92  void SetRecording(bool Recording);
93  void SetPending(bool Pending);
94  void SetInVpsMargin(bool InVpsMargin);
95  void SetDay(time_t Day);
96  void SetWeekDays(int WeekDays);
97  void SetStart(int Start);
98  void SetStop(int Stop);
99  void SetPriority(int Priority);
100  void SetLifetime(int Lifetime);
101  void SetAux(const char *Aux);
102  void SetRemote(const char *Remote);
103  void SetDeferred(int Seconds);
104  void SetFlags(uint Flags);
105  void ClrFlags(uint Flags);
106  void InvFlags(uint Flags);
107  bool HasFlags(uint Flags) const;
108  void Skip(void);
109  void OnOff(void);
110  cString PrintFirstDay(void) const;
111  static int TimeToInt(int t);
112  static bool ParseDay(const char *s, time_t &Day, int &WeekDays);
113  static cString PrintDay(time_t Day, int WeekDays, bool SingleByteChars);
114  };
115 
116 class cTimers : public cConfig<cTimer> {
117 private:
118  static cTimers timers;
119  static int lastTimerId;
121 public:
122  cTimers(void);
123  static const cTimers *GetTimersRead(cStateKey &StateKey, int TimeoutMs = 0);
145  static cTimers *GetTimersWrite(cStateKey &StateKey, int TimeoutMs = 0);
169  static bool Load(const char *FileName);
170  static int NewTimerId(void);
171  const cTimer *GetById(int Id, const char *Remote = NULL) const;
172  cTimer *GetById(int Id, const char *Remote = NULL) { return const_cast<cTimer *>(static_cast<const cTimers *>(this)->GetById(Id, Remote)); };
173  const cTimer *GetTimer(const cTimer *Timer) const;
174  cTimer *GetTimer(const cTimer *Timer) { return const_cast<cTimer *>(static_cast<const cTimers *>(this)->GetTimer(Timer)); };
175  const cTimer *GetMatch(time_t t) const;
176  cTimer *GetMatch(time_t t) { return const_cast<cTimer *>(static_cast<const cTimers *>(this)->GetMatch(t)); };
177  const cTimer *GetMatch(const cEvent *Event, eTimerMatch *Match = NULL) const;
178  cTimer *GetMatch(const cEvent *Event, eTimerMatch *Match = NULL) { return const_cast<cTimer *>(static_cast<const cTimers *>(this)->GetMatch(Event, Match)); }
179  int GetMaxPriority(void) const;
182  const cTimer *GetNextActiveTimer(void) const;
183  const cTimer *UsesChannel(const cChannel *Channel) const;
184  bool SetEvents(const cSchedules *Schedules);
185  bool DeleteExpired(void);
186  void Add(cTimer *Timer, cTimer *After = NULL);
187  void Ins(cTimer *Timer, cTimer *Before = NULL);
188  void Del(cTimer *Timer, bool DeleteObject = true);
189  bool StoreRemoteTimers(const char *ServerName = NULL, const cStringList *RemoteTimers = NULL);
197  };
198 
199 bool HandleRemoteTimerModifications(cTimer *NewTimer, cTimer *OldTimer = NULL, cString *Msg = NULL);
214 
215 // Provide lock controlled access to the list:
216 
218 
219 // These macros provide a convenient way of locking the global timers list
220 // and making sure the lock is released as soon as the current scope is left
221 // (note that these macros wait forever to obtain the lock!):
222 
223 #define LOCK_TIMERS_READ USE_LIST_LOCK_READ(Timers)
224 #define LOCK_TIMERS_WRITE USE_LIST_LOCK_WRITE(Timers)
225 
226 class cSortedTimers : public cVector<const cTimer *> {
227 public:
228  cSortedTimers(const cTimers *Timers);
229  };
230 
231 #endif //__TIMERS_H
cTimer::start
int start
Definition: timers.h:39
cTimer::lifetime
int lifetime
Definition: timers.h:42
cTimer::SetAux
void SetAux(const char *Aux)
Definition: timers.c:663
cTimer::operator=
cTimer & operator=(const cTimer &Timer)
Definition: timers.c:141
cTimer::SetStop
void SetStop(int Stop)
Definition: timers.c:648
cTimer::SetPending
void SetPending(bool Pending)
Definition: timers.c:621
cTimer::SetPriority
void SetPriority(int Priority)
Definition: timers.c:653
cTimer::Channel
const cChannel * Channel(void) const
Definition: timers.h:59
cTimer::weekdays
int weekdays
bitmask, lowest bits: SSFTWTM (the 'M' is the LSB)
Definition: timers.h:38
cStringList
Definition: tools.h:801
cTimer::day
time_t day
midnight of the day this timer shall hit, or of the first day it shall hit in case of a repeating tim...
Definition: timers.h:37
tmPartial
@ tmPartial
Definition: timers.h:25
cTimer::SetFile
void SetFile(const char *File)
Definition: timers.c:407
cTimer::SetStart
void SetStart(int Start)
Definition: timers.c:643
cTimers::GetMatch
cTimer * GetMatch(time_t t)
Definition: timers.h:176
tfRecording
@ tfRecording
Definition: timers.h:22
cTimers::GetMatch
const cTimer * GetMatch(time_t t) const
Definition: timers.c:779
cTimer::Lifetime
int Lifetime(void) const
Definition: timers.h:65
cTimer
Definition: timers.h:27
cTimers::GetById
const cTimer * GetById(int Id, const char *Remote=NULL) const
Definition: timers.c:755
cTimer::IncDay
static time_t IncDay(time_t t, int Days)
Definition: timers.c:384
cTimer::remote
char * remote
Definition: timers.h:45
cTimer::Start
int Start(void) const
Definition: timers.h:62
cTimer::deferred
time_t deferred
Matches(time_t, ...) will return false if the current time is before this value.
Definition: timers.h:33
cTimers::NewTimerId
static int NewTimerId(void)
Definition: timers.c:750
cTimers::StoreRemoteTimers
bool StoreRemoteTimers(const char *ServerName=NULL, const cStringList *RemoteTimers=NULL)
Stores the given list of RemoteTimers, which come from the VDR ServerName, in this list.
Definition: timers.c:909
cTimers::GetTimersRead
static const cTimers * GetTimersRead(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of timers for read access.
Definition: timers.c:843
cTimers::UsesChannel
const cTimer * UsesChannel(const cChannel *Channel) const
Definition: timers.c:873
tfAll
@ tfAll
Definition: timers.h:23
cTimers::GetTimer
const cTimer * GetTimer(const cTimer *Timer) const
Definition: timers.c:766
cConfig< cTimer >::FileName
const char * FileName(void)
Definition: config.h:119
cTimer::SetFlags
void SetFlags(uint Flags)
Definition: timers.c:681
cTimers::SetEvents
bool SetEvents(const cSchedules *Schedules)
Definition: timers.c:882
cTimer::OnOff
void OnOff(void)
Definition: timers.c:708
cTimer::Local
bool Local(void) const
Definition: timers.h:70
cTimer::ParseDay
static bool ParseDay(const char *s, time_t &Day, int &WeekDays)
Definition: timers.c:202
cTimer::flags
uint flags
Definition: timers.h:35
cTimer::Id
int Id(void) const
Definition: timers.h:54
cTimer::Pending
bool Pending(void) const
Definition: timers.h:56
cEvent
Definition: epg.h:71
cTimer::ToText
cString ToText(bool UseChannelID=false) const
Definition: timers.c:184
cTimer::Expired
bool Expired(void) const
Definition: timers.c:515
cTimer::DayMatches
bool DayMatches(time_t t) const
Definition: timers.c:379
cTimer::SetRecording
void SetRecording(bool Recording)
Definition: timers.c:612
cVector
Definition: tools.h:664
cStateKey
Definition: thread.h:233
cTimer::channel
const cChannel * channel
Definition: timers.h:36
tfInstant
@ tfInstant
Definition: timers.h:20
cTimers::Add
void Add(cTimer *Timer, cTimer *After=NULL)
Definition: timers.c:853
cTimers::cTimers
cTimers(void)
Definition: timers.c:729
cTimer::ClrFlags
void ClrFlags(uint Flags)
Definition: timers.c:686
cTimer::aux
char * aux
Definition: timers.h:44
cTimer::id
int id
Definition: timers.h:30
cTimers::Load
static bool Load(const char *FileName)
Definition: timers.c:735
cTimer::WeekDays
int WeekDays(void) const
Definition: timers.h:61
cTimer::IsSingleEvent
bool IsSingleEvent(void) const
Definition: timers.c:361
tfNone
@ tfNone
Definition: timers.h:18
cTimers::GetNextActiveTimer
const cTimer * GetNextActiveTimer(void) const
Definition: timers.c:830
cTimer::Priority
int Priority(void) const
Definition: timers.h:64
channels.h
cTimer::scheduleState
int scheduleState
Definition: timers.h:32
tmNone
@ tmNone
Definition: timers.h:25
cSortedTimers
Definition: timers.h:226
cListObject
Definition: tools.h:493
cTimer::SetEventFromSchedule
bool SetEventFromSchedule(const cSchedules *Schedules)
Definition: timers.c:545
cTimer::PrintDay
static cString PrintDay(time_t Day, int WeekDays, bool SingleByteChars)
Definition: timers.c:261
cTimer::SetInVpsMargin
void SetInVpsMargin(bool InVpsMargin)
Definition: timers.c:626
cSortedTimers::cSortedTimers
cSortedTimers(const cTimers *Timers)
Definition: timers.c:1093
cTimer::Stop
int Stop(void) const
Definition: timers.h:63
cTimer::~cTimer
virtual ~cTimer()
Definition: timers.c:133
cTimer::event
const cEvent * event
Definition: timers.h:46
DEF_LIST_LOCK
DEF_LIST_LOCK(Timers)
cTimer::StartTime
time_t StartTime(void) const
Definition: timers.c:523
cTimers::DeleteExpired
bool DeleteExpired(void)
Definition: timers.c:890
cTimer::Recording
bool Recording(void) const
Definition: timers.h:55
cMenuEditTimer
Definition: menu.h:73
cTimer::Remote
const char * Remote(void) const
Definition: timers.h:69
tmFull
@ tmFull
Definition: timers.h:25
cTimer::startTime
time_t startTime
Definition: timers.h:31
cTimer::File
const char * File(void) const
Definition: timers.h:66
cTimer::Event
const cEvent * Event(void) const
Definition: timers.h:74
cTimer::Aux
const char * Aux(void) const
Definition: timers.h:68
cTimer::PrintFirstDay
cString PrintFirstDay(void) const
Definition: timers.c:295
cTimer::TimeToInt
static int TimeToInt(int t)
Definition: timers.c:197
cTimer::pending
bool pending
Definition: timers.h:34
cTimer::HasFlags
bool HasFlags(uint Flags) const
Definition: timers.c:696
cTimer::SetEvent
bool SetEvent(const cEvent *Event)
Definition: timers.c:592
cTimer::Save
bool Save(FILE *f)
Definition: timers.c:354
tfVps
@ tfVps
Definition: timers.h:21
eTimerMatch
eTimerMatch
Definition: timers.h:25
cChannel
Definition: channels.h:89
cTimers::GetTimer
cTimer * GetTimer(const cTimer *Timer)
Definition: timers.h:174
cTimers::GetMatch
cTimer * GetMatch(const cEvent *Event, eTimerMatch *Match=NULL)
Definition: timers.h:178
cTimer::stop
int stop
Definition: timers.h:40
cTimer::FirstDay
time_t FirstDay(void) const
Definition: timers.h:67
cString
Definition: tools.h:176
cTimers::Del
void Del(cTimer *Timer, bool DeleteObject=true)
Definition: timers.c:867
cTimer::ToDescr
cString ToDescr(void) const
Definition: timers.c:192
cTimer::Day
time_t Day(void) const
Definition: timers.h:60
cTimer::SetId
void SetId(int Id)
Definition: timers.c:540
cTimers::GetById
cTimer * GetById(int Id, const char *Remote=NULL)
Definition: timers.h:172
cTimer::Compare
virtual int Compare(const cListObject &ListObject) const
Must return 0 if this object is equal to ListObject, a positive value if it is "greater",...
Definition: timers.c:173
cSchedules
Definition: epg.h:192
cTimer::SetDay
void SetDay(time_t Day)
Definition: timers.c:633
cTimers::lastTimerId
static int lastTimerId
Definition: timers.h:119
cTimer::Flags
uint Flags(void) const
Definition: timers.h:58
cTimers
Definition: timers.h:116
HandleRemoteTimerModifications
bool HandleRemoteTimerModifications(cTimer *NewTimer, cTimer *OldTimer=NULL, cString *Msg=NULL)
Performs any operations necessary to synchronize changes to a timer between peer VDR machines.
Definition: timers.c:1027
cTimers::GetTimersWrite
static cTimers * GetTimersWrite(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of timers for write access.
Definition: timers.c:848
cTimer::Skip
void Skip(void)
Definition: timers.c:701
cConfig
Definition: config.h:106
cTimer::Parse
bool Parse(const char *s)
Definition: timers.c:305
eTimerFlags
eTimerFlags
Definition: timers.h:18
tfActive
@ tfActive
Definition: timers.h:19
cTimer::stopTime
time_t stopTime
Definition: timers.h:31
cTimer::SetTime
static time_t SetTime(time_t t, int SecondsFromMidnight)
Definition: timers.c:396
config.h
cTimer::GetWDay
static int GetWDay(time_t t)
Definition: timers.c:372
cTimers::timers
static cTimers timers
Definition: timers.h:118
epg.h
cTimer::cTimer
cTimer(bool Instant=false, bool Pause=false, const cChannel *Channel=NULL)
Definition: timers.c:26
cTimer::InVpsMargin
bool InVpsMargin(void) const
Definition: timers.h:57
cTimer::inVpsMargin
bool inVpsMargin
Definition: timers.h:34
cTimer::InvFlags
void InvFlags(uint Flags)
Definition: timers.c:691
tools.h
cTimer::SetWeekDays
void SetWeekDays(int WeekDays)
Definition: timers.c:638
cTimer::file
char file[NAME_MAX *2+1]
Definition: timers.h:43
cTimers::Ins
void Ins(cTimer *Timer, cTimer *Before=NULL)
Definition: timers.c:861
cTimer::StopTime
time_t StopTime(void) const
Definition: timers.c:530
cTimer::Deferred
time_t Deferred(void) const
Definition: timers.h:71
cTimers::lastDeleteExpired
time_t lastDeleteExpired
Definition: timers.h:120
cTimer::SetRemote
void SetRemote(const char *Remote)
Definition: timers.c:669
cTimer::GetMDay
static int GetMDay(time_t t)
Definition: timers.c:366
cTimer::SetDeferred
void SetDeferred(int Seconds)
Definition: timers.c:675
cTimer::Matches
bool Matches(time_t t=0, bool Directly=false, int Margin=0) const
Definition: timers.c:415
cTimer::SetLifetime
void SetLifetime(int Lifetime)
Definition: timers.c:658
cTimer::priority
int priority
Definition: timers.h:41
cTimers::GetMaxPriority
int GetMaxPriority(void) const
Returns the maximum priority of all local timers that are currently recording.
Definition: timers.c:820