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 protected:
45 void run(void) override; // MThread
46 private:
47 QPointer<AutoExpire> m_parent;
48};
49
51{
52 public:
53 UpdateEntry(int _encoder, int _fsID)
54 : m_encoder(_encoder), m_fsID(_fsID) {};
55
57 int m_fsID;
58};
59
60class AutoExpire : public QObject
61{
62 Q_OBJECT
63
64 friend class ExpireThread;
65 public:
66 explicit AutoExpire(QMap<int, EncoderLink *> *tvList);
67 AutoExpire() = default;
68 ~AutoExpire() override;
69
70 void CalcParams(void);
71 void PrintExpireList(const QString& expHost = "ALL");
72
73 uint64_t GetDesiredSpace(int fsID) const;
74
75 void GetAllExpiring(QStringList &strList);
76 void GetAllExpiring(pginfolist_t &list);
77 static void ClearExpireList(pginfolist_t &expireList, bool deleteProg = true);
78
79 static void Update(int encoder, int fsID, bool immediately);
80 static void Update(bool immediately) { Update(0, -1, immediately); }
81
83 {
84 QMutexLocker locker(&m_instanceLock);
85 m_mainServer = ms;
86 }
87
88 QMap<int, EncoderLink *> *m_encoderList {nullptr};
89
90 protected:
91 void RunExpirer(void);
92
93 private:
94 void ExpireLiveTV(int type);
95 void ExpireOldDeleted(void);
96 void ExpireQuickDeleted(void);
97 void ExpireRecordings(void);
98 void ExpireEpisodesOverMax(void);
99
100 void FillExpireList(pginfolist_t &expireList);
101 void FillDBOrdered(pginfolist_t &expireList, int expMethod);
102 static void SendDeleteMessages(pginfolist_t &deleteList);
103 void Sleep(std::chrono::milliseconds sleepTime);
104
105 void UpdateDontExpireSet(void);
106 bool IsInDontExpireSet(uint chanid, const QDateTime &recstartts) const;
107 static bool IsInExpireList(const pginfolist_t &expireList,
108 uint chanid, const QDateTime &recstartts);
109
110 // main expire info
111 QSet<QString> m_dontExpireSet;
112 ExpireThread *m_expireThread {nullptr}; // protected by m_instanceLock
113 uint m_desiredFreq {15}; // protected by m_instanceLock
114 bool m_expireThreadRun {false}; // protected by m_instanceLock
115
116 QMap<int, int64_t> m_desiredSpace; // protected by m_instanceLock
117 QMap<int, int> m_usedEncoders; // protected by m_instanceLock
118
119 mutable QMutex m_instanceLock;
120 QWaitCondition m_instanceCond; // protected by m_instanceLock
121
122 MainServer *m_mainServer {nullptr}; // protected by m_instanceLock
123
124 // update info
126 QQueue<UpdateEntry> m_updateQueue; // protected by m_updateLock
127};
128
129#endif
130
131/* 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:61
void FillDBOrdered(pginfolist_t &expireList, int expMethod)
Creates a list of programs to delete using the database to order list.
Definition: autoexpire.cpp:911
void ExpireRecordings(void)
This expires normal recordings.
Definition: autoexpire.cpp:408
void SetMainServer(MainServer *ms)
Definition: autoexpire.h:82
QWaitCondition m_instanceCond
Definition: autoexpire.h:120
AutoExpire()=default
bool m_expireThreadRun
Definition: autoexpire.h:114
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:381
void ExpireEpisodesOverMax(void)
This deletes programs exceeding the maximum number of episodes of that program desired.
Definition: autoexpire.cpp:666
void GetAllExpiring(QStringList &strList)
Gets the full list of programs that can expire in expiration order.
Definition: autoexpire.cpp:846
void UpdateDontExpireSet(void)
QMap< int, EncoderLink * > * m_encoderList
Definition: autoexpire.h:88
void ExpireQuickDeleted(void)
This expires deleted programs within a few minutes.
Definition: autoexpire.cpp:394
static bool IsInExpireList(const pginfolist_t &expireList, uint chanid, const QDateTime &recstartts)
uint m_desiredFreq
Definition: autoexpire.h:113
QMap< int, int64_t > m_desiredSpace
Definition: autoexpire.h:116
void RunExpirer(void)
This contains the main loop for the auto expire process.
Definition: autoexpire.cpp:275
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:785
void PrintExpireList(const QString &expHost="ALL")
Prints a summary of the files that can be deleted.
Definition: autoexpire.cpp:807
ExpireThread * m_expireThread
Definition: autoexpire.h:112
void CalcParams(void)
Calculates how much space needs to be cleared, and how often.
Definition: autoexpire.cpp:128
QMutex m_instanceLock
Definition: autoexpire.h:119
QMap< int, int > m_usedEncoders
Definition: autoexpire.h:117
MainServer * m_mainServer
Definition: autoexpire.h:122
QSet< QString > m_dontExpireSet
Definition: autoexpire.h:111
QMutex m_updateLock
Definition: autoexpire.h:125
static void SendDeleteMessages(pginfolist_t &deleteList)
This sends delete message to main event thread.
Definition: autoexpire.cpp:629
uint64_t GetDesiredSpace(int fsID) const
Used by the scheduler to select the next recording dir.
Definition: autoexpire.cpp:117
static void Update(bool immediately)
Definition: autoexpire.h:80
void Sleep(std::chrono::milliseconds sleepTime)
Sleeps for sleepTime milliseconds; unless the expire thread is told to quit.
Definition: autoexpire.cpp:351
static void ClearExpireList(pginfolist_t &expireList, bool deleteProg=true)
Clears expireList, freeing any ProgramInfo's if necessary.
Definition: autoexpire.cpp:892
~AutoExpire() override
AutoExpire destructor stops auto delete thread if it is running.
Definition: autoexpire.cpp:90
void ExpireLiveTV(int type)
This expires LiveTV programs.
Definition: autoexpire.cpp:368
QQueue< UpdateEntry > m_updateQueue
Definition: autoexpire.h:126
QPointer< AutoExpire > m_parent
Definition: autoexpire.h:47
void run(void) override
This calls AutoExpire::RunExpirer() from within a new thread.
Definition: autoexpire.cpp:62
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:284
Holds information on recordings and videos.
Definition: programinfo.h:74
UpdateEntry(int _encoder, int _fsID)
Definition: autoexpire.h:53
int m_encoder
Definition: autoexpire.h:56
unsigned int uint
Definition: compat.h:60
unsigned short uint16_t
Definition: iso6937tables.h:3