Go to the documentation of this file.
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"));
149 o_strlist += strlist;
155 QStringList strlist(QString(
"CHECK_RECORDING"));
159 return strlist[0].toInt();
166 QStringList strlist(
"DELETE_FILE");
171 return strlist[0].toInt();
178 QStringList strlist(QString(
"STOP_RECORDING"));
182 return strlist[0].toInt();
188 bool forceMetadataDelete)
192 if (forceMetadataDelete)
193 strlist = QStringList( QString(
"FORCE_DELETE_RECORDING"));
195 strlist = QStringList( QString(
"DELETE_RECORDING"));
200 return strlist[0].toInt();
206 const QString &playbackhost)
208 QStringList strlist(QString(
"FILL_PROGRAM_INFO"));
209 strlist << playbackhost;
215 if (
tmp.HasPathname() ||
tmp.GetChanID())
226 const QString &directory,
bool fileNamesOnly)
228 QStringList strlist(QString(
"QUERY_SG_GETFILELIST"));
230 strlist << groupname;
231 strlist << directory;
232 strlist << QString::number(static_cast<int>(fileNamesOnly));
242 QStringList strlist(QString(
"QUERY_SG_FILEQUERY"));
244 strlist << groupname;
254 QStringList strlist(QString(
"QUERY_FILE_HASH"));
263 const QString &storageGroup,
bool useRegex)
265 QStringList strlist(QString(
"QUERY_FINDFILE"));
269 << (useRegex ?
"1" :
"0")
279 QStringList strlist(QString(
"QUERY_GENPIXMAP2"));
290 std::chrono::seconds time,
292 const QString &outputFile,
293 const QSize outputSize)
295 QStringList strlist(QString(
"QUERY_GENPIXMAP2"));
298 if (time != std::chrono::seconds::max())
300 strlist.push_back(
"s");
301 strlist.push_back(QString::number(time.count()));
305 strlist.push_back(
"f");
306 strlist.push_back(QString::number(frame));
308 strlist.push_back((outputFile.isEmpty()) ?
"<EMPTY>" : outputFile);
309 strlist.push_back(QString::number(outputSize.width()));
310 strlist.push_back(QString::number(outputSize.height()));
319 QStringList strlist(QString(
"QUERY_PIXMAP_LASTMODIFIED"));
324 if (!strlist.empty() && !strlist[0].isEmpty() && (strlist[0] !=
"BAD"))
334 QStringList strlist(
"QUERY_CHECKFILE");
335 strlist << QString::number(0);
341 return strlist[0].toInt() != 0;
348 std::chrono::seconds time_buffer)
350 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
352 strlist <<
"IS_BUSY";
353 strlist << QString::number(time_buffer.count());
357 LOG(VB_GENERAL, LOG_ERR,
LOC +
"IsBusy: " +
358 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
359 " gave us no response.");
364 if (!strlist.isEmpty())
366 QStringList::const_iterator it = strlist.cbegin();
367 state = ((*it).toInt() != 0);
374 LOG(VB_GENERAL, LOG_ERR,
LOC +
"IsBusy: "
375 "Failed to parse response to " +
376 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
392 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
393 strlist <<
"GET_STATE";
397 LOG(VB_GENERAL, LOG_ERR,
LOC +
"GetEncoderState: " +
398 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
399 " gave us no response.");
404 return strlist[0].toInt();
409 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
410 strlist <<
"GET_MAX_BITRATE";
413 return strlist[0].toLongLong();
424 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(cardid));
425 strlist <<
"GET_CURRENT_RECORDING";
431 if (!pginfo->HasPathname() && !pginfo->GetChanID())
443 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
444 strlist <<
"MATCHES_RECORDING";
448 return (
bool) strlist[0].toInt();
456 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
457 strlist <<
"START_RECORDING";
473 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
474 strlist <<
"GET_RECORDING_STATUS";
478 LOG(VB_GENERAL, LOG_ERR,
LOC +
"GetRecordingStatus: " +
479 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
480 " did not respond.");
489 std::chrono::seconds secsleft,
bool hasLater)
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));
501 std::chrono::milliseconds rate,
int notifyFrontend)
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);
509 return std::chrono::milliseconds(strlist[0].toInt());
516 QStringList strlist(QString(
"SET_NEXT_LIVETV_DIR %1 %2")
525 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1")
526 .arg(capturecardnum));
528 strlist <<
"CANCEL_NEXT_RECORDING";
529 strlist << QString::number(static_cast<int>(cancel));
536 QStringList strlist = slist;
548 QStringList strlist(QString(
"ADD_CHILD_INPUT %1").arg(childid));
This decrements the reference on destruction.
void GetDiskSpace(QStringList &o_strlist)
Appends host's dir's total and used space in kilobytes.
bool wantsOnlySystemEvents(void) const
void RecordPending(int capturecardnum, const ProgramInfo *pginfo, std::chrono::seconds secsleft, bool hasLater)
virtual int DecrRef(void)
Decrements reference count and deletes on 0.
bool EncoderIsRecording(int capturecardnum, const ProgramInfo *pginfo)
bool wantsSystemEvents(void) const
PlaybackSockEventsMode m_eventsMode
virtual void SetRecordingID(uint _recordedid)
virtual void clone(const ProgramInfo &other, bool ignore_non_serialized_data=false)
Copies important fields from other ProgramInfo.
This class is used as a container for messages.
bool FillProgramInfo(ProgramInfo &pginfo, const QString &playbackhost)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
PlaybackSockEventsMode eventsMode(void) const
QStringList GenPreviewPixmap(const QString &token, const ProgramInfo *pginfo)
int DeleteFile(const QString &filename, const QString &sgroup)
Class for communcating between myth backends and frontends.
int StopRecording(const ProgramInfo *pginfo)
void SetPathname(const QString &pn)
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...
bool SendReceiveStringList(QStringList &strlist, uint min_reply_length=0)
bool AddChildInput(uint childid)
Tells a slave to add a child input.
RecStatus::Type GetRecordingStatus(int capturecardnum)
void CancelNextRecording(int capturecardnum, bool cancel)
QString GetFileHash(const QString &filename, const QString &storageGroup)
bool CheckFile(ProgramInfo *pginfo)
bool wantsNonSystemEvents(void) const
@ kState_Error
Error State, if we ever try to enter this state errored is set.
void SetNextLiveTVDir(int capturecardnum, const QString &dir)
void SetReadyReadCallbackEnabled(bool enabled)
int GetEncoderState(int capturecardnum)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
std::chrono::milliseconds SetSignalMonitoringRate(int capturecardnum, std::chrono::milliseconds rate, int notifyFrontend)
RecStatus::Type StartRecording(int capturecardnum, ProgramInfo *pginfo)
bool GoToSleep(void)
Tells a slave to go to sleep.
bool wantsEvents(void) const
QStringList GetSGFileQuery(const QString &host, const QString &groupname, const QString &filename)
ProgramInfo * GetRecording(uint cardid)
Returns the ProgramInfo being used by any current recording.
Holds information on recordings and videos.
void ToStringList(QStringList &list) const
Serializes ProgramInfo into a QStringList which can be passed over a socket.
PlaybackSock(MythSocket *lsock, QString lhostname, PlaybackSockEventsMode eventsMode)
int CheckRecordingActive(const ProgramInfo *pginfo)
QStringList GetSGFileList(const QString &host, const QString &groupname, const QString &directory, bool fileNamesOnly)
bool IsDataAvailable(void)
QString GetHostName(void)
QStringList GetFindFile(const QString &host, const QString &filename, const QString &storageGroup, bool useRegex)
int DeleteRecording(const ProgramInfo *pginfo, bool forceMetadataDelete=false)
QStringList ForwardRequest(const QStringList &slist)
bool ReadStringList(QStringList &list)
virtual int IncrRef(void)
Increments reference count.
bool IsBusy(int capturecardnum, InputInfo *busy_input=nullptr, std::chrono::seconds time_buffer=5s)
void dispatch(const MythEvent &event)
bool ReadStringList(QStringList &list, std::chrono::milliseconds timeoutMS=kShortTimeout)
General purpose reference counter.
long long GetMaxBitrate(int capturecardnum)
bool SendReceiveStringList(QStringList &list, uint min_reply_length=0, std::chrono::milliseconds timeoutMS=kLongTimeout)
QDateTime PixmapLastModified(const ProgramInfo *pginfo)
void SetRecordingStartTime(const QDateTime &dt)