MythTV master
autoexpire.h
Go to the documentation of this file.
1#ifndef AUTOEXPIRE_H_
2#define AUTOEXPIRE_H_
3
4#include <cstdint>
5#include <vector>
6
7#include <QWaitCondition>
8#include <QDateTime>
9#include <QPointer>
10#include <QObject>
11#include <QString>
12#include <QMutex>
13#include <QQueue>
14#include <QSet>
15#include <QMap>
16
17#include "libmythbase/mthread.h"
18
19class ProgramInfo;
20class EncoderLink;
21class MainServer;
22
23using pginfolist_t = std::vector<ProgramInfo*>;
24using enclinklist_t = std::vector<EncoderLink*>;
25
35};
36
37class AutoExpire;
38
39class ExpireThread : public MThread
40{
41 public:
42 explicit ExpireThread(AutoExpire *p) : MThread("Expire"), m_parent(p) {}
43 ~ExpireThread() override { wait(); }
44 void run(void) override; // MThread
45 private:
46 QPointer<AutoExpire> m_parent;
47};
48
50{
51 public:
52 UpdateEntry(int _encoder, int _fsID)
53 : m_encoder(_encoder), m_fsID(_fsID) {};
54
56 int m_fsID;
57};
58
59class AutoExpire : public QObject
60{
61 Q_OBJECT
62
63 friend class ExpireThread;
64 public:
65 explicit AutoExpire(QMap<int, EncoderLink *> *tvList);
66 AutoExpire() = default;
67 ~AutoExpire() override;
68
69 void CalcParams(void);
70 void PrintExpireList(const QString& expHost = "ALL");
71
72 uint64_t GetDesiredSpace(int fsID) const;
73
74 void GetAllExpiring(QStringList &strList);
75 void GetAllExpiring(pginfolist_t &list);
76 static void ClearExpireList(pginfolist_t &expireList, bool deleteProg = true);
77
78 static void Update(int encoder, int fsID, bool immediately);
79 static void Update(bool immediately) { Update(0, -1, immediately); }
80
82 {
83 QMutexLocker locker(&m_instanceLock);
84 m_mainServer = ms;
85 }
86
87 QMap<int, EncoderLink *> *m_encoderList {nullptr};
88
89 protected:
90 void RunExpirer(void);
91
92 private:
93 void ExpireLiveTV(int type);
94 void ExpireOldDeleted(void);
95 void ExpireQuickDeleted(void);
96 void ExpireRecordings(void);
97 void ExpireEpisodesOverMax(void);
98
99 void FillExpireList(pginfolist_t &expireList);
100 void FillDBOrdered(pginfolist_t &expireList, int expMethod);
101 static void SendDeleteMessages(pginfolist_t &deleteList);
102 void Sleep(std::chrono::milliseconds sleepTime);
103
104 void UpdateDontExpireSet(void);
105 bool IsInDontExpireSet(uint chanid, const QDateTime &recstartts) const;
106 static bool IsInExpireList(const pginfolist_t &expireList,
107 uint chanid, const QDateTime &recstartts);
108
109 // main expire info
110 QSet<QString> m_dontExpireSet;
111 ExpireThread *m_expireThread {nullptr}; // protected by m_instanceLock
112 uint m_desiredFreq {15}; // protected by m_instanceLock
113 bool m_expireThreadRun {false}; // protected by m_instanceLock
114
115 QMap<int, int64_t> m_desiredSpace; // protected by m_instanceLock
116 QMap<int, int> m_usedEncoders; // protected by m_instanceLock
117
118 mutable QMutex m_instanceLock;
119 QWaitCondition m_instanceCond; // protected by m_instanceLock
120
121 MainServer *m_mainServer {nullptr}; // protected by m_instanceLock
122
123 // update info
125 QQueue<UpdateEntry> m_updateQueue; // protected by m_updateLock
126};
127
128#endif
129
130/* vim: set expandtab tabstop=4 shiftwidth=4: */
std::vector< ProgramInfo * > pginfolist_t
Definition: autoexpire.h:23
std::vector< EncoderLink * > enclinklist_t
Definition: autoexpire.h:24
ExpireMethodType
Definition: autoexpire.h:26
@ emNormalLiveTVPrograms
Definition: autoexpire.h:31
@ emQuickDeletedPrograms
Definition: autoexpire.h:34
@ emLowestPriorityFirst
Definition: autoexpire.h:28
@ emOldDeletedPrograms
Definition: autoexpire.h:32
@ emNormalDeletedPrograms
Definition: autoexpire.h:33
@ emShortLiveTVPrograms
Definition: autoexpire.h:30
@ emOldestFirst
Definition: autoexpire.h:27
@ emWeightedTimePriority
Definition: autoexpire.h:29
Used to expire recordings to make space for new recordings.
Definition: autoexpire.h:60
void FillDBOrdered(pginfolist_t &expireList, int expMethod)
Creates a list of programs to delete using the database to order list.
Definition: autoexpire.cpp:907
void ExpireRecordings(void)
This expires normal recordings.
Definition: autoexpire.cpp:404
void SetMainServer(MainServer *ms)
Definition: autoexpire.h:81
QWaitCondition m_instanceCond
Definition: autoexpire.h:119
AutoExpire()=default
bool m_expireThreadRun
Definition: autoexpire.h:113
static void Update(int encoder, int fsID, bool immediately)
This is used to update the global AutoExpire instance "expirer".
void ExpireOldDeleted(void)
This expires deleted programs older than DeletedMaxAge.
Definition: autoexpire.cpp:377
void ExpireEpisodesOverMax(void)
This deletes programs exceeding the maximum number of episodes of that program desired.
Definition: autoexpire.cpp:662
void GetAllExpiring(QStringList &strList)
Gets the full list of programs that can expire in expiration order.
Definition: autoexpire.cpp:842
void UpdateDontExpireSet(void)
QMap< int, EncoderLink * > * m_encoderList
Definition: autoexpire.h:87
void ExpireQuickDeleted(void)
This expires deleted programs within a few minutes.
Definition: autoexpire.cpp:390
static bool IsInExpireList(const pginfolist_t &expireList, uint chanid, const QDateTime &recstartts)
uint m_desiredFreq
Definition: autoexpire.h:112
QMap< int, int64_t > m_desiredSpace
Definition: autoexpire.h:115
void RunExpirer(void)
This contains the main loop for the auto expire process.
Definition: autoexpire.cpp:271
bool IsInDontExpireSet(uint chanid, const QDateTime &recstartts) const
void FillExpireList(pginfolist_t &expireList)
Uses the "AutoExpireMethod" setting in the database to fill the list of files that are deletable.
Definition: autoexpire.cpp:781
void PrintExpireList(const QString &expHost="ALL")
Prints a summary of the files that can be deleted.
Definition: autoexpire.cpp:803
ExpireThread * m_expireThread
Definition: autoexpire.h:111
void CalcParams(void)
Calculates how much space needs to be cleared, and how often.
Definition: autoexpire.cpp:124
QMutex m_instanceLock
Definition: autoexpire.h:118
QMap< int, int > m_usedEncoders
Definition: autoexpire.h:116
MainServer * m_mainServer
Definition: autoexpire.h:121
QSet< QString > m_dontExpireSet
Definition: autoexpire.h:110
QMutex m_updateLock
Definition: autoexpire.h:124
static void SendDeleteMessages(pginfolist_t &deleteList)
This sends delete message to main event thread.
Definition: autoexpire.cpp:625
uint64_t GetDesiredSpace(int fsID) const
Used by the scheduler to select the next recording dir.
Definition: autoexpire.cpp:113
static void Update(bool immediately)
Definition: autoexpire.h:79
void Sleep(std::chrono::milliseconds sleepTime)
Sleeps for sleepTime milliseconds; unless the expire thread is told to quit.
Definition: autoexpire.cpp:347
static void ClearExpireList(pginfolist_t &expireList, bool deleteProg=true)
Clears expireList, freeing any ProgramInfo's if necessary.
Definition: autoexpire.cpp:888
~AutoExpire() override
AutoExpire destructor stops auto delete thread if it is running.
Definition: autoexpire.cpp:86
void ExpireLiveTV(int type)
This expires LiveTV programs.
Definition: autoexpire.cpp:364
QQueue< UpdateEntry > m_updateQueue
Definition: autoexpire.h:125
QPointer< AutoExpire > m_parent
Definition: autoexpire.h:46
void run(void) override
This calls AutoExpire::RunExpirer() from within a new thread.
Definition: autoexpire.cpp:58
ExpireThread(AutoExpire *p)
Definition: autoexpire.h:42
~ExpireThread() override
Definition: autoexpire.h:43
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:49
bool wait(std::chrono::milliseconds time=std::chrono::milliseconds::max())
Wait for the MThread to exit, with a maximum timeout.
Definition: mthread.cpp:300
Holds information on recordings and videos.
Definition: programinfo.h:68
UpdateEntry(int _encoder, int _fsID)
Definition: autoexpire.h:52
int m_encoder
Definition: autoexpire.h:55
unsigned int uint
Definition: freesurround.h:24
unsigned short uint16_t
Definition: iso6937tables.h:3