Go to the documentation of this file.
19 #define LOC QString("PlaybackSock: ")
20 #define LOC_ERR QString("PlaybackSock, Error: ")
78 LOG(VB_GENERAL, LOG_DEBUG,
79 "PlaybackSock::ReadStringList(): Data vanished !!!");
86 QStringList &strlist,
uint min_reply_length)
97 while (ok && strlist[0] ==
"BACKEND_MESSAGE")
100 if (strlist.size() >= 2)
102 QString message = strlist[1];
118 LOG(VB_GENERAL, LOG_ERR,
119 "PlaybackSock::SendReceiveStringList(): No response.");
123 if (min_reply_length && ((
uint)strlist.size() < min_reply_length))
125 LOG(VB_GENERAL, LOG_ERR,
126 "PlaybackSock::SendReceiveStringList(): Response too short");
137 QStringList strlist(QString(
"GO_TO_SLEEP"));
147 QStringList strlist(QString(
"QUERY_FREE_SPACE"));
151 o_strlist += strlist;
157 QStringList strlist(QString(
"CHECK_RECORDING"));
161 return strlist[0].toInt();
168 QStringList strlist(
"DELETE_FILE");
173 return strlist[0].toInt();
180 QStringList strlist(QString(
"STOP_RECORDING"));
184 return strlist[0].toInt();
190 bool forceMetadataDelete)
194 if (forceMetadataDelete)
195 strlist = QStringList( QString(
"FORCE_DELETE_RECORDING"));
197 strlist = QStringList( QString(
"DELETE_RECORDING"));
202 return strlist[0].toInt();
208 const QString &playbackhost)
210 QStringList strlist(QString(
"FILL_PROGRAM_INFO"));
211 strlist << playbackhost;
217 if (
tmp.HasPathname() ||
tmp.GetChanID())
228 const QString &directory,
bool fileNamesOnly)
230 QStringList strlist(QString(
"QUERY_SG_GETFILELIST"));
232 strlist << groupname;
233 strlist << directory;
234 strlist << QString::number(static_cast<int>(fileNamesOnly));
244 QStringList strlist(QString(
"QUERY_SG_FILEQUERY"));
246 strlist << groupname;
256 QStringList strlist(QString(
"QUERY_FILE_HASH"));
265 const QString &storageGroup,
bool useRegex)
267 QStringList strlist(QString(
"QUERY_FINDFILE"));
271 << (useRegex ?
"1" :
"0")
281 QStringList strlist(QString(
"QUERY_GENPIXMAP2"));
292 std::chrono::seconds time,
294 const QString &outputFile,
295 const QSize outputSize)
297 QStringList strlist(QString(
"QUERY_GENPIXMAP2"));
300 if (time != std::chrono::seconds::max())
302 strlist.push_back(
"s");
303 strlist.push_back(QString::number(time.count()));
307 strlist.push_back(
"f");
308 strlist.push_back(QString::number(frame));
310 strlist.push_back((outputFile.isEmpty()) ?
"<EMPTY>" : outputFile);
311 strlist.push_back(QString::number(outputSize.width()));
312 strlist.push_back(QString::number(outputSize.height()));
321 QStringList strlist(QString(
"QUERY_PIXMAP_LASTMODIFIED"));
326 if (!strlist.empty() && !strlist[0].isEmpty() && (strlist[0] !=
"BAD"))
336 QStringList strlist(
"QUERY_CHECKFILE");
337 strlist << QString::number(0);
343 return strlist[0].toInt() != 0;
350 std::chrono::seconds time_buffer)
352 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
354 strlist <<
"IS_BUSY";
355 strlist << QString::number(time_buffer.count());
359 LOG(VB_GENERAL, LOG_ERR,
LOC +
"IsBusy: " +
360 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
361 " gave us no response.");
366 if (!strlist.isEmpty())
368 QStringList::const_iterator it = strlist.cbegin();
369 state = ((*it).toInt() != 0);
376 LOG(VB_GENERAL, LOG_ERR,
LOC +
"IsBusy: "
377 "Failed to parse response to " +
378 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
394 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
395 strlist <<
"GET_STATE";
399 LOG(VB_GENERAL, LOG_ERR,
LOC +
"GetEncoderState: " +
400 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
401 " gave us no response.");
406 return strlist[0].toInt();
411 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
412 strlist <<
"GET_MAX_BITRATE";
415 return strlist[0].toLongLong();
426 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(cardid));
427 strlist <<
"GET_CURRENT_RECORDING";
433 if (!pginfo->HasPathname() && !pginfo->GetChanID())
445 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
446 strlist <<
"MATCHES_RECORDING";
450 return (
bool) strlist[0].toInt();
458 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
459 strlist <<
"START_RECORDING";
475 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
476 strlist <<
"GET_RECORDING_STATUS";
480 LOG(VB_GENERAL, LOG_ERR,
LOC +
"GetRecordingStatus: " +
481 QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum) +
482 " did not respond.");
491 std::chrono::seconds secsleft,
bool hasLater)
493 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
494 strlist <<
"RECORD_PENDING";
495 strlist << QString::number(secsleft.count());
496 strlist << QString::number(static_cast<int>(hasLater));
503 std::chrono::milliseconds rate,
int notifyFrontend)
505 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1").arg(capturecardnum));
506 strlist <<
"SET_SIGNAL_MONITORING_RATE";
507 strlist << QString::number(rate.count());
508 strlist << QString::number(notifyFrontend);
511 return std::chrono::milliseconds(strlist[0].toInt());
518 QStringList strlist(QString(
"SET_NEXT_LIVETV_DIR %1 %2")
527 QStringList strlist(QString(
"QUERY_REMOTEENCODER %1")
528 .arg(capturecardnum));
530 strlist <<
"CANCEL_NEXT_RECORDING";
531 strlist << QString::number(static_cast<int>(cancel));
538 QStringList strlist = slist;
550 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
PlaybackSock(MainServer *parent, MythSocket *lsock, QString lhostname, PlaybackSockEventsMode eventsMode)
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
@ kState_Error
Error State, if we ever try to enter this state errored is set.
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
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.
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)