20#define LOC QString("PlaybackSock: ")
21#define LOC_ERR QString("PlaybackSock, Error: ")
28 m_hostname(
std::move(lhostname)),
30 m_eventsMode(eventsMode)
76 LOG(VB_GENERAL, LOG_DEBUG,
77 "PlaybackSock::ReadStringList(): Data vanished !!!");
84 QStringList &strlist,
uint min_reply_length)
95 while (ok && strlist[0] ==
"BACKEND_MESSAGE")
98 if (strlist.size() >= 2)
100 QString message = strlist[1];
116 LOG(VB_GENERAL, LOG_ERR,
117 "PlaybackSock::SendReceiveStringList(): No response.");
121 if (min_reply_length && ((
uint)strlist.size() < min_reply_length))
123 LOG(VB_GENERAL, LOG_ERR,
124 "PlaybackSock::SendReceiveStringList(): Response too short");
135 QStringList strlist(QString(
"GO_TO_SLEEP"));
145 QStringList strlist(QString(
"QUERY_FREE_SPACE"));
156 QStringList strlist(QString(
"CHECK_RECORDING"));
160 return strlist[0].toInt();
167 QStringList strlist(
"DELETE_FILE");
172 return strlist[0].toInt();
179 QStringList strlist(QString(
"STOP_RECORDING"));
183 return strlist[0].toInt();
189 bool forceMetadataDelete)
193 if (forceMetadataDelete)
194 strlist = QStringList( QString(
"FORCE_DELETE_RECORDING"));
196 strlist = QStringList( QString(
"DELETE_RECORDING"));
201 return strlist[0].toInt();
207 const QString &playbackhost)
209 QStringList strlist(QString(
"FILL_PROGRAM_INFO"));
210 strlist << playbackhost;
216 if (
tmp.HasPathname() ||
tmp.GetChanID())
227 const QString &directory,
bool fileNamesOnly)
229 QStringList strlist(QString(
"QUERY_SG_GETFILELIST"));
231 strlist << groupname;
232 strlist << directory;
233 strlist << QString::number(static_cast<int>(fileNamesOnly));
243 QStringList strlist(QString(
"QUERY_SG_FILEQUERY"));
245 strlist << groupname;
255 QStringList strlist(QString(
"QUERY_FILE_HASH"));
264 const QString &storageGroup,
bool useRegex)
266 QStringList strlist(QString(
"QUERY_FINDFILE"));
270 << (useRegex ?
"1" :
"0")
280 QStringList strlist(QString(
"QUERY_GENPIXMAP2"));
291 std::chrono::seconds time,
293 const QString &outputFile,
294 const QSize outputSize)
296 QStringList strlist(QString(
"QUERY_GENPIXMAP2"));
299 if (time != std::chrono::seconds::max())
301 strlist.push_back(
"s");
302 strlist.push_back(QString::number(time.count()));
306 strlist.push_back(
"f");
307 strlist.push_back(QString::number(frame));
309 strlist.push_back((outputFile.isEmpty()) ?
"<EMPTY>" : outputFile);
310 strlist.push_back(QString::number(outputSize.width()));
311 strlist.push_back(QString::number(outputSize.height()));
320 QStringList strlist(QString(
"QUERY_PIXMAP_LASTMODIFIED"));
325 if (!strlist.empty() && !strlist[0].isEmpty() && (strlist[0] !=
"BAD"))
335 QStringList strlist(
"QUERY_CHECKFILE");
336 strlist << QString::number(0);
342 return strlist[0].toInt() != 0;
349 std::chrono::seconds time_buffer)
351 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
353 strlist <<
"IS_BUSY";
354 strlist << QString::number(time_buffer.count());
358 LOG(VB_GENERAL, LOG_ERR,
LOC +
"IsBusy: " +
359 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
360 " gave us no response.");
365 if (!strlist.isEmpty())
367 QStringList::const_iterator it = strlist.cbegin();
368 state = ((*it).toInt() != 0);
375 LOG(VB_GENERAL, LOG_ERR,
LOC +
"IsBusy: "
376 "Failed to parse response to " +
377 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
393 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
394 strlist <<
"GET_STATE";
398 LOG(VB_GENERAL, LOG_ERR,
LOC +
"GetEncoderState: " +
399 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
400 " gave us no response.");
405 return strlist[0].toInt();
410 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
411 strlist <<
"GET_MAX_BITRATE";
414 return strlist[0].toLongLong();
425 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(cardid));
426 strlist <<
"GET_CURRENT_RECORDING";
432 if (!pginfo->HasPathname() && !pginfo->GetChanID())
444 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
445 strlist <<
"MATCHES_RECORDING";
449 return (
bool) strlist[0].toInt();
457 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
458 strlist <<
"START_RECORDING";
474 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
475 strlist <<
"GET_RECORDING_STATUS";
479 LOG(VB_GENERAL, LOG_ERR,
LOC +
"GetRecordingStatus: " +
480 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
481 " did not respond.");
490 std::chrono::seconds secsleft,
bool hasLater)
492 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
493 strlist <<
"RECORD_PENDING";
494 strlist << QString::number(secsleft.count());
495 strlist << QString::number(static_cast<int>(hasLater));
502 std::chrono::milliseconds rate,
int notifyFrontend)
504 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
505 strlist <<
"SET_SIGNAL_MONITORING_RATE";
506 strlist << QString::number(rate.count());
507 strlist << QString::number(notifyFrontend);
510 return std::chrono::milliseconds(strlist[0].toInt());
517 QStringList strlist(QString(
"SET_NEXT_LIVETV_DIR %1 %2")
526 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1")
527 .arg(capturecardnum));
529 strlist <<
"CANCEL_NEXT_RECORDING";
530 strlist << QString::number(static_cast<int>(cancel));
537 QStringList strlist = slist;
549 QStringList strlist(QString(
"ADD_CHILD_INPUT %1").arg(childid));
static constexpr int kLines
number of strings in the serialized stringlist
QString GetHostName(void)
void dispatch(const MythEvent &event)
This class is used as a container for messages.
Class for communcating between myth backends and frontends.
bool SendReceiveStringList(QStringList &list, uint min_reply_length=0, std::chrono::milliseconds timeoutMS=kLongTimeout)
bool ReadStringList(QStringList &list, std::chrono::milliseconds timeoutMS=kShortTimeout)
bool IsDataAvailable(void)
void SetReadyReadCallbackEnabled(bool enabled)
QDateTime PixmapLastModified(const ProgramInfo *pginfo)
int DeleteRecording(const ProgramInfo *pginfo, bool forceMetadataDelete=false)
bool IsBusy(int capturecardnum, InputInfo *busy_input=nullptr, std::chrono::seconds time_buffer=5s)
void CancelNextRecording(int capturecardnum, bool cancel)
RecStatus::Type GetRecordingStatus(int capturecardnum)
bool FillProgramInfo(ProgramInfo &pginfo, const QString &playbackhost)
bool GoToSleep(void)
Tells a slave to go to sleep.
long long GetMaxBitrate(int capturecardnum)
QStringList GenPreviewPixmap(const QString &token, const ProgramInfo *pginfo)
bool wantsNonSystemEvents(void) const
bool wantsEvents(void) const
FileSystemInfoList GetDiskSpace()
Gets the total and used space in kilobytes for the host's directories.
int DeleteFile(const QString &filename, const QString &sgroup)
bool wantsOnlySystemEvents(void) const
QString GetFileHash(const QString &filename, const QString &storageGroup)
bool CheckFile(ProgramInfo *pginfo)
QStringList GetSGFileQuery(const QString &host, const QString &groupname, const QString &filename)
PlaybackSockEventsMode m_eventsMode
QStringList GetFindFile(const QString &host, const QString &filename, const QString &storageGroup, bool useRegex)
bool SendReceiveStringList(QStringList &strlist, uint min_reply_length=0)
ProgramInfo * GetRecording(uint cardid)
Returns the ProgramInfo being used by any current recording.
PlaybackSockEventsMode eventsMode(void) const
int CheckRecordingActive(const ProgramInfo *pginfo)
std::chrono::milliseconds SetSignalMonitoringRate(int capturecardnum, std::chrono::milliseconds rate, int notifyFrontend)
QStringList GetSGFileList(const QString &host, const QString &groupname, const QString &directory, bool fileNamesOnly)
bool EncoderIsRecording(int capturecardnum, const ProgramInfo *pginfo)
void RecordPending(int capturecardnum, const ProgramInfo *pginfo, std::chrono::seconds secsleft, bool hasLater)
int GetEncoderState(int capturecardnum)
Returns the maximum bits per second the recorder can produce.
bool ReadStringList(QStringList &list)
RecStatus::Type StartRecording(int capturecardnum, ProgramInfo *pginfo)
QStringList ForwardRequest(const QStringList &slist)
bool wantsSystemEvents(void) const
PlaybackSock(MythSocket *lsock, QString lhostname, PlaybackSockEventsMode eventsMode)
void SetNextLiveTVDir(int capturecardnum, const QString &dir)
bool AddChildInput(uint childid)
Tells a slave to add a child input.
int StopRecording(const ProgramInfo *pginfo)
Holds information on recordings and videos.
void SetRecordingStartTime(const QDateTime &dt)
void ToStringList(QStringList &list) const
Serializes ProgramInfo into a QStringList which can be passed over a socket.
virtual void clone(const ProgramInfo &other, bool ignore_non_serialized_data=false)
Copies important fields from other ProgramInfo.
virtual void SetRecordingID(uint _recordedid)
void SetPathname(const QString &pn)
General purpose reference counter.
virtual int DecrRef(void)
Decrements reference count and deletes on 0.
virtual int IncrRef(void)
Increments reference count.
This decrements the reference on destruction.
QVector< FileSystemInfo > FileSystemInfoList
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
MBASE_PUBLIC FileSystemInfoList FromStringList(const QStringList &list)
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...
@ kState_Error
Error State, if we ever try to enter this state errored is set.