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