MythTV  master
mainserver.h
Go to the documentation of this file.
1 #ifndef MAINSERVER_H_
2 #define MAINSERVER_H_
3 
4 #include <utility>
5 #include <vector>
6 using namespace std;
7 
8 // Qt headers
9 #include <QReadWriteLock>
10 #include <QStringList>
11 #include <QRunnable>
12 #include <QEvent>
13 #include <QMutex>
14 #include <QHash>
15 #include <QMap>
16 
17 // MythTV headers
18 #include "tv.h"
19 #include "playbacksock.h"
20 #include "mthreadpool.h"
21 #include "encoderlink.h"
22 #include "exitcodes.h"
23 #include "filetransfer.h"
24 #include "scheduler.h"
25 #include "livetvchain.h"
26 #include "autoexpire.h"
27 #include "mythsocket.h"
28 #include "mythdeque.h"
29 #include "mythdownloadmanager.h"
30 
31 #ifdef DeleteFile
32 #undef DeleteFile
33 #endif
34 
35 class QUrl;
36 class MythServer;
37 class QTimer;
38 class FileSystemInfo;
39 class MetadataFactory;
40 class FreeSpaceUpdater;
41 
43 {
44  friend class MainServer;
45  public:
46  DeleteStruct(MainServer *ms, QString filename, QString title,
47  uint chanid, QDateTime recstartts, QDateTime recendts,
48  uint recordedId,
49  bool forceMetadataDelete) :
50  m_ms(ms), m_filename(std::move(filename)), m_title(std::move(title)),
51  m_chanid(chanid), m_recstartts(std::move(recstartts)),
52  m_recendts(std::move(recendts)), m_recordedid(recordedId),
53  m_forceMetadataDelete(forceMetadataDelete)
54  {
55  }
56 
57  DeleteStruct(MainServer *ms, QString filename, int fd, off_t size) :
58  m_ms(ms), m_filename(std::move(filename)), m_fd(fd), m_size(size)
59  {
60  }
61 
62  protected:
63  MainServer *m_ms {nullptr};
64  QString m_filename;
65  QString m_title;
66  uint m_chanid {0};
67  QDateTime m_recstartts;
68  QDateTime m_recendts;
69  uint m_recordedid {0};
70  bool m_forceMetadataDelete {false};
71  int m_fd {-1};
72  off_t m_size {0};
73 };
74 
75 class DeleteThread : public QRunnable, public DeleteStruct
76 {
77  public:
78  DeleteThread(MainServer *ms, const QString& filename, const QString& title, uint chanid,
79  QDateTime recstartts, QDateTime recendts, uint recordingId,
80  bool forceMetadataDelete) :
81  DeleteStruct(ms, filename, title, chanid, std::move(recstartts),
82  std::move(recendts), recordingId, forceMetadataDelete) {}
83  void start(void)
84  { MThreadPool::globalInstance()->startReserved(this, "DeleteThread"); }
85  void run(void) override; // QRunnable
86 };
87 
88 class TruncateThread : public QRunnable, public DeleteStruct
89 {
90  public:
91  TruncateThread(MainServer *ms, const QString& filename, int fd, off_t size) :
92  DeleteStruct(ms, filename, fd, size) {}
93  void start(void)
94  { MThreadPool::globalInstance()->start(this, "Truncate"); }
95  void run(void) override; // QRunnable
96 };
97 
98 class RenameThread : public QRunnable
99 {
100 public:
102  QString src, QString dst)
103  : m_ms(ms), m_pbs(pbs), m_src(std::move(src)), m_dst(std::move(dst)) {}
104  void run(void) override; // QRunnable
105 
106 private:
107  static QMutex s_renamelock;
108 
111  QString m_src, m_dst;
112 };
113 
114 class MainServer : public QObject, public MythSocketCBs
115 {
116  Q_OBJECT
117 
118  friend class DeleteThread;
119  friend class TruncateThread;
120  friend class FreeSpaceUpdater;
121  friend class RenameThread;
122  public:
123  MainServer(bool master, int port,
124  QMap<int, EncoderLink *> *tvList,
126 
127  ~MainServer() override;
128 
129  void Stop(void);
130 
131  void customEvent(QEvent *e) override; // QObject
132 
133  bool isClientConnected(bool onlyBlockingClients = false);
134  void ShutSlaveBackendsDown(QString &haltcmd);
135 
136  void ProcessRequest(MythSocket *sock);
137 
138  void readyRead(MythSocket *socket) override; // MythSocketCBs
139  void connectionClosed(MythSocket *socket) override; // MythSocketCBs
140  void connectionFailed(MythSocket *socket) override // MythSocketCBs
141  { (void)socket; }
142  void connected(MythSocket *socket) override // MythSocketCBs
143  { (void)socket; }
144 
145  void DeletePBS(PlaybackSock *sock);
146 
147  size_t GetCurrentMaxBitrate(void);
148  void BackendQueryDiskSpace(QStringList &strlist, bool consolidated,
149  bool allHosts);
150  void GetFilesystemInfos(QList<FileSystemInfo> &fsInfos,
151  bool useCache=true);
152 
153  int GetExitCode() const { return m_exitCode; }
154 
155  void UpdateSystemdStatus(void);
156 
157  protected slots:
158  void reconnectTimeout(void);
159  void deferredDeleteSlot(void);
160  static void autoexpireUpdate(void);
161 
162  private slots:
163  void NewConnection(qt_socket_fd_t socketDescriptor);
164 
165  private:
166 
167  void ProcessRequestWork(MythSocket *sock);
168  void HandleAnnounce(QStringList &slist, QStringList commands,
169  MythSocket *socket);
170  void HandleDone(MythSocket *socket);
171 
172  void GetActiveBackends(QStringList &hosts);
173  void HandleActiveBackendsQuery(PlaybackSock *pbs);
174  void HandleIsActiveBackendQuery(QStringList &slist, PlaybackSock *pbs);
175  void HandleMoveFile(PlaybackSock *pbs, const QString &storagegroup,
176  const QString &src, const QString &dst);
177  bool HandleDeleteFile(QStringList &slist, PlaybackSock *pbs);
178  bool HandleDeleteFile(const QString& filename, const QString& storagegroup,
179  PlaybackSock *pbs = nullptr);
180  void HandleQueryRecordings(const QString& type, PlaybackSock *pbs);
181  void HandleQueryRecording(QStringList &slist, PlaybackSock *pbs);
182  void HandleStopRecording(QStringList &slist, PlaybackSock *pbs);
183  void DoHandleStopRecording(RecordingInfo &recinfo, PlaybackSock *pbs);
184  void HandleDeleteRecording(QString &chanid, QString &starttime,
185  PlaybackSock *pbs, bool forceMetadataDelete,
186  bool forgetHistory);
187  void HandleDeleteRecording(QStringList &slist, PlaybackSock *pbs,
188  bool forceMetadataDelete);
189  void DoHandleDeleteRecording(RecordingInfo &recinfo, PlaybackSock *pbs,
190  bool forceMetadataDelete, bool expirer=false,
191  bool forgetHistory=false);
192  void HandleUndeleteRecording(QStringList &slist, PlaybackSock *pbs);
193  void DoHandleUndeleteRecording(RecordingInfo &recinfo, PlaybackSock *pbs);
194  void HandleForgetRecording(QStringList &slist, PlaybackSock *pbs);
195  void HandleRescheduleRecordings(const QStringList &request,
196  PlaybackSock *pbs);
197  bool HandleAddChildInput(uint inputid);
198  void HandleGoToSleep(PlaybackSock *pbs);
199  void HandleQueryFreeSpace(PlaybackSock *pbs, bool allHosts);
200  void HandleQueryFreeSpaceSummary(PlaybackSock *pbs);
201  void HandleQueryCheckFile(QStringList &slist, PlaybackSock *pbs);
202  void HandleQueryFileExists(QStringList &slist, PlaybackSock *pbs);
203  void HandleQueryFindFile(QStringList &slist, PlaybackSock *pbs);
204  void HandleQueryFileHash(QStringList &slist, PlaybackSock *pbs);
205  void HandleQueryGuideDataThrough(PlaybackSock *pbs);
206  void HandleGetPendingRecordings(PlaybackSock *pbs, const QString& table = "", int recordid=-1);
207  void HandleGetScheduledRecordings(PlaybackSock *pbs);
208  void HandleGetConflictingRecordings(QStringList &slist, PlaybackSock *pbs);
209  void HandleGetExpiringRecordings(PlaybackSock *pbs);
210  void HandleSGGetFileList(QStringList &sList, PlaybackSock *pbs);
211  void HandleSGFileQuery(QStringList &sList, PlaybackSock *pbs);
212  void HandleGetFreeInputInfo(PlaybackSock *pbs, uint excluded_input);
213  void HandleGetNextFreeRecorder(QStringList &slist, PlaybackSock *pbs);
218  void HandleRecorderQuery(QStringList &slist, QStringList &commands,
219  PlaybackSock *pbs);
220  void HandleSetNextLiveTVDir(QStringList &commands, PlaybackSock *pbs);
221  void HandleFileTransferQuery(QStringList &slist, QStringList &commands,
222  PlaybackSock *pbs);
223  void HandleGetRecorderNum(QStringList &slist, PlaybackSock *pbs);
224  void HandleGetRecorderFromNum(QStringList &slist, PlaybackSock *pbs);
225  void HandleMessage(QStringList &slist, PlaybackSock *pbs);
226  void HandleSetVerbose(QStringList &slist, PlaybackSock *pbs);
227  void HandleSetLogLevel(QStringList &slist, PlaybackSock *pbs);
228  void HandleGenPreviewPixmap(QStringList &slist, PlaybackSock *pbs);
229  void HandlePixmapLastModified(QStringList &slist, PlaybackSock *pbs);
230  void HandlePixmapGetIfModified(const QStringList &slist, PlaybackSock *pbs);
231  void HandleIsRecording(QStringList &slist, PlaybackSock *pbs);
232  void HandleCheckRecordingActive(QStringList &slist, PlaybackSock *pbs);
233  void HandleFillProgramInfo(QStringList &slist, PlaybackSock *pbs);
234  void HandleSetChannelInfo(QStringList &slist, PlaybackSock *pbs);
235  void HandleRemoteEncoder(QStringList &slist, QStringList &commands,
236  PlaybackSock *pbs);
237  void HandleLockTuner(PlaybackSock *pbs, int cardid = -1);
238  void HandleFreeTuner(int cardid, PlaybackSock *pbs);
239  void HandleCutMapQuery(const QString &chanid, const QString &starttime,
240  PlaybackSock *pbs, bool commbreak);
241  void HandleCommBreakQuery(const QString &chanid, const QString &starttime,
242  PlaybackSock *pbs);
243  void HandleCutlistQuery(const QString &chanid, const QString &starttime,
244  PlaybackSock *pbs);
245  void HandleBookmarkQuery(const QString &chanid, const QString &starttime,
246  PlaybackSock *pbs);
247  void HandleSetBookmark(QStringList &tokens, PlaybackSock *pbs);
248  void HandleSettingQuery(QStringList &tokens, PlaybackSock *pbs);
249  void HandleSetSetting(QStringList &tokens, PlaybackSock *pbs);
250  void HandleScanVideos(PlaybackSock *pbs);
251  void HandleScanMusic(const QStringList &slist, PlaybackSock *pbs);
252  void HandleMusicTagUpdateVolatile(const QStringList &slist, PlaybackSock *pbs);
253  void HandleMusicTagUpdateMetadata(const QStringList &slist, PlaybackSock *pbs);
254  void HandleMusicFindAlbumArt(const QStringList &slist, PlaybackSock *pbs);
255  void HandleMusicTagGetImage(const QStringList &slist, PlaybackSock *pbs);
256  void HandleMusicTagAddImage(const QStringList &slist, PlaybackSock *pbs);
257  void HandleMusicTagRemoveImage(const QStringList &slist, PlaybackSock *pbs);
258  void HandleMusicTagChangeImage(const QStringList &slist, PlaybackSock *pbs);
259  void HandleMusicCalcTrackLen(const QStringList &slist, PlaybackSock *pbs);
260  void HandleMusicFindLyrics(const QStringList &slist, PlaybackSock *pbs);
261  void HandleMusicGetLyricGrabbers(const QStringList &slist, PlaybackSock *pbs);
262  void HandleMusicSaveLyrics(const QStringList &slist, PlaybackSock *pbs);
263  void HandleVersion(MythSocket *socket, const QStringList &slist);
264  void HandleBackendRefresh(MythSocket *socket);
265  void HandleQueryLoad(PlaybackSock *pbs);
266  void HandleQueryUptime(PlaybackSock *pbs);
267  void HandleQueryHostname(PlaybackSock *pbs);
268  void HandleQueryMemStats(PlaybackSock *pbs);
269  void HandleQueryTimeZone(PlaybackSock *pbs);
270  void HandleBlockShutdown(bool blockShutdown, PlaybackSock *pbs);
271  void HandleDownloadFile(const QStringList &command, PlaybackSock *pbs);
272  void HandleSlaveDisconnectedEvent(const MythEvent &event);
273 
274  void SendResponse(MythSocket *sock, QStringList &commands);
275  void SendErrorResponse(MythSocket *sock, const QString &error);
276  void SendErrorResponse(PlaybackSock *pbs, const QString &error);
277  static void SendSlaveDisconnectedEvent(const QList<uint> &offlineEncoderIDs,
278  bool needsReschedule);
279 
280  static void getGuideDataThrough(QDateTime &GuideDataThrough);
281 
282  PlaybackSock *GetSlaveByHostname(const QString &hostname);
283  PlaybackSock *GetMediaServerByHostname(const QString &hostname);
284  PlaybackSock *GetPlaybackBySock(MythSocket *socket);
285  FileTransfer *GetFileTransferByID(int id);
286  FileTransfer *GetFileTransferBySock(MythSocket *socket);
287 
288  static QString LocalFilePath(const QString &path, const QString &wantgroup);
289 
290  int GetfsID(const QList<FileSystemInfo>::iterator& fsInfo);
291 
292  void DoTruncateThread(DeleteStruct *ds);
293  void DoDeleteThread(DeleteStruct *ds);
294  static void DeleteRecordedFiles(DeleteStruct *ds);
295  static void DoDeleteInDB(DeleteStruct *ds);
296 
297  LiveTVChain *GetExistingChain(const QString &id);
298  LiveTVChain *GetExistingChain(MythSocket *sock);
299  LiveTVChain *GetChainWithRecording(const ProgramInfo &pginfo);
300  void AddToChains(LiveTVChain *chain);
301  void DeleteChain(LiveTVChain *chain);
302 
303  void SetExitCode(int exitCode, bool closeApplication);
304 
305  static int DeleteFile(const QString &filename, bool followLinks,
306  bool deleteBrokenSymlinks = false);
307  static int OpenAndUnlink(const QString &filename);
308  static bool TruncateAndClose(ProgramInfo *pginfo,
309  int fd, const QString &filename,
310  off_t fsize);
311 
312  vector<LiveTVChain*> m_liveTVChains;
314 
315  QMap<int, EncoderLink *> *m_encoderList {nullptr};
316 
317  MythServer *m_mythserver {nullptr};
318  MetadataFactory *m_metadatafactory {nullptr};
319 
320  QReadWriteLock m_sockListLock;
321  vector<PlaybackSock *> m_playbackList;
322  vector<FileTransfer *> m_fileTransferList;
323  QSet<MythSocket*> m_controlSocketList;
324  vector<MythSocket*> m_decrRefSocketList;
325 
327  FreeSpaceUpdater * volatile m_masterFreeSpaceListUpdater {nullptr};
330 
331  QTimer *m_masterServerReconnect {nullptr}; // audited ref #5318
332  PlaybackSock *m_masterServer {nullptr};
333 
335 
336  QMutex m_deletelock;
338 
339  bool m_masterBackendOverride {false};
340 
341  Scheduler *m_sched {nullptr};
342  AutoExpire *m_expirer {nullptr};
344 
346  {
347  PlaybackSock *sock{};
348  QDateTime ts;
349  };
350 
352  QTimer *m_deferredDeleteTimer {nullptr}; // audited ref #5318
354 
355  QTimer *m_autoexpireUpdateTimer {nullptr}; // audited ref #5318
357 
358  QMap<QString, int> m_fsIDcache;
360  QList<FileSystemInfo> m_fsInfosCache;
362 
364  QMap<QString, QString> m_downloadURLs;
365 
366  int m_exitCode {GENERIC_EXIT_OK};
367 
368  using RequestedBy = QHash<QString,QString>;
370 
371  bool m_stopped {false};
372 
374 };
375 
376 #endif
377 
378 /* vim: set expandtab tabstop=4 shiftwidth=4: */
MainServer::m_controlSocketList
QSet< MythSocket * > m_controlSocketList
Definition: mainserver.h:323
Scheduler
Definition: scheduler.h:47
RenameThread::s_renamelock
static QMutex s_renamelock
Definition: mainserver.h:107
e
QDomElement e
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:1417
TruncateThread::start
void start(void)
Definition: mainserver.h:93
tv.h
DeleteStruct::m_filename
QString m_filename
Definition: mainserver.h:64
DeleteThread::run
void run(void) override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
GENERIC_EXIT_OK
#define GENERIC_EXIT_OK
Exited with no error.
Definition: exitcodes.h:10
TruncateThread
Definition: mainserver.h:89
MainServer::connected
void connected(MythSocket *socket) override
Definition: mainserver.h:142
error
static void error(const char *str,...)
Definition: vbi.cpp:42
MainServer::m_fsIDcacheLock
QMutex m_fsIDcacheLock
Definition: mainserver.h:359
DeleteStruct::DeleteStruct
DeleteStruct(MainServer *ms, QString filename, int fd, off_t size)
Definition: mainserver.h:57
MainServer::HandleGetNextFreeRecorder
void HandleGetNextFreeRecorder(QStringList &slist, PlaybackSock *pbs)
DeleteStruct::m_title
QString m_title
Definition: mainserver.h:65
MainServer::m_previewRequestedBy
RequestedBy m_previewRequestedBy
Definition: mainserver.h:369
MainServer::m_addChildInputLock
QMutex m_addChildInputLock
Definition: mainserver.h:343
title
QString title
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:633
MainServer::m_deferredDeleteLock
QMutex m_deferredDeleteLock
Definition: mainserver.h:351
RecordingInfo
Holds information on a TV Program one might wish to record.
Definition: recordinginfo.h:35
MainServer::DeferredDeleteStruct
Definition: mainserver.h:346
tvList
QMap< int, EncoderLink * > tvList
Definition: backendcontext.cpp:7
MainServer::m_liveTVChainsLock
QMutex m_liveTVChainsLock
Definition: mainserver.h:313
MythEvent
This class is used as a container for messages.
Definition: mythevent.h:17
DeleteThread::DeleteThread
DeleteThread(MainServer *ms, const QString &filename, const QString &title, uint chanid, QDateTime recstartts, QDateTime recendts, uint recordingId, bool forceMetadataDelete)
Definition: mainserver.h:78
DeleteThread
Definition: deletethread.h:20
MainServer
Definition: mainserver.h:115
AutoExpire
Used to expire recordings to make space for new recordings.
Definition: autoexpire.h:62
playbacksock.h
MainServer::m_masterFreeSpaceListLock
QMutex m_masterFreeSpaceListLock
Definition: mainserver.h:326
slots
unsigned int slots[4]
Definition: element.cpp:38
RenameThread::m_src
QString m_src
Definition: mainserver.h:111
DeleteStruct::DeleteStruct
DeleteStruct(MainServer *ms, QString filename, QString title, uint chanid, QDateTime recstartts, QDateTime recendts, uint recordedId, bool forceMetadataDelete)
Definition: mainserver.h:46
MainServer::RequestedBy
QHash< QString, QString > RequestedBy
Definition: mainserver.h:368
mythdeque.h
scheduler.h
MainServer::m_masterFreeSpaceList
QStringList m_masterFreeSpaceList
Definition: mainserver.h:329
FileTransfer
Definition: libs/libmythprotoserver/sockethandler/filetransfer.h:22
MainServer::m_fsIDcache
QMap< QString, int > m_fsIDcache
Definition: mainserver.h:358
MythSocket
Class for communcating between myth backends and frontends.
Definition: mythsocket.h:27
autoexpire.h
expirer
AutoExpire * expirer
Definition: backendcontext.cpp:8
pbs
Definition: pbs.py:1
MainServer::s_truncate_and_close_lock
static QMutex s_truncate_and_close_lock
Definition: mainserver.h:356
MythServer
Definition: mythsocketmanager.h:22
MainServer::m_decrRefSocketList
vector< MythSocket * > m_decrRefSocketList
Definition: mainserver.h:324
filetransfer.h
MainServer::kMasterServerReconnectTimeout
static const uint kMasterServerReconnectTimeout
Definition: mainserver.h:373
MainServer::m_ismaster
bool m_ismaster
Definition: mainserver.h:334
DeleteStruct
Definition: mainserver.h:43
filename
QString filename
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:634
DeleteStruct::m_recstartts
QDateTime m_recstartts
Definition: mainserver.h:67
MainServer::HandleGetFreeRecorder
void HandleGetFreeRecorder(PlaybackSock *pbs)
MythSocketCBs
Definition: mythsocket_cb.h:12
MainServer::DeferredDeleteStruct::ts
QDateTime ts
Definition: mainserver.h:348
uint
unsigned int uint
Definition: compat.h:140
PlaybackSock
Definition: playbacksock.h:29
MetadataFactory
Definition: metadatafactory.h:86
MainServer::m_downloadURLs
QMap< QString, QString > m_downloadURLs
Definition: mainserver.h:364
off_t
#define off_t
Definition: mythiowrapper.cpp:238
RenameThread
Definition: mainserver.h:99
MainServer::GetExitCode
int GetExitCode() const
Definition: mainserver.h:153
DeleteStruct::m_recendts
QDateTime m_recendts
Definition: mainserver.h:68
mthreadpool.h
sched
Scheduler * sched
MThreadPool
Definition: mthreadpool.h:18
livetvchain.h
ProgramInfo
Holds information on recordings and videos.
Definition: programinfo.h:68
MainServer::m_playbackList
vector< PlaybackSock * > m_playbackList
Definition: mainserver.h:321
MainServer::m_threadPool
MThreadPool m_threadPool
Definition: mainserver.h:337
RenameThread::m_pbs
PlaybackSock & m_pbs
Definition: mainserver.h:110
MythDeque
MythDeque is similar to QPtrQueue, while being based off deque, this allows that items that are not a...
Definition: mythdeque.h:29
FileSystemInfo
Definition: filesysteminfo.h:16
MainServer::m_liveTVChains
vector< LiveTVChain * > m_liveTVChains
Definition: mainserver.h:312
MainServer::HandleGetFreeRecorderCount
void HandleGetFreeRecorderCount(PlaybackSock *pbs)
MainServer::m_fsInfosCache
QList< FileSystemInfo > m_fsInfosCache
Definition: mainserver.h:360
MainServer::m_fsInfosCacheLock
QMutex m_fsInfosCacheLock
Definition: mainserver.h:361
MainServer::m_masterFreeSpaceListWait
QWaitCondition m_masterFreeSpaceListWait
Definition: mainserver.h:328
MainServer::HandleGetConnectedRecorderList
void HandleGetConnectedRecorderList(PlaybackSock *pbs)
MainServer::m_downloadURLsLock
QMutex m_downloadURLsLock
Definition: mainserver.h:363
MainServer::m_sockListLock
QReadWriteLock m_sockListLock
Definition: mainserver.h:320
MainServer::m_fileTransferList
vector< FileTransfer * > m_fileTransferList
Definition: mainserver.h:322
RenameThread::RenameThread
RenameThread(MainServer &ms, PlaybackSock &pbs, QString src, QString dst)
Definition: mainserver.h:101
musicbrainzngs.caa.hostname
string hostname
Definition: caa.py:17
RenameThread::m_ms
MainServer & m_ms
Definition: mainserver.h:109
MainServer::m_deferredDeleteList
MythDeque< DeferredDeleteStruct > m_deferredDeleteList
Definition: mainserver.h:353
MainServer::HandleGetFreeRecorderList
void HandleGetFreeRecorderList(PlaybackSock *pbs)
DeleteThread::start
void start(void)
Definition: mainserver.h:83
exitcodes.h
mythdownloadmanager.h
MainServer::m_deletelock
QMutex m_deletelock
Definition: mainserver.h:336
MThreadPool::globalInstance
static MThreadPool * globalInstance(void)
Definition: mthreadpool.cpp:307
mythsocket.h
TruncateThread::TruncateThread
TruncateThread(MainServer *ms, const QString &filename, int fd, off_t size)
Definition: mainserver.h:91
qt_socket_fd_t
qintptr qt_socket_fd_t
Definition: mythqtcompat.h:4
FreeSpaceUpdater
Definition: mainserver.cpp:171
MThreadPool::startReserved
void startReserved(QRunnable *runnable, const QString &debugName, int waitForAvailMS=0)
Definition: mthreadpool.cpp:361
MThreadPool::start
void start(QRunnable *runnable, const QString &debugName, int priority=0)
Definition: mthreadpool.cpp:342
MainServer::connectionFailed
void connectionFailed(MythSocket *socket) override
Definition: mainserver.h:140
LiveTVChain
Keeps track of recordings in a current LiveTV instance.
Definition: livetvchain.h:32