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