2#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
3#include <QtSystemDetection>
9#if defined(Q_OS_BSD4) || defined(Q_OS_WINDOWS)
12#include <sys/sysmacros.h>
18#include <QFileInfoList>
56 if ((pProgram ==
nullptr) || (pInfo ==
nullptr))
61 pProgram->setTitle ( pInfo->
GetTitle() );
65 pProgram->setRepeat ( pInfo->
IsRepeat() );
77 pProgram->setStars ( pInfo->
GetStars() );
94 pProgram->setSeason ( pInfo->
GetSeason() );
102 pProgram->enableCast(
false);
117 pProgram->enableChannel(
false);
138 pRecording->setFileName ( pRecInfo.
GetPathname() );
139 pRecording->setFileSize ( pRecInfo.
GetFilesize() );
140 pRecording->setHostName ( pRecInfo.
GetHostname() );
150 pRecording->setEncoderId ( pRecInfo.
GetInputID() );
157 pProgram->enableRecording(
false);
160 if ( bIncArtwork && !pInfo->
GetInetRef().isEmpty() )
163 pProgram->enableArtwork(
false);
175 if (channel.
Load(nChanID))
194 pChannel->setChanId(channelInfo.
m_chanId);
195 pChannel->setChanNum(channelInfo.
m_chanNum);
196 pChannel->setCallSign(channelInfo.
m_callSign);
197 if (!channelInfo.
m_icon.isEmpty())
199 QString sIconURL = QString(
"/Guide/GetChannelIcon?FileName=%1")
200 .arg( channelInfo.
m_icon );
201 pChannel->setIconURL( sIconURL );
202 pChannel->setIcon( channelInfo.
m_icon );
204 pChannel->setChannelName(channelInfo.
m_name);
210 pChannel->setMplexId(channelInfo.
m_mplexId);
215 pChannel->setFineTune(channelInfo.
m_fineTune);
216 pChannel->setFrequencyId(channelInfo.
m_freqId);
218 pChannel->setSourceId(channelInfo.
m_sourceId);
221 pChannel->setXMLTVID(channelInfo.
m_xmltvId);
225 pChannel->setTimeOffset(channelInfo.
m_tmOffset);
230 for (
int x = 0; x < groupIds.size(); x++)
235 sGroupIds += QString::number(groupIds.at(x));
237 pChannel->setChannelGroups(sGroupIds);
241 for (
int x = 0; x < inputIds.size(); x++)
246 sInputIds += QString::number(inputIds.at(x));
248 pChannel->setInputs(sInputIds);
259 pGroup->setGroupId(pGroupItem.
m_grpId);
260 pGroup->setName(pGroupItem.
m_name);
261 pGroup->setPassword(
"");
271 if ((pRecRule ==
nullptr) || (pRule ==
nullptr))
277 pRecRule->setTitle ( pRule->
m_title );
280 pRecRule->setSeason ( pRule->
m_season );
281 pRecRule->setEpisode ( pRule->
m_episode );
283#if QT_VERSION < QT_VERSION_CHECK(6,5,0)
284 pRecRule->setStartTime ( QDateTime(pRule->
m_startdate,
286 pRecRule->setEndTime ( QDateTime(pRule->
m_enddate,
289 static const QTimeZone utc(QTimeZone::UTC);
290 pRecRule->setStartTime ( QDateTime(pRule->
m_startdate,
292 pRecRule->setEndTime ( QDateTime(pRule->
m_enddate,
297 pRecRule->setInetref ( pRule->
m_inetref );
299 pRecRule->setCallSign ( pRule->
m_station );
300 pRecRule->setFindDay ( pRule->
m_findday );
305 pRecRule->setPreferredInput ( pRule->
m_prefInput );
311 pRecRule->setFilter ( pRule->
m_filter );
335 const QString &sInetref,
339 for (
auto i = map.cbegin(); i != map.cend(); ++i)
342 pArtInfo->setFileName(i.value().url);
346 pArtInfo->setStorageGroup(
"Fanart");
347 pArtInfo->setType(
"fanart");
348 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
351 QString(QUrl::toPercentEncoding(
352 QUrl(i.value().url).path()))));
355 pArtInfo->setStorageGroup(
"Banners");
356 pArtInfo->setType(
"banner");
357 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
360 QString(QUrl::toPercentEncoding(
361 QUrl(i.value().url).path()))));
365 pArtInfo->setStorageGroup(
"Coverart");
366 pArtInfo->setType(
"coverart");
367 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
370 QString(QUrl::toPercentEncoding(
371 QUrl(i.value().url).path()))));
383 query.
prepare(
"SELECT genre from videogenre "
384 "LEFT JOIN videometadatagenre ON videometadatagenre.idgenre = videogenre.intid "
385 "WHERE idvideo = :ID "
389 if (query.
exec() && query.
size() > 0)
394 QString genre = query.
value(0).toString();
395 pGenre->setName(genre);
406 pVideoMetadataInfo->setId(pMetadata->GetID());
407 pVideoMetadataInfo->setTitle(pMetadata->GetTitle());
408 pVideoMetadataInfo->setSubTitle(pMetadata->GetSubtitle());
409 pVideoMetadataInfo->setTagline(pMetadata->GetTagline());
410 pVideoMetadataInfo->setDirector(pMetadata->GetDirector());
411 pVideoMetadataInfo->setStudio(pMetadata->GetStudio());
412 pVideoMetadataInfo->setDescription(pMetadata->GetPlot());
413 pVideoMetadataInfo->setCertification(pMetadata->GetRating());
414 pVideoMetadataInfo->setInetref(pMetadata->GetInetRef());
415 pVideoMetadataInfo->setCollectionref(pMetadata->GetCollectionRef());
416 pVideoMetadataInfo->setHomePage(pMetadata->GetHomepage());
417#if QT_VERSION < QT_VERSION_CHECK(6,5,0)
418 pVideoMetadataInfo->setReleaseDate(
419 QDateTime(pMetadata->GetReleaseDate(),
420 QTime(0,0),Qt::LocalTime).toUTC());
421 pVideoMetadataInfo->setAddDate(
422 QDateTime(pMetadata->GetInsertdate(),
423 QTime(0,0),Qt::LocalTime).toUTC());
425 static const QTimeZone localtime(QTimeZone::LocalTime);
426 pVideoMetadataInfo->setReleaseDate(
427 QDateTime(pMetadata->GetReleaseDate(),
428 QTime(0,0),localtime).toUTC());
429 pVideoMetadataInfo->setAddDate(
430 QDateTime(pMetadata->GetInsertdate(),
431 QTime(0,0),localtime).toUTC());
433 pVideoMetadataInfo->setUserRating(pMetadata->GetUserRating());
434 pVideoMetadataInfo->setChildID(pMetadata->GetChildID());
435 pVideoMetadataInfo->setLength(pMetadata->GetLength().count());
436 pVideoMetadataInfo->setPlayCount(pMetadata->GetPlayCount());
437 pVideoMetadataInfo->setSeason(pMetadata->GetSeason());
438 pVideoMetadataInfo->setEpisode(pMetadata->GetEpisode());
439 pVideoMetadataInfo->setParentalLevel(pMetadata->GetShowLevel());
440 pVideoMetadataInfo->setVisible(pMetadata->GetBrowse());
441 pVideoMetadataInfo->setWatched(pMetadata->GetWatched());
442 pVideoMetadataInfo->setProcessed(pMetadata->GetProcessed());
444 pMetadata->GetContentType()));
445 pVideoMetadataInfo->setFileName(pMetadata->GetFilename());
446 pVideoMetadataInfo->setHash(pMetadata->GetHash());
447 pVideoMetadataInfo->setHostName(pMetadata->GetHost());
448 pVideoMetadataInfo->setCoverart(pMetadata->GetCoverFile());
449 pVideoMetadataInfo->setFanart(pMetadata->GetFanart());
450 pVideoMetadataInfo->setBanner(pMetadata->GetBanner());
451 pVideoMetadataInfo->setScreenshot(pMetadata->GetScreenshot());
452 pVideoMetadataInfo->setTrailer(pMetadata->GetTrailer());
453 pVideoMetadataInfo->setCategory(pMetadata->GetCategoryID());
457 if (!pMetadata->GetFanart().isEmpty())
460 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
461 pArtInfo->setStorageGroup(
"Fanart");
462 pArtInfo->setType(
"fanart");
463 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
467 QUrl::toPercentEncoding(pMetadata->GetFanart()))));
469 if (!pMetadata->GetCoverFile().isEmpty())
472 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
473 pArtInfo->setStorageGroup(
"Coverart");
474 pArtInfo->setType(
"coverart");
475 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
479 QUrl::toPercentEncoding(pMetadata->GetCoverFile()))));
481 if (!pMetadata->GetBanner().isEmpty())
484 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
485 pArtInfo->setStorageGroup(
"Banners");
486 pArtInfo->setType(
"banner");
487 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
491 QUrl::toPercentEncoding(pMetadata->GetBanner()))));
493 if (!pMetadata->GetScreenshot().isEmpty())
496 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
497 pArtInfo->setStorageGroup(
"Screenshots");
498 pArtInfo->setType(
"screenshot");
499 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
503 QUrl::toPercentEncoding(pMetadata->GetScreenshot()))));
509 auto castList = pMetadata->GetCast();
512 QString actors = QObject::tr(
"Actors");
516 pCastMember->setTranslatedRole(actors);
517 pCastMember->setRole(
"ACTOR");
518 pCastMember->setName(ent.second);
530 pVideoMetadataInfo->setId(pMetadata->
ID());
531 pVideoMetadataInfo->setArtist(pMetadata->
Artist());
533 pVideoMetadataInfo->setAlbum(pMetadata->
Album());
534 pVideoMetadataInfo->setTitle(pMetadata->
Title());
535 pVideoMetadataInfo->setTrackNo(pMetadata->
Track());
536 pVideoMetadataInfo->setGenre(pMetadata->
Genre());
537 pVideoMetadataInfo->setYear(pMetadata->
Year());
538 pVideoMetadataInfo->setPlayCount(pMetadata->
PlayCount());
539 pVideoMetadataInfo->setLength(pMetadata->
Length().count());
540 pVideoMetadataInfo->setRating(pMetadata->
Rating());
541 pVideoMetadataInfo->setFileName(pMetadata->
Filename());
542 pVideoMetadataInfo->setHostName(pMetadata->
Hostname());
543 pVideoMetadataInfo->setLastPlayed(pMetadata->
LastPlay());
544 pVideoMetadataInfo->setCompilation(pMetadata->
Compilation());
555 input->setInputName(inputInfo.
m_name);
570 if (!pCastMemberList || !pInfo)
577 table =
"recordedcredits";
581 query.
prepare(QString(
"SELECT role, people.name, roles.name FROM %1"
583 " LEFT JOIN people ON"
584 " credits.person = people.person"
585 " LEFT JOIN roles ON"
586 " credits.roleid = roles.roleid"
587 " WHERE credits.chanid = :CHANID"
588 " AND credits.starttime = :STARTTIME"
589 " ORDER BY role, priority;").arg(table));
594 if (query.
exec() && query.
size() > 0)
596 QMap<QString, QString> translations;
597 translations[
"ACTOR"] = QObject::tr(
"Actors");
598 translations[
"DIRECTOR"] = QObject::tr(
"Director");
599 translations[
"PRODUCER"] = QObject::tr(
"Producer");
600 translations[
"EXECUTIVE_PRODUCER"] = QObject::tr(
"Executive Producer");
601 translations[
"WRITER"] = QObject::tr(
"Writer");
602 translations[
"GUEST_STAR"] = QObject::tr(
"Guest Star");
603 translations[
"HOST"] = QObject::tr(
"Host");
604 translations[
"ADAPTER"] = QObject::tr(
"Adapter");
605 translations[
"PRESENTER"] = QObject::tr(
"Presenter");
606 translations[
"COMMENTATOR"] = QObject::tr(
"Commentator");
607 translations[
"GUEST"] = QObject::tr(
"Guest");
613 QString role = query.
value(0).toString();
614 pCastMember->setTranslatedRole(translations.value(role.toUpper()));
615 pCastMember->setRole(role);
631 pCastMember->setName(QString::fromUtf8(query.
value(1)
632 .toByteArray().constData()));
633 pCastMember->setCharacterName(QString::fromUtf8(query.
value(2)
634 .toByteArray().constData()));
644 frm_dir_map_t::const_iterator it;
651 it = markMap.cbegin();
652 if (it != markMap.cend())
655 pCutting->setMark(*it);
656 pCutting->setOffset(it.key());
662 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
668 pCutting->setMark(*it);
669 pCutting->setOffset(it.key());
671 else if (marktype == 1)
677 pCutting->setMark(*it);
678 pCutting->setOffset(offset);
681 else if (marktype == 2)
687 pCutting->setMark(*it);
688 pCutting->setOffset(offset);
698 frm_dir_map_t::const_iterator it;
705 it = markMap.cbegin();
706 if (it != markMap.cend())
709 pCutting->setMark(*it);
710 pCutting->setOffset(it.key());
716 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
722 pCutting->setMark(*it);
723 pCutting->setOffset(it.key());
725 else if (marktype == 1)
731 pCutting->setMark(*it);
732 pCutting->setOffset(offset);
735 else if (marktype == 2)
741 pCutting->setMark(*it);
742 pCutting->setOffset(offset);
756 frm_pos_map_t::const_iterator it;
762 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
765 pCutting->setMark(it.key());
766 pCutting->setOffset(it.value());
775 for (
auto * elink : std::as_const(
gTVList))
777 if (elink !=
nullptr)
780 auto *pEncoder =
new V2Encoder( parent );
781 list.append( QVariant::fromValue<QObject *>( pEncoder ));
783 pEncoder->setId ( elink->GetInputID() );
784 pEncoder->setState ( elink->GetState() );
785 pEncoder->setLocal ( elink->IsLocal() );
786 pEncoder->setConnected ( elink->IsConnected() );
787 pEncoder->setSleepStatus ( elink->GetSleepStatus() );
789 if (pEncoder->GetLocal())
792 pEncoder->setHostName( elink->GetHostName() );
794 for (
const auto & inputInfo : std::as_const(inputInfoList))
796 if (inputInfo.m_inputId ==
static_cast<uint>(elink->GetInputID()))
798 V2Input *input = pEncoder->AddNewInput();
803 bool progFound =
false;
805 switch ( pEncoder->GetState() )
827 pProgram->setProperty(
"isNull",QVariant(
true));
841 const QString &RecGroup )
861 for (
auto it = tmpList.begin(); it < tmpList.end(); ++it)
863 if ((nRecStatus == -999
864 && (*it)->GetRecordingStatus() >= 0)
865 || (nRecStatus != 0 && nRecStatus != -999
866 && (*it)->GetRecordingStatus() != nRecStatus))
873 if (!RecGroup.isEmpty())
875 if ( (*it)-> GetRecordingGroup() != RecGroup )
904 if (Sort.startsWith(
"channum", Qt::CaseInsensitive))
906 else if (Sort.startsWith(
"title", Qt::CaseInsensitive))
908 else if (Sort.startsWith(
"length", Qt::CaseInsensitive))
910 else if (Sort.startsWith(
"status", Qt::CaseInsensitive))
912 if (Sort.endsWith(
"desc", Qt::CaseInsensitive))
915 static QRegularExpression regex(
"[_-]");
926 return First->
GetChanNum().replace(regex,
".").toDouble()
927 < Second->GetChanNum().replace(regex,
".").toDouble();
929 return First->
GetChanNum().replace(regex,
".").toDouble()
930 > Second->GetChanNum().replace(regex,
".").toDouble();
932 return QString::compare(First->
GetSortTitle(), Second->GetSortTitle(), Qt::CaseInsensitive) < 0 ;
934 return QString::compare(First->
GetSortTitle(), Second->GetSortTitle(), Qt::CaseInsensitive) > 0 ;
938 qint64 time2 = Second->GetScheduledStartTime().msecsTo( Second->GetScheduledEndTime());
939 return time1 < time2 ;
944 qint64 time2 = Second->GetScheduledStartTime().msecsTo( Second->GetScheduledEndTime());
945 return time1 > time2 ;
950 Qt::CaseInsensitive) < 0 ;
954 Qt::CaseInsensitive) > 0 ;
961 std::stable_sort(recordingList.
begin(), recordingList.
end(), comp);
967 nStartIndex = (nStartIndex > 0) ? std::min( nStartIndex, (
int)recordingList.
size() ) : 0;
968 nCount = (nCount > 0) ? std::min( nCount, (
int)recordingList.
size() ) : recordingList.
size();
969 int nEndIndex = std::min((nStartIndex + nCount), (
int)recordingList.
size() );
971 for(
int n = nStartIndex; n < nEndIndex; n++)
974 auto *pProgram =
new V2Program( parent );
975 list.append( QVariant::fromValue<QObject *>( pProgram ));
979 return recordingList.
size();
984 QMap<QString, Frontend*> frontends;
990 for (
auto * fe : std::as_const(frontends))
993 list.append( QVariant::fromValue<QObject *>( pFrontend ));
994 pFrontend->setName(fe->m_name);
995 pFrontend->setIP(fe->m_ip.toString());
998 pFrontend->setPort(port);
999 pFrontend->setOnLine(fe->m_connectionCount > 0);
1009 query.
prepare(
"INSERT INTO recgroups SET recgroup = :NAME, "
1010 "displayname = :DISPLAYNAME");
1012 query.
bindValue(
":DISPLAYNAME", groupName);
1018 LOG(VB_GENERAL, LOG_ERR, QString(
"Could not create recording group (%1). "
1019 "Does it already exist?").arg(groupName));
1029 QJsonArray members = cast[
"CastMembers"].toArray();
1030 for (
const auto & m : std::as_const(members))
1032 QJsonObject actor = m.toObject();
1033 QString name = actor.value(
"Name").toString(
"");
1034 QString character = actor.value(
"CharacterName").toString(
"");
1035 QString role = actor.value(
"Role").toString(
"");
1037 credits->emplace_back(role, name, priority++, character);
1048 uint minor_max = 15;
1049 QString card = QString();
1052 QDir dev(
"/dev/v4l",
"video*", QDir::Name, QDir::System);
1054 card, driver,
false, pList, cardType);
1057 dev.setPath(
"/dev");
1059 card, driver,
false, pList, cardType);
1062 dev.setPath(
"/dev/dtv");
1064 card, driver,
false, pList, cardType);
1067 dev.setPath(
"/dev");
1068 dev.setNameFilters(QStringList(
"dtv*"));
1070 card, driver,
false, pList, cardType);
1077 const QString& card,
const QRegularExpression& driver,
1079 const QString & cardType)
1082 QMap<uint, uint> minorlist;
1083 QFileInfoList entries = dir.entryInfoList();
1084 for (
const auto & fi : std::as_const(entries))
1087 QString filepath = fi.absoluteFilePath();
1088 int err =
lstat(filepath.toLocal8Bit().constData(), &st);
1092 LOG(VB_GENERAL, LOG_ERR,
1093 QString(
"Could not stat file: %1").arg(filepath));
1098 if (!S_ISCHR(st.st_mode))
1103 if (minor_min > minor_num || minor_max < minor_num)
1107 if (!allow_duplicates && minorlist[minor_num])
1111 QByteArray
tmp = filepath.toLatin1();
1112 int videofd = open(
tmp.constData(), O_RDWR);
1116 QString driver_name;
1119 auto match = driver.match(driver_name);
1120 if ((!driver.pattern().isEmpty() || match.hasMatch()) &&
1121 (card.isEmpty() || (card_name == card)))
1124 pDev->setCardType (cardType);
1125 pDev->setVideoDevice (filepath);
1126 pDev->setFrontendName(card_name);
1129 pDev->setInputNames(inputs);
1131 pDev->setAudioDevices(inputs);
1132 if (cardType ==
"HDPVR")
1133 pDev->setChannelTimeout ( 15000 );
1140 minorlist[minor_num] = 1;
1152 for (
auto &
info : list)
1154 auto* pDev = pList->AddCaptureDevice();
1155 pDev->setCardType (cardType);
1156 QString guid =
info.GetGUIDString();
1157 pDev->setVideoDevice (guid);
1159 pDev->setFirewireModel(model);
1160 pDev->setDescription(
info.m_product_name);
1161 pDev->setSignalTimeout ( 2000 );
1162 pDev->setChannelTimeout ( 9000 );
QMap< int, EncoderLink * > gTVList
BackendContext * gBackendContext
QString toRawString(ChannelVisibleType type)
QMap< QString, Frontend * > GetFrontends() const
QMap< QString, Frontend * > GetConnectedFrontends() const
static void GetDeviceInputNames(const QString &device, const QString &inputtype, QStringList &inputs)
static bool GetV4LInfo(int videofd, QString &input, QString &driver, uint32_t &version, uint32_t &capabilities)
static QList< InputInfo > GetAllInputInfo(bool virtTuners)
static QStringList ProbeAudioInputs(const QString &device, const QString &inputtype=QString())
QList< uint > GetGroupIds() const
QList< uint > GetInputIds() const
ChannelVisibleType m_visible
bool Load(uint lchanid=-1)
QString m_defaultAuthority
static std::vector< AVCInfo > GetSTBList(void)
static QString GetModelName(uint vendor_id, uint model_id)
QSqlQuery wrapper that fetches a DB connection from the connection pool.
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
QVariant value(int i) const
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
QVariant lastInsertId()
Return the id of the last inserted row.
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
int GetNumSettingOnHost(const QString &key, const QString &host, int defaultval=0)
QString GetHostName(void)
MythScheduler * GetScheduler(void)
Holds information on recordings and videos.
float GetStars(void) const
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
uint GetRecordingRuleID(void) const
RecordingDupMethodType GetDuplicateCheckMethod(void) const
What should be compared to determine if two programs are the same?
QString GetSeriesID(void) const
QString GetAudioPropertyNames(void) const
uint GetVideoProperties(void) const
QString GetCategoryTypeString(void) const
Returns catType as a string.
uint GetEpisode(void) const
uint GetSubtitleType(void) const
QString GetProgramID(void) const
QString GetRecordingGroup(void) const
QString GetProgramFlagNames(void) const
uint GetRecordingID(void) const
QDateTime GetScheduledEndTime(void) const
The scheduled end time of the program.
QString GetInetRef(void) const
RecordingDupInType GetDuplicateCheckSource(void) const
Where should we check for duplicates?
bool QueryKeyFrameDuration(uint64_t *duration, uint64_t keyframe, bool backwards) const
void QueryCommBreakList(frm_dir_map_t &frames) const
uint GetAudioProperties(void) const
bool IsRepeat(void) const
void QueryPositionMap(frm_pos_map_t &posMap, MarkTypes type) const
QString GetHostname(void) const
QString GetPlaybackGroup(void) const
QString GetDescription(void) const
QDateTime GetLastModifiedTime(void) const
QString GetStorageGroup(void) const
QString GetTitle(void) const
QDateTime GetRecordingStartTime(void) const
Approximate time the recording started.
QDateTime GetScheduledStartTime(void) const
The scheduled start time of program.
bool QueryCutList(frm_dir_map_t &delMap, bool loadAutosave=false) const
QString GetChanNum(void) const
This is the channel "number", in the form 1, 1_2, 1-2, 1#1, etc.
QString GetSubtitleTypeNames(void) const
uint GetYearOfInitialRelease(void) const
QString GetInputName(void) const
QString GetSortTitle(void) const
int GetRecordingPriority(void) const
QString GetPathname(void) const
bool QueryKeyFramePosition(uint64_t *position, uint64_t keyframe, bool backwards) const
QDate GetOriginalAirDate(void) const
uint GetInputID(void) const
void QueryMarkupMap(frm_dir_map_t &marks, MarkTypes type, bool merge=false) const
QString GetVideoPropertyNames(void) const
virtual uint64_t GetFilesize(void) const
uint32_t GetProgramFlags(void) const
RecStatus::Type GetRecordingStatus(void) const
QString GetRecTypeStatus(bool showrerecord) const
QDateTime GetRecordingEndTime(void) const
Approximate time the recording should have ended, did end, or is intended to end.
QString GetSubtitle(void) const
QString GetCategory(void) const
uint GetSeason(void) const
RecordingType GetRecordingRuleType(void) const
uint GetEpisodeTotal(void) const
static QString toString(RecStatus::Type recstatus, uint id)
Converts "recstatus" into a short (unreadable) string.
Holds information on a TV Program one might wish to record.
static QString GetRecgroupString(uint recGroupID)
Temporary helper during transition from string to ID.
QString GetProgramRecordingProfile(void) const
Returns recording profile name that will be, or was used, for this program, creating "record" field i...
uint64_t GetFilesize(void) const override
Internal representation of a recording rule, mirrors the record table.
int m_findday
Day of the week for once per week etc.
RecSearchType m_searchType
QTime m_findtime
Time for timeslot rules.
QDateTime m_nextRecording
int m_recordID
Unique Recording Rule ID.
RecordingDupInType m_dupIn
bool m_isInactive
Recording rule is enabled?
RecordingDupMethodType m_dupMethod
bool m_autoMetadataLookup
AutoExtendType m_autoExtend
bool GetAllPending(RecList &retList, int recRuleId=0) const
static QReadWriteLock s_inputsLock
V2ArtworkInfo * AddNewArtworkInfo()
V2CaptureDevice * AddCaptureDevice()
V2CastMember * AddNewCastMember()
V2Cutting * AddNewCutting()
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
std::deque< RecordingInfo * > RecList
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
std::vector< DBPerson > DBCredits
QMap< uint64_t, MarkTypes > frm_dir_map_t
Frame # -> Mark map.
QMap< long long, long long > frm_pos_map_t
Frame # -> File offset map.
bool newEpifromDupIn(RecordingDupInType recdupin)
@ kState_RecordingOnly
Recording Only is a TVRec only state for when we are recording a program, but there is no one current...
@ kState_WatchingLiveTV
Watching LiveTV is the state for when we are watching a recording and the user has control over the c...
@ kState_WatchingRecording
Watching Recording is the state for when we are watching an in progress recording,...
void FillEncoderList(QVariantList &list, QObject *parent)
void V2FillInputInfo(V2Input *input, const InputInfo &inputInfo)
void V2FillCastMemberList(V2CastMemberList *pCastMemberList, ProgramInfo *pInfo)
void FillFrontendList(QVariantList &list, QObject *parent, bool OnLine)
void V2FillCommBreak(V2CutList *pCutList, ProgramInfo *rInfo, int marktype, bool includeFps)
V2CaptureDeviceList * getV4l2List(const QRegularExpression &driver, const QString &cardType)
void V2FillGenreList(V2GenreList *pGenreList, int videoID)
void V2FillMusicMetadataInfo(V2MusicMetadataInfo *pVideoMetadataInfo, MusicMetadata *pMetadata, bool bDetails)
DBCredits * V2jsonCastToCredits(const QJsonObject &cast)
void V2FillChannelGroup(V2ChannelGroup *pGroup, const ChannelGroupItem &pGroupItem)
void V2FillArtworkInfoList(V2ArtworkInfoList *pArtworkInfoList, const QString &sInetref, uint nSeason)
void V2FillRecRuleInfo(V2RecRule *pRecRule, RecordingRule *pRule)
void V2FillProgramInfo(V2Program *pProgram, ProgramInfo *pInfo, bool bIncChannel, bool bDetails, bool bIncCast, bool bIncArtwork, bool bIncRecording)
bool V2FillChannelInfo(V2ChannelInfo *pChannel, uint nChanID, bool bDetails)
V2CaptureDeviceList * getFirewireList(const QString &cardType)
int FillUpcomingList(QVariantList &list, QObject *parent, int &nStartIndex, int &nCount, bool bShowAll, int nRecordId, int nRecStatus, const QString &Sort, const QString &RecGroup)
void V2FillSeek(V2CutList *pCutList, RecordingInfo *rInfo, MarkTypes marktype)
int V2CreateRecordingGroup(const QString &groupName)
void V2FillVideoMetadataInfo(V2VideoMetadataInfo *pVideoMetadataInfo, const VideoMetadataListManager::VideoMetadataPtr &pMetadata, bool bDetails)
void V2FillCutList(V2CutList *pCutList, ProgramInfo *rInfo, int marktype, bool includeFps)
uint fillSelectionsFromDir(const QDir &dir, uint minor_min, uint minor_max, const QString &card, const QRegularExpression &driver, bool allow_duplicates, V2CaptureDeviceList *pList, const QString &cardType)
QString ContentTypeToString(VideoContentType type)