MythTV  master
playbacksock.cpp
Go to the documentation of this file.
1 // C++
2 #include <utility>
3 
4 // Qt
5 #include <QStringList>
6 
7 // MythTV
8 #include "libmythbase/compat.h"
10 #include "libmythbase/mythdate.h"
14 #include "libmythtv/inputinfo.h"
15 
16 // MythBackend
17 #include "mainserver.h"
18 #include "playbacksock.h"
19 
20 #define LOC QString("PlaybackSock: ")
21 #define LOC_ERR QString("PlaybackSock, Error: ")
22 
24  MythSocket *lsock,
25  QString lhostname, PlaybackSockEventsMode eventsMode) :
26  ReferenceCounter("PlaybackSock"),
27  m_sock(lsock),
28  m_hostname(std::move(lhostname)),
29  m_ip(""),
30  m_eventsMode(eventsMode)
31 {
32  QString localhostname = gCoreContext->GetHostName();
33  m_local = (m_hostname == localhostname);
34 }
35 
37 {
38  m_sock->DecrRef();
39  m_sock = nullptr;
40 }
41 
42 bool PlaybackSock::wantsEvents(void) const
43 {
44  return (m_eventsMode != kPBSEvents_None);
45 }
46 
48 {
49  return ((m_eventsMode == kPBSEvents_Normal) ||
51 }
52 
54 {
55  return ((m_eventsMode == kPBSEvents_Normal) ||
57 }
58 
60 {
62 }
63 
65 {
66  return m_eventsMode;
67 }
68 
69 bool PlaybackSock::ReadStringList(QStringList &list)
70 {
71  m_sock->IncrRef();
72  ReferenceLocker rlocker(m_sock);
73  QMutexLocker locker(&m_sockLock);
74  if (!m_sock->IsDataAvailable())
75  {
76  LOG(VB_GENERAL, LOG_DEBUG,
77  "PlaybackSock::ReadStringList(): Data vanished !!!");
78  return false;
79  }
80  return m_sock->ReadStringList(list);
81 }
82 
84  QStringList &strlist, uint min_reply_length)
85 {
86  bool ok = false;
87 
88  m_sock->IncrRef();
89 
90  {
91  QMutexLocker locker(&m_sockLock);
93 
94  ok = m_sock->SendReceiveStringList(strlist);
95  while (ok && strlist[0] == "BACKEND_MESSAGE")
96  {
97  // oops, not for us
98  if (strlist.size() >= 2)
99  {
100  QString message = strlist[1];
101  strlist.pop_front();
102  strlist.pop_front();
103  MythEvent me(message, strlist);
104  gCoreContext->dispatch(me);
105  }
106 
107  ok = m_sock->ReadStringList(strlist);
108  }
110  }
111 
112  m_sock->DecrRef();
113 
114  if (!ok)
115  {
116  LOG(VB_GENERAL, LOG_ERR,
117  "PlaybackSock::SendReceiveStringList(): No response.");
118  return false;
119  }
120 
121  if (min_reply_length && ((uint)strlist.size() < min_reply_length))
122  {
123  LOG(VB_GENERAL, LOG_ERR,
124  "PlaybackSock::SendReceiveStringList(): Response too short");
125  return false;
126  }
127 
128  return true;
129 }
130 
134 {
135  QStringList strlist(QString("GO_TO_SLEEP"));
136 
137  return SendReceiveStringList(strlist, 1) && (strlist[0] == "OK");
138 }
139 
143 void PlaybackSock::GetDiskSpace(QStringList &o_strlist)
144 {
145  QStringList strlist(QString("QUERY_FREE_SPACE"));
146 
147  if (SendReceiveStringList(strlist, 8))
148  {
149  o_strlist += strlist;
150  }
151 }
152 
154 {
155  QStringList strlist(QString("CHECK_RECORDING"));
156  pginfo->ToStringList(strlist);
157 
158  if (SendReceiveStringList(strlist, 1))
159  return strlist[0].toInt();
160 
161  return 0;
162 }
163 
164 int PlaybackSock::DeleteFile(const QString &filename, const QString &sgroup)
165 {
166  QStringList strlist("DELETE_FILE");
167  strlist << filename;
168  strlist << sgroup;
169 
170  if (SendReceiveStringList(strlist, 1))
171  return strlist[0].toInt();
172 
173  return 0;
174 }
175 
177 {
178  QStringList strlist(QString("STOP_RECORDING"));
179  pginfo->ToStringList(strlist);
180 
181  if (SendReceiveStringList(strlist, 1))
182  return strlist[0].toInt();
183 
184  return 0;
185 }
186 
188  bool forceMetadataDelete)
189 {
190  QStringList strlist;
191 
192  if (forceMetadataDelete)
193  strlist = QStringList( QString("FORCE_DELETE_RECORDING"));
194  else
195  strlist = QStringList( QString("DELETE_RECORDING"));
196 
197  pginfo->ToStringList(strlist);
198 
199  if (SendReceiveStringList(strlist, 1))
200  return strlist[0].toInt();
201 
202  return 0;
203 }
204 
206  const QString &playbackhost)
207 {
208  QStringList strlist(QString("FILL_PROGRAM_INFO"));
209  strlist << playbackhost;
210  pginfo.ToStringList(strlist);
211 
212  if (SendReceiveStringList(strlist))
213  {
214  ProgramInfo tmp(strlist);
215  if (tmp.HasPathname() || tmp.GetChanID())
216  {
217  pginfo.clone(tmp, true);
218  return true;
219  }
220  }
221 
222  return false;
223 }
224 
225 QStringList PlaybackSock::GetSGFileList(const QString &host, const QString &groupname,
226  const QString &directory, bool fileNamesOnly)
227 {
228  QStringList strlist(QString("QUERY_SG_GETFILELIST"));
229  strlist << host;
230  strlist << groupname;
231  strlist << directory;
232  strlist << QString::number(static_cast<int>(fileNamesOnly));
233 
234  SendReceiveStringList(strlist);
235 
236  return strlist;
237 }
238 
239 QStringList PlaybackSock::GetSGFileQuery(const QString &host, const QString &groupname,
240  const QString &filename)
241 {
242  QStringList strlist(QString("QUERY_SG_FILEQUERY"));
243  strlist << host;
244  strlist << groupname;
245  strlist << filename;
246 
247  SendReceiveStringList(strlist);
248 
249  return strlist;
250 }
251 
252 QString PlaybackSock::GetFileHash(const QString& filename, const QString& storageGroup)
253 {
254  QStringList strlist(QString("QUERY_FILE_HASH"));
255  strlist << filename
256  << storageGroup;
257 
258  SendReceiveStringList(strlist);
259  return strlist[0];
260 }
261 
262 QStringList PlaybackSock::GetFindFile(const QString &host, const QString &filename,
263  const QString &storageGroup, bool useRegex)
264 {
265  QStringList strlist(QString("QUERY_FINDFILE"));
266  strlist << host
267  << storageGroup
268  << filename
269  << (useRegex ? "1" : "0")
270  << "0";
271 
272  SendReceiveStringList(strlist);
273  return strlist;
274 }
275 
276 QStringList PlaybackSock::GenPreviewPixmap(const QString &token,
277  const ProgramInfo *pginfo)
278 {
279  QStringList strlist(QString("QUERY_GENPIXMAP2"));
280  strlist += token;
281  pginfo->ToStringList(strlist);
282 
283  SendReceiveStringList(strlist);
284 
285  return strlist;
286 }
287 
288 QStringList PlaybackSock::GenPreviewPixmap(const QString &token,
289  const ProgramInfo *pginfo,
290  std::chrono::seconds time,
291  long long frame,
292  const QString &outputFile,
293  const QSize outputSize)
294 {
295  QStringList strlist(QString("QUERY_GENPIXMAP2"));
296  strlist += token;
297  pginfo->ToStringList(strlist);
298  if (time != std::chrono::seconds::max())
299  {
300  strlist.push_back("s");
301  strlist.push_back(QString::number(time.count()));
302  }
303  else
304  {
305  strlist.push_back("f");
306  strlist.push_back(QString::number(frame));
307  }
308  strlist.push_back((outputFile.isEmpty()) ? "<EMPTY>" : outputFile);
309  strlist.push_back(QString::number(outputSize.width()));
310  strlist.push_back(QString::number(outputSize.height()));
311 
312  SendReceiveStringList(strlist);
313 
314  return strlist;
315 }
316 
318 {
319  QStringList strlist(QString("QUERY_PIXMAP_LASTMODIFIED"));
320  pginfo->ToStringList(strlist);
321 
322  SendReceiveStringList(strlist);
323 
324  if (!strlist.empty() && !strlist[0].isEmpty() && (strlist[0] != "BAD"))
325  {
326  return MythDate::fromSecsSinceEpoch(strlist[0].toLongLong());
327  }
328 
329  return {};
330 }
331 
333 {
334  QStringList strlist("QUERY_CHECKFILE");
335  strlist << QString::number(0); // don't check slaves
336  pginfo->ToStringList(strlist);
337 
338  if (SendReceiveStringList(strlist, 2))
339  {
340  pginfo->SetPathname(strlist[1]);
341  return strlist[0].toInt() != 0;
342  }
343 
344  return false;
345 }
346 
347 bool PlaybackSock::IsBusy(int capturecardnum, InputInfo *busy_input,
348  std::chrono::seconds time_buffer)
349 {
350  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
351 
352  strlist << "IS_BUSY";
353  strlist << QString::number(time_buffer.count());
354 
355  if (!SendReceiveStringList(strlist, 1))
356  {
357  LOG(VB_GENERAL, LOG_ERR, LOC + "IsBusy: " +
358  QString("QUERY_REMOTEENCODER %1").arg(capturecardnum) +
359  " gave us no response.");
360  }
361 
362  bool state = false;
363 
364  if (!strlist.isEmpty())
365  {
366  QStringList::const_iterator it = strlist.cbegin();
367  state = ((*it).toInt() != 0);
368 
369  if (busy_input)
370  {
371  ++it;
372  if (!busy_input->FromStringList(it, strlist.cend()))
373  {
374  LOG(VB_GENERAL, LOG_ERR, LOC + "IsBusy: "
375  "Failed to parse response to " +
376  QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
377  state = false;
378  // pretend it's not busy if we can't parse response
379  }
380  }
381  }
382 
383  return state;
384 }
385 
390 int PlaybackSock::GetEncoderState(int capturecardnum)
391 {
392  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
393  strlist << "GET_STATE";
394 
395  if (!SendReceiveStringList(strlist, 1))
396  {
397  LOG(VB_GENERAL, LOG_ERR, LOC + "GetEncoderState: " +
398  QString("QUERY_REMOTEENCODER %1").arg(capturecardnum) +
399  " gave us no response.");
400 
401  return kState_Error;
402  }
403 
404  return strlist[0].toInt();
405 }
406 
407 long long PlaybackSock::GetMaxBitrate(int capturecardnum)
408 {
409  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
410  strlist << "GET_MAX_BITRATE";
411 
412  if (SendReceiveStringList(strlist, 1))
413  return strlist[0].toLongLong();
414 
415  return 20200000LL; // Peak bit rate for HD-PVR
416 }
417 
423 {
424  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(cardid));
425  strlist << "GET_CURRENT_RECORDING";
426 
427  if (!SendReceiveStringList(strlist))
428  return nullptr;
429 
430  auto *pginfo = new ProgramInfo(strlist);
431  if (!pginfo->HasPathname() && !pginfo->GetChanID())
432  {
433  delete pginfo;
434  pginfo = nullptr;
435  }
436 
437  return pginfo;
438 }
439 
440 bool PlaybackSock::EncoderIsRecording(int capturecardnum,
441  const ProgramInfo *pginfo)
442 {
443  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
444  strlist << "MATCHES_RECORDING";
445  pginfo->ToStringList(strlist);
446 
447  if (SendReceiveStringList(strlist, 1))
448  return (bool) strlist[0].toInt();
449 
450  return false;
451 }
452 
454  ProgramInfo *pginfo)
455 {
456  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
457  strlist << "START_RECORDING";
458  pginfo->ToStringList(strlist);
459 
460  if (SendReceiveStringList(strlist, 3))
461  {
462  pginfo->SetRecordingID(strlist[1].toUInt());
463  pginfo->SetRecordingStartTime(
464  MythDate::fromSecsSinceEpoch(strlist[2].toLongLong()));
465  return RecStatus::Type(strlist[0].toInt());
466  }
467 
468  return RecStatus::Unknown;
469 }
470 
472 {
473  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
474  strlist << "GET_RECORDING_STATUS";
475 
476  if (!SendReceiveStringList(strlist, 1))
477  {
478  LOG(VB_GENERAL, LOG_ERR, LOC + "GetRecordingStatus: " +
479  QString("QUERY_REMOTEENCODER %1").arg(capturecardnum) +
480  " did not respond.");
481 
482  return RecStatus::Unknown;
483  }
484 
485  return RecStatus::Type(strlist[0].toInt());
486 }
487 
488 void PlaybackSock::RecordPending(int capturecardnum, const ProgramInfo *pginfo,
489  std::chrono::seconds secsleft, bool hasLater)
490 {
491  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
492  strlist << "RECORD_PENDING";
493  strlist << QString::number(secsleft.count());
494  strlist << QString::number(static_cast<int>(hasLater));
495  pginfo->ToStringList(strlist);
496 
497  SendReceiveStringList(strlist);
498 }
499 
500 std::chrono::milliseconds PlaybackSock::SetSignalMonitoringRate(int capturecardnum,
501  std::chrono::milliseconds rate, int notifyFrontend)
502 {
503  QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(capturecardnum));
504  strlist << "SET_SIGNAL_MONITORING_RATE";
505  strlist << QString::number(rate.count());
506  strlist << QString::number(notifyFrontend);
507 
508  if (SendReceiveStringList(strlist, 1))
509  return std::chrono::milliseconds(strlist[0].toInt());
510 
511  return -1ms;
512 }
513 
514 void PlaybackSock::SetNextLiveTVDir(int capturecardnum, const QString& dir)
515 {
516  QStringList strlist(QString("SET_NEXT_LIVETV_DIR %1 %2")
517  .arg(capturecardnum)
518  .arg(dir));
519 
520  SendReceiveStringList(strlist);
521 }
522 
523 void PlaybackSock::CancelNextRecording(int capturecardnum, bool cancel)
524 {
525  QStringList strlist(QString("QUERY_REMOTEENCODER %1")
526  .arg(capturecardnum));
527 
528  strlist << "CANCEL_NEXT_RECORDING";
529  strlist << QString::number(static_cast<int>(cancel));
530 
531  SendReceiveStringList(strlist);
532 }
533 
534 QStringList PlaybackSock::ForwardRequest(const QStringList &slist)
535 {
536  QStringList strlist = slist;
537 
538  if (SendReceiveStringList(strlist))
539  return strlist;
540 
541  return {};
542 }
543 
547 {
548  QStringList strlist(QString("ADD_CHILD_INPUT %1").arg(childid));
549  return SendReceiveStringList(strlist, 1) && (strlist[0] == "OK");
550 }
551 
552 /* vim: set expandtab tabstop=4 shiftwidth=4: */
ReferenceLocker
This decrements the reference on destruction.
Definition: referencecounter.h:66
RecStatus::Type
Type
Definition: recordingstatus.h:16
kPBSEvents_SystemOnly
@ kPBSEvents_SystemOnly
Definition: playbacksock.h:24
PlaybackSock::GetDiskSpace
void GetDiskSpace(QStringList &o_strlist)
Appends host's dir's total and used space in kilobytes.
Definition: playbacksock.cpp:143
PlaybackSock::wantsOnlySystemEvents
bool wantsOnlySystemEvents(void) const
Definition: playbacksock.cpp:59
PlaybackSock::RecordPending
void RecordPending(int capturecardnum, const ProgramInfo *pginfo, std::chrono::seconds secsleft, bool hasLater)
Definition: playbacksock.cpp:488
PlaybackSock::m_hostname
QString m_hostname
Definition: playbacksock.h:118
PlaybackSock::m_sock
MythSocket * m_sock
Definition: playbacksock.h:117
ReferenceCounter::DecrRef
virtual int DecrRef(void)
Decrements reference count and deletes on 0.
Definition: referencecounter.cpp:124
PlaybackSock::EncoderIsRecording
bool EncoderIsRecording(int capturecardnum, const ProgramInfo *pginfo)
Definition: playbacksock.cpp:440
PlaybackSock::wantsSystemEvents
bool wantsSystemEvents(void) const
Definition: playbacksock.cpp:53
PlaybackSock::~PlaybackSock
~PlaybackSock() override
Definition: playbacksock.cpp:36
PlaybackSock::m_eventsMode
PlaybackSockEventsMode m_eventsMode
Definition: playbacksock.h:122
ProgramInfo::SetRecordingID
virtual void SetRecordingID(uint _recordedid)
Definition: programinfo.h:583
ProgramInfo::clone
virtual void clone(const ProgramInfo &other, bool ignore_non_serialized_data=false)
Copies important fields from other ProgramInfo.
Definition: programinfo.cpp:845
MythEvent
This class is used as a container for messages.
Definition: mythevent.h:16
PlaybackSock::FillProgramInfo
bool FillProgramInfo(ProgramInfo &pginfo, const QString &playbackhost)
Definition: playbacksock.cpp:205
RecStatus::Unknown
@ Unknown
Definition: recordingstatus.h:32
playbacksock.h
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
PlaybackSock::eventsMode
PlaybackSockEventsMode eventsMode(void) const
Definition: playbacksock.cpp:64
PlaybackSock::m_sockLock
QMutex m_sockLock
Definition: playbacksock.h:128
PlaybackSock::GenPreviewPixmap
QStringList GenPreviewPixmap(const QString &token, const ProgramInfo *pginfo)
Definition: playbacksock.cpp:276
PlaybackSock::DeleteFile
int DeleteFile(const QString &filename, const QString &sgroup)
Definition: playbacksock.cpp:164
tmp
static guint32 * tmp
Definition: goom_core.cpp:26
MythSocket
Class for communcating between myth backends and frontends.
Definition: mythsocket.h:25
PlaybackSock::StopRecording
int StopRecording(const ProgramInfo *pginfo)
Definition: playbacksock.cpp:176
mythdate.h
ProgramInfo::SetPathname
void SetPathname(const QString &pn)
Definition: programinfo.cpp:2459
MythDate::fromSecsSinceEpoch
MBASE_PUBLIC QDateTime fromSecsSinceEpoch(int64_t seconds)
This function takes the number of seconds since the start of the epoch and returns a QDateTime with t...
Definition: mythdate.cpp:81
programinfo.h
PlaybackSock::SendReceiveStringList
bool SendReceiveStringList(QStringList &strlist, uint min_reply_length=0)
Definition: playbacksock.cpp:83
mythlogging.h
PlaybackSock::m_local
bool m_local
Definition: playbacksock.h:121
PlaybackSock::AddChildInput
bool AddChildInput(uint childid)
Tells a slave to add a child input.
Definition: playbacksock.cpp:546
compat.h
PlaybackSock::GetRecordingStatus
RecStatus::Type GetRecordingStatus(int capturecardnum)
Definition: playbacksock.cpp:471
PlaybackSock::CancelNextRecording
void CancelNextRecording(int capturecardnum, bool cancel)
Definition: playbacksock.cpp:523
PlaybackSock::GetFileHash
QString GetFileHash(const QString &filename, const QString &storageGroup)
Definition: playbacksock.cpp:252
PlaybackSock::CheckFile
bool CheckFile(ProgramInfo *pginfo)
Definition: playbacksock.cpp:332
PlaybackSock::wantsNonSystemEvents
bool wantsNonSystemEvents(void) const
Definition: playbacksock.cpp:47
PlaybackSockEventsMode
PlaybackSockEventsMode
Definition: playbacksock.h:20
kState_Error
@ kState_Error
Error State, if we ever try to enter this state errored is set.
Definition: tv.h:57
PlaybackSock::SetNextLiveTVDir
void SetNextLiveTVDir(int capturecardnum, const QString &dir)
Definition: playbacksock.cpp:514
MythSocket::SetReadyReadCallbackEnabled
void SetReadyReadCallbackEnabled(bool enabled)
Definition: mythsocket.h:48
PlaybackSock::GetEncoderState
int GetEncoderState(int capturecardnum)
Definition: playbacksock.cpp:390
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:57
PlaybackSock::SetSignalMonitoringRate
std::chrono::milliseconds SetSignalMonitoringRate(int capturecardnum, std::chrono::milliseconds rate, int notifyFrontend)
Definition: playbacksock.cpp:500
PlaybackSock::StartRecording
RecStatus::Type StartRecording(int capturecardnum, ProgramInfo *pginfo)
Definition: playbacksock.cpp:453
PlaybackSock::GoToSleep
bool GoToSleep(void)
Tells a slave to go to sleep.
Definition: playbacksock.cpp:133
referencecounter.h
PlaybackSock::wantsEvents
bool wantsEvents(void) const
Definition: playbacksock.cpp:42
kPBSEvents_NonSystem
@ kPBSEvents_NonSystem
Definition: playbacksock.h:23
PlaybackSock::GetSGFileQuery
QStringList GetSGFileQuery(const QString &host, const QString &groupname, const QString &filename)
Definition: playbacksock.cpp:239
PlaybackSock::GetRecording
ProgramInfo * GetRecording(uint cardid)
Returns the ProgramInfo being used by any current recording.
Definition: playbacksock.cpp:422
ProgramInfo
Holds information on recordings and videos.
Definition: programinfo.h:67
ProgramInfo::ToStringList
void ToStringList(QStringList &list) const
Serializes ProgramInfo into a QStringList which can be passed over a socket.
Definition: programinfo.cpp:1276
PlaybackSock::PlaybackSock
PlaybackSock(MythSocket *lsock, QString lhostname, PlaybackSockEventsMode eventsMode)
Definition: playbacksock.cpp:23
mythcorecontext.h
PlaybackSock::CheckRecordingActive
int CheckRecordingActive(const ProgramInfo *pginfo)
Definition: playbacksock.cpp:153
PlaybackSock::GetSGFileList
QStringList GetSGFileList(const QString &host, const QString &groupname, const QString &directory, bool fileNamesOnly)
Definition: playbacksock.cpp:225
MythSocket::IsDataAvailable
bool IsDataAvailable(void)
Definition: mythsocket.cpp:557
kPBSEvents_Normal
@ kPBSEvents_Normal
Definition: playbacksock.h:22
inputinfo.h
InputInfo
Definition: inputinfo.h:14
mainserver.h
MythCoreContext::GetHostName
QString GetHostName(void)
Definition: mythcorecontext.cpp:844
PlaybackSock::GetFindFile
QStringList GetFindFile(const QString &host, const QString &filename, const QString &storageGroup, bool useRegex)
Definition: playbacksock.cpp:262
PlaybackSock::DeleteRecording
int DeleteRecording(const ProgramInfo *pginfo, bool forceMetadataDelete=false)
Definition: playbacksock.cpp:187
kPBSEvents_None
@ kPBSEvents_None
Definition: playbacksock.h:21
PlaybackSock::ForwardRequest
QStringList ForwardRequest(const QStringList &slist)
Definition: playbacksock.cpp:534
PlaybackSock::ReadStringList
bool ReadStringList(QStringList &list)
Definition: playbacksock.cpp:69
ReferenceCounter::IncrRef
virtual int IncrRef(void)
Increments reference count.
Definition: referencecounter.cpp:100
build_compdb.filename
filename
Definition: build_compdb.py:21
PlaybackSock::IsBusy
bool IsBusy(int capturecardnum, InputInfo *busy_input=nullptr, std::chrono::seconds time_buffer=5s)
Definition: playbacksock.cpp:347
MythCoreContext::dispatch
void dispatch(const MythEvent &event)
Definition: mythcorecontext.cpp:1729
LOC
#define LOC
Definition: playbacksock.cpp:20
MythSocket::ReadStringList
bool ReadStringList(QStringList &list, std::chrono::milliseconds timeoutMS=kShortTimeout)
Definition: mythsocket.cpp:313
ReferenceCounter
General purpose reference counter.
Definition: referencecounter.h:26
PlaybackSock::GetMaxBitrate
long long GetMaxBitrate(int capturecardnum)
Definition: playbacksock.cpp:407
MythSocket::SendReceiveStringList
bool SendReceiveStringList(QStringList &list, uint min_reply_length=0, std::chrono::milliseconds timeoutMS=kLongTimeout)
Definition: mythsocket.cpp:326
PlaybackSock::PixmapLastModified
QDateTime PixmapLastModified(const ProgramInfo *pginfo)
Definition: playbacksock.cpp:317
uint
unsigned int uint
Definition: freesurround.h:24
ProgramInfo::SetRecordingStartTime
void SetRecordingStartTime(const QDateTime &dt)
Definition: programinfo.h:530
InputInfo::FromStringList
virtual bool FromStringList(QStringList::const_iterator &it, const QStringList::const_iterator &end)
Definition: inputinfo.cpp:14