Go to the documentation of this file.
9 #include <QWaitCondition>
48 Scheduler(
bool runthread, QMap<int, EncoderLink *> *_tvList,
49 const QString& tmptable =
"record",
Scheduler *master_sched =
nullptr);
60 const QDateTime &maxstarttime,
const QString &why)
62 mplexid, maxstarttime, why)); };
77 const QDateTime &recendts);
83 QMap<QString,ProgramInfo*>
GetRecording(
void)
const override;
91 bool ascending =
true);
94 bool ascending =
true);
101 static void PrintList(
const RecList &list,
bool onlyFutureRecordings =
false);
126 void run(
void)
override;
146 const QDateTime &maxstarttime);
165 uint *paffinity =
nullptr,
166 bool ignoreinput =
false)
const;
169 uint *affinity =
nullptr,
170 bool checkAll =
false)
177 bool livetv =
false);
180 int recpriority,
int recpriority2);
182 bool samePriority,
bool livetv =
false);
190 bool &blockShutdown,
uint logmask);
191 void ShutdownServer(std::chrono::seconds prerollseconds, QDateTime &idleSince);
193 bool WakeUpSlave(
const QString& slaveHostname,
bool setWakingStatus =
true);
198 const QString &storagegroup,
199 const QDateTime &recstartts,
200 const QDateTime &recendts,
202 QString &recording_dir,
208 const QString &subtitle,
const QString &descrip,
209 const QString &programid);
215 QDateTime &nextStartTime, QDateTime &nextWakeTime,
216 std::chrono::seconds prerollseconds);
221 bool &blockShutdown, QDateTime &idleSince, std::chrono::seconds prerollseconds,
226 const QDateTime &maxstarttime,
const QString &why)
228 sourceid, mplexid, maxstarttime, why)); };
292 using IsSameKey = std::pair<const RecordingInfo*,const RecordingInfo*>;
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
const RecordingInfo * FindConflict(const RecordingInfo *p, OpenEndType openEnd=openEndNever, uint *affinity=nullptr, bool checkAll=false) const
MainServer * GetMainServer()
void AddRecording(const RecordingInfo &pi)
void start(QThread::Priority p=QThread::InheritPriority)
Tell MThread to start running the thread in the near future.
void GetNextLiveTVDir(uint cardid)
RecList::const_iterator RecConstIter
void MarkShowingsList(const RecList &showinglist, RecordingInfo *p)
Provides an interface to both local and remote TVRec's for the mythbackend.
This is an generic interface to a program scheduler.
void RestoreRecStatus(void)
static void PrintRec(const RecordingInfo *p, const QString &prefix="")
static bool CheckShutdownServer(std::chrono::seconds prerollseconds, QDateTime &idleSince, bool &blockShutdown, uint logmask)
void SlaveConnected(const RecordingList &slavelist)
void ReschedulePlace(const QString &why)
void PruneRedundants(void)
bool wait(std::chrono::milliseconds time=std::chrono::milliseconds::max())
Wait for the MThread to exit, with a maximum timeout.
static void GetAllScheduled(QStringList &strList, SchedSortColumn sortBy=kSortTitle, bool ascending=true)
Returns all scheduled programs serialized into a QStringList.
Holds information on a TV Program one might wish to record.
QWaitCondition m_reschedWait
bool CreateConflictLists(void)
bool IsSameProgram(const RecordingInfo *a, const RecordingInfo *b) const
void FillRecordListFromDB(uint recordid=0)
bool TryAnotherShowing(RecordingInfo *p, bool samePriority, bool livetv=false)
std::chrono::milliseconds m_delayShutdownTime
void ResetDuplicates(uint recordid, uint findid, const QString &title, const QString &subtitle, const QString &descrip, const QString &programid)
bool HandleRecording(RecordingInfo &ri, bool &statuschanged, QDateTime &nextStartTime, QDateTime &nextWakeTime, std::chrono::seconds prerollseconds)
Used to expire recordings to make space for new recordings.
void DisableScheduling(void)
void FillDirectoryInfoCache(void)
void PutInactiveSlavesToSleep(void)
void SlaveDisconnected(uint cardid)
void OldRecordedFixups(void)
std::vector< RecList * > m_conflictLists
bool IsBusyRecording(const RecordingInfo *rcinfo)
QMutex m_resetIdleTimeLock
QMap< uint, SchedInputInfo > m_sinputInfoMap
Scheduler(bool runthread, QMap< int, EncoderLink * > *_tvList, const QString &tmptable="record", Scheduler *master_sched=nullptr)
QSet< uint > m_schedOrderWarned
RecList::iterator RecIter
bool QueryScheduling(void) const
static GlobalSpinBoxSetting * idleTimeoutSecs()
void DeleteTempTables(void)
void SchedNewFirstPass(RecIter &start, const RecIter &end, int recpriority, int recpriority2)
MainServer * m_mainServer
void AddChildInput(uint parentid, uint childid)
static bool VerifyCards(void)
MSqlDatabase Info, used by MSqlQuery. Do not use directly.
void AddRecording(const ProgramInfo &prog)
bool ChangeRecordingEnd(RecordingInfo *oldp, RecordingInfo *newp)
void EnableScheduling(void)
QMap< uint, RecList > m_recordIdListMap
void SetExpirer(AutoExpire *autoExpirer)
MythDeque< QStringList > m_reschedQueue
void HandleIdleShutdown(bool &blockShutdown, QDateTime &idleSince, std::chrono::seconds prerollseconds, std::chrono::seconds idleTimeoutSecs, std::chrono::minutes idleWaitForRecordingTime, bool statuschanged)
void RescheduleMatch(uint recordid, uint sourceid, uint mplexid, const QDateTime &maxstarttime, const QString &why)
int FillRecordingDir(const QString &title, const QString &hostname, const QString &storagegroup, const QDateTime &recstartts, const QDateTime &recendts, uint cardid, QString &recording_dir, const RecList &reclist)
static bool WasStartedAutomatically()
QMap< QString, ProgramInfo * > GetRecording(void) const override
std::pair< const RecordingInfo *, const RecordingInfo * > IsSameKey
void Reschedule(const QStringList &request)
QMap< QString, RecList > m_titleListMap
QMap< IsSameKey, bool > IsSameCacheType
bool HandleReschedule(void)
void SetMainServer(MainServer *ms)
void PrintList(bool onlyFutureRecordings=false)
void getConflicting(RecordingInfo *pginfo, QStringList &strlist)
std::array< QSet< QString >, 4 > m_sysEvents
void UpdateNextRecord(void)
bool AssignGroupInput(RecordingInfo &ri, std::chrono::seconds prerollseconds)
QDateTime m_lastPrepareTime
void EnqueueCheck(const RecordingInfo &recinfo, const QString &why)
bool FindNextConflict(const RecList &cardlist, const RecordingInfo *p, RecConstIter &iter, OpenEndType openEnd=openEndNever, uint *paffinity=nullptr, bool ignoreinput=false) const
AutoExpire * GetExpirer()
void RescheduleCheck(const RecordingInfo &recinfo, const QString &why)
void UpdateDuplicates(void)
void BackupRecStatus(void)
Holds information on recordings and videos.
QMap< QString, FileSystemInfo > m_fsInfoCache
void EnqueuePlace(const QString &why)
static QStringList BuildMatchRequest(uint recordid, uint sourceid, uint mplexid, const QDateTime &maxstarttime, const QString &why)
static QStringList BuildPlaceRequest(const QString &why)
void ClearRequestQueue(void)
void CreateTempTables(void)
void EnqueueMatch(uint recordid, uint sourceid, uint mplexid, const QDateTime &maxstarttime, const QString &why)
void MarkOtherShowings(RecordingInfo *p)
void UpdateRecStatus(RecordingInfo *pginfo)
QMap< int, bool > m_schedAfterStartMap
IsSameCacheType m_cacheIsSameProgram
std::deque< RecordingInfo * > RecList
This is a wrapper around QThread that does several additional things.
void HandleWakeSlave(RecordingInfo &ri, std::chrono::seconds prerollseconds)
RecStatus::Type GetRecStatus(const ProgramInfo &pginfo)
bool WakeUpSlave(const QString &slaveHostname, bool setWakingStatus=true)
void SchedNewRetryPass(const RecIter &start, const RecIter &end, bool samePriority, bool livetv=false)
bool GetAllPending(RecList &retList, int recRuleId=0) const
void UpdateManuals(uint recordid)
QMap< int, EncoderLink * > * m_tvList
bool HaveQueuedRequests(void)
void SchedNewRecords(void)
bool HandleRunSchedulerStartup(std::chrono::seconds prerollseconds, std::chrono::minutes idleWaitForRecordingTime)
void BuildNewRecordsQueries(uint recordid, QStringList &from, QStringList &where, MSqlBindings &bindings)
bool FillRecordList(void)
void HandleRecordingStatusChange(RecordingInfo &ri, RecStatus::Type recStatus, const QString &details)
static QStringList BuildCheckRequest(const RecordingInfo &recinfo, const QString &why)
void FillRecordListFromMaster(void)
static GlobalSpinBoxSetting * idleWaitForRecordingTime()
void ShutdownServer(std::chrono::seconds prerollseconds, QDateTime &idleSince)
void UpdateMatches(uint recordid, uint sourceid, uint mplexid, const QDateTime &maxstarttime)
void enqueue(const T &d)
Adds item to the back of the list. O(1).
void run(void) override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
bool InitInputInfoMap(void)