2#if QT_VERSION >= QT_VERSION_CHECK(6,5,0)
3#include <QtSystemDetection>
10#if defined(Q_OS_BSD4) || defined(Q_OS_WINDOWS)
13#include <sys/sysmacros.h>
19#include <QFileInfoList>
24#include "libmythbase/mythconfig.h"
58 if ((pProgram ==
nullptr) || (pInfo ==
nullptr))
63 pProgram->setTitle ( pInfo->
GetTitle() );
67 pProgram->setRepeat ( pInfo->
IsRepeat() );
79 pProgram->setStars ( pInfo->
GetStars() );
96 pProgram->setSeason ( pInfo->
GetSeason() );
104 pProgram->enableCast(
false);
119 pProgram->enableChannel(
false);
140 pRecording->setFileName ( pRecInfo.
GetPathname() );
141 pRecording->setFileSize ( pRecInfo.
GetFilesize() );
142 pRecording->setHostName ( pRecInfo.
GetHostname() );
152 pRecording->setEncoderId ( pRecInfo.
GetInputID() );
159 pProgram->enableRecording(
false);
162 if ( bIncArtwork && !pInfo->
GetInetRef().isEmpty() )
165 pProgram->enableArtwork(
false);
177 if (channel.
Load(nChanID))
196 pChannel->setChanId(channelInfo.
m_chanId);
197 pChannel->setChanNum(channelInfo.
m_chanNum);
198 pChannel->setCallSign(channelInfo.
m_callSign);
199 if (!channelInfo.
m_icon.isEmpty())
201 QString sIconURL = QString(
"/Guide/GetChannelIcon?FileName=%1")
202 .arg( channelInfo.
m_icon );
203 pChannel->setIconURL( sIconURL );
204 pChannel->setIcon( channelInfo.
m_icon );
206 pChannel->setChannelName(channelInfo.
m_name);
212 pChannel->setMplexId(channelInfo.
m_mplexId);
217 pChannel->setFineTune(channelInfo.
m_fineTune);
218 pChannel->setFrequencyId(channelInfo.
m_freqId);
220 pChannel->setSourceId(channelInfo.
m_sourceId);
223 pChannel->setXMLTVID(channelInfo.
m_xmltvId);
227 pChannel->setTimeOffset(channelInfo.
m_tmOffset);
232 for (
int x = 0; x < groupIds.size(); x++)
237 sGroupIds += QString::number(groupIds.at(x));
239 pChannel->setChannelGroups(sGroupIds);
243 for (
int x = 0; x < inputIds.size(); x++)
248 sInputIds += QString::number(inputIds.at(x));
250 pChannel->setInputs(sInputIds);
261 pGroup->setGroupId(pGroupItem.
m_grpId);
262 pGroup->setName(pGroupItem.
m_name);
263 pGroup->setPassword(
"");
273 if ((pRecRule ==
nullptr) || (pRule ==
nullptr))
279 pRecRule->setTitle ( pRule->
m_title );
282 pRecRule->setSeason ( pRule->
m_season );
283 pRecRule->setEpisode ( pRule->
m_episode );
285#if QT_VERSION < QT_VERSION_CHECK(6,5,0)
286 pRecRule->setStartTime ( QDateTime(pRule->
m_startdate,
288 pRecRule->setEndTime ( QDateTime(pRule->
m_enddate,
291 static const QTimeZone utc(QTimeZone::UTC);
292 pRecRule->setStartTime ( QDateTime(pRule->
m_startdate,
294 pRecRule->setEndTime ( QDateTime(pRule->
m_enddate,
299 pRecRule->setInetref ( pRule->
m_inetref );
301 pRecRule->setCallSign ( pRule->
m_station );
302 pRecRule->setFindDay ( pRule->
m_findday );
307 pRecRule->setPreferredInput ( pRule->
m_prefInput );
313 pRecRule->setFilter ( pRule->
m_filter );
337 const QString &sInetref,
341 for (
auto i = map.cbegin(); i != map.cend(); ++i)
344 pArtInfo->setFileName(i.value().url);
348 pArtInfo->setStorageGroup(
"Fanart");
349 pArtInfo->setType(
"fanart");
350 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
353 QString(QUrl::toPercentEncoding(
354 QUrl(i.value().url).path()))));
357 pArtInfo->setStorageGroup(
"Banners");
358 pArtInfo->setType(
"banner");
359 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
362 QString(QUrl::toPercentEncoding(
363 QUrl(i.value().url).path()))));
367 pArtInfo->setStorageGroup(
"Coverart");
368 pArtInfo->setType(
"coverart");
369 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
372 QString(QUrl::toPercentEncoding(
373 QUrl(i.value().url).path()))));
385 query.
prepare(
"SELECT genre from videogenre "
386 "LEFT JOIN videometadatagenre ON videometadatagenre.idgenre = videogenre.intid "
387 "WHERE idvideo = :ID "
391 if (query.
exec() && query.
size() > 0)
396 QString genre = query.
value(0).toString();
397 pGenre->setName(genre);
408 pVideoMetadataInfo->setId(pMetadata->GetID());
409 pVideoMetadataInfo->setTitle(pMetadata->GetTitle());
410 pVideoMetadataInfo->setSubTitle(pMetadata->GetSubtitle());
411 pVideoMetadataInfo->setTagline(pMetadata->GetTagline());
412 pVideoMetadataInfo->setDirector(pMetadata->GetDirector());
413 pVideoMetadataInfo->setStudio(pMetadata->GetStudio());
414 pVideoMetadataInfo->setDescription(pMetadata->GetPlot());
415 pVideoMetadataInfo->setCertification(pMetadata->GetRating());
416 pVideoMetadataInfo->setInetref(pMetadata->GetInetRef());
417 pVideoMetadataInfo->setCollectionref(pMetadata->GetCollectionRef());
418 pVideoMetadataInfo->setHomePage(pMetadata->GetHomepage());
419#if QT_VERSION < QT_VERSION_CHECK(6,5,0)
420 pVideoMetadataInfo->setReleaseDate(
421 QDateTime(pMetadata->GetReleaseDate(),
422 QTime(0,0),Qt::LocalTime).toUTC());
423 pVideoMetadataInfo->setAddDate(
424 QDateTime(pMetadata->GetInsertdate(),
425 QTime(0,0),Qt::LocalTime).toUTC());
427 static const QTimeZone localtime(QTimeZone::LocalTime);
428 pVideoMetadataInfo->setReleaseDate(
429 QDateTime(pMetadata->GetReleaseDate(),
430 QTime(0,0),localtime).toUTC());
431 pVideoMetadataInfo->setAddDate(
432 QDateTime(pMetadata->GetInsertdate(),
433 QTime(0,0),localtime).toUTC());
435 pVideoMetadataInfo->setUserRating(pMetadata->GetUserRating());
436 pVideoMetadataInfo->setChildID(pMetadata->GetChildID());
437 pVideoMetadataInfo->setLength(pMetadata->GetLength().count());
438 pVideoMetadataInfo->setPlayCount(pMetadata->GetPlayCount());
439 pVideoMetadataInfo->setSeason(pMetadata->GetSeason());
440 pVideoMetadataInfo->setEpisode(pMetadata->GetEpisode());
441 pVideoMetadataInfo->setParentalLevel(pMetadata->GetShowLevel());
442 pVideoMetadataInfo->setVisible(pMetadata->GetBrowse());
443 pVideoMetadataInfo->setWatched(pMetadata->GetWatched());
444 pVideoMetadataInfo->setProcessed(pMetadata->GetProcessed());
446 pMetadata->GetContentType()));
447 pVideoMetadataInfo->setFileName(pMetadata->GetFilename());
448 pVideoMetadataInfo->setHash(pMetadata->GetHash());
449 pVideoMetadataInfo->setHostName(pMetadata->GetHost());
450 pVideoMetadataInfo->setCoverart(pMetadata->GetCoverFile());
451 pVideoMetadataInfo->setFanart(pMetadata->GetFanart());
452 pVideoMetadataInfo->setBanner(pMetadata->GetBanner());
453 pVideoMetadataInfo->setScreenshot(pMetadata->GetScreenshot());
454 pVideoMetadataInfo->setTrailer(pMetadata->GetTrailer());
455 pVideoMetadataInfo->setCategory(pMetadata->GetCategoryID());
459 if (!pMetadata->GetFanart().isEmpty())
462 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
463 pArtInfo->setStorageGroup(
"Fanart");
464 pArtInfo->setType(
"fanart");
465 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
469 QUrl::toPercentEncoding(pMetadata->GetFanart()))));
471 if (!pMetadata->GetCoverFile().isEmpty())
474 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
475 pArtInfo->setStorageGroup(
"Coverart");
476 pArtInfo->setType(
"coverart");
477 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
481 QUrl::toPercentEncoding(pMetadata->GetCoverFile()))));
483 if (!pMetadata->GetBanner().isEmpty())
486 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
487 pArtInfo->setStorageGroup(
"Banners");
488 pArtInfo->setType(
"banner");
489 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
493 QUrl::toPercentEncoding(pMetadata->GetBanner()))));
495 if (!pMetadata->GetScreenshot().isEmpty())
498 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
499 pArtInfo->setStorageGroup(
"Screenshots");
500 pArtInfo->setType(
"screenshot");
501 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
505 QUrl::toPercentEncoding(pMetadata->GetScreenshot()))));
511 auto castList = pMetadata->GetCast();
514 QString actors = QObject::tr(
"Actors");
518 pCastMember->setTranslatedRole(actors);
519 pCastMember->setRole(
"ACTOR");
520 pCastMember->setName(ent.second);
532 pVideoMetadataInfo->setId(pMetadata->
ID());
533 pVideoMetadataInfo->setArtist(pMetadata->
Artist());
535 pVideoMetadataInfo->setAlbum(pMetadata->
Album());
536 pVideoMetadataInfo->setTitle(pMetadata->
Title());
537 pVideoMetadataInfo->setTrackNo(pMetadata->
Track());
538 pVideoMetadataInfo->setGenre(pMetadata->
Genre());
539 pVideoMetadataInfo->setYear(pMetadata->
Year());
540 pVideoMetadataInfo->setPlayCount(pMetadata->
PlayCount());
541 pVideoMetadataInfo->setLength(pMetadata->
Length().count());
542 pVideoMetadataInfo->setRating(pMetadata->
Rating());
543 pVideoMetadataInfo->setFileName(pMetadata->
Filename());
544 pVideoMetadataInfo->setHostName(pMetadata->
Hostname());
545 pVideoMetadataInfo->setLastPlayed(pMetadata->
LastPlay());
546 pVideoMetadataInfo->setCompilation(pMetadata->
Compilation());
557 input->setInputName(inputInfo.
m_name);
572 if (!pCastMemberList || !pInfo)
579 table =
"recordedcredits";
583 query.
prepare(QString(
"SELECT role, people.name, roles.name FROM %1"
585 " LEFT JOIN people ON"
586 " credits.person = people.person"
587 " LEFT JOIN roles ON"
588 " credits.roleid = roles.roleid"
589 " WHERE credits.chanid = :CHANID"
590 " AND credits.starttime = :STARTTIME"
591 " ORDER BY role, priority;").arg(table));
596 if (query.
exec() && query.
size() > 0)
598 QMap<QString, QString> translations;
599 translations[
"ACTOR"] = QObject::tr(
"Actors");
600 translations[
"DIRECTOR"] = QObject::tr(
"Director");
601 translations[
"PRODUCER"] = QObject::tr(
"Producer");
602 translations[
"EXECUTIVE_PRODUCER"] = QObject::tr(
"Executive Producer");
603 translations[
"WRITER"] = QObject::tr(
"Writer");
604 translations[
"GUEST_STAR"] = QObject::tr(
"Guest Star");
605 translations[
"HOST"] = QObject::tr(
"Host");
606 translations[
"ADAPTER"] = QObject::tr(
"Adapter");
607 translations[
"PRESENTER"] = QObject::tr(
"Presenter");
608 translations[
"COMMENTATOR"] = QObject::tr(
"Commentator");
609 translations[
"GUEST"] = QObject::tr(
"Guest");
615 QString role = query.
value(0).toString();
616 pCastMember->setTranslatedRole(translations.value(role.toUpper()));
617 pCastMember->setRole(role);
633 pCastMember->setName(QString::fromUtf8(query.
value(1)
634 .toByteArray().constData()));
635 pCastMember->setCharacterName(QString::fromUtf8(query.
value(2)
636 .toByteArray().constData()));
646 frm_dir_map_t::const_iterator it;
653 it = markMap.cbegin();
654 if (it != markMap.cend())
657 pCutting->setMark(*it);
658 pCutting->setOffset(it.key());
664 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
670 pCutting->setMark(*it);
671 pCutting->setOffset(it.key());
673 else if (marktype == 1)
679 pCutting->setMark(*it);
680 pCutting->setOffset(offset);
683 else if (marktype == 2)
689 pCutting->setMark(*it);
690 pCutting->setOffset(offset);
700 frm_dir_map_t::const_iterator it;
707 it = markMap.cbegin();
708 if (it != markMap.cend())
711 pCutting->setMark(*it);
712 pCutting->setOffset(it.key());
718 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
724 pCutting->setMark(*it);
725 pCutting->setOffset(it.key());
727 else if (marktype == 1)
733 pCutting->setMark(*it);
734 pCutting->setOffset(offset);
737 else if (marktype == 2)
743 pCutting->setMark(*it);
744 pCutting->setOffset(offset);
758 frm_pos_map_t::const_iterator it;
764 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
767 pCutting->setMark(it.key());
768 pCutting->setOffset(it.value());
777 for (
auto * elink : std::as_const(
gTVList))
779 if (elink !=
nullptr)
782 auto *pEncoder =
new V2Encoder( parent );
783 list.append( QVariant::fromValue<QObject *>( pEncoder ));
785 pEncoder->setId ( elink->GetInputID() );
786 pEncoder->setState ( elink->GetState() );
787 pEncoder->setLocal ( elink->IsLocal() );
788 pEncoder->setConnected ( elink->IsConnected() );
789 pEncoder->setSleepStatus ( elink->GetSleepStatus() );
791 if (pEncoder->GetLocal())
794 pEncoder->setHostName( elink->GetHostName() );
796 for (
const auto & inputInfo : std::as_const(inputInfoList))
798 if (inputInfo.m_inputId ==
static_cast<uint>(elink->GetInputID()))
800 V2Input *input = pEncoder->AddNewInput();
805 bool progFound =
false;
807 switch ( pEncoder->GetState() )
829 pProgram->setProperty(
"isNull",QVariant(
true));
843 const QString &RecGroup )
863 for (
auto it = tmpList.begin(); it < tmpList.end(); ++it)
865 if ((nRecStatus == -999
866 && (*it)->GetRecordingStatus() >= 0)
867 || (nRecStatus != 0 && nRecStatus != -999
868 && (*it)->GetRecordingStatus() != nRecStatus))
875 if (!RecGroup.isEmpty())
877 if ( (*it)-> GetRecordingGroup() != RecGroup )
906 if (Sort.startsWith(
"channum", Qt::CaseInsensitive))
908 else if (Sort.startsWith(
"title", Qt::CaseInsensitive))
910 else if (Sort.startsWith(
"length", Qt::CaseInsensitive))
912 else if (Sort.startsWith(
"status", Qt::CaseInsensitive))
914 if (Sort.endsWith(
"desc", Qt::CaseInsensitive))
917 static QRegularExpression regex(
"[_-]");
928 return First->
GetChanNum().replace(regex,
".").toDouble()
929 < Second->GetChanNum().replace(regex,
".").toDouble();
931 return First->
GetChanNum().replace(regex,
".").toDouble()
932 > Second->GetChanNum().replace(regex,
".").toDouble();
934 return QString::compare(First->
GetSortTitle(), Second->GetSortTitle(), Qt::CaseInsensitive) < 0 ;
936 return QString::compare(First->
GetSortTitle(), Second->GetSortTitle(), Qt::CaseInsensitive) > 0 ;
940 qint64 time2 = Second->GetScheduledStartTime().msecsTo( Second->GetScheduledEndTime());
941 return time1 < time2 ;
946 qint64 time2 = Second->GetScheduledStartTime().msecsTo( Second->GetScheduledEndTime());
947 return time1 > time2 ;
952 Qt::CaseInsensitive) < 0 ;
956 Qt::CaseInsensitive) > 0 ;
963 std::ranges::stable_sort(recordingList, comp);
969 nStartIndex = (nStartIndex > 0) ? std::min( nStartIndex, (
int)recordingList.
size() ) : 0;
970 nCount = (nCount > 0) ? std::min( nCount, (
int)recordingList.
size() ) : recordingList.
size();
971 int nEndIndex = std::min((nStartIndex + nCount), (
int)recordingList.
size() );
973 for(
int n = nStartIndex; n < nEndIndex; n++)
976 auto *pProgram =
new V2Program( parent );
977 list.append( QVariant::fromValue<QObject *>( pProgram ));
981 return recordingList.
size();
986 QMap<QString, Frontend*> frontends;
992 for (
auto * fe : std::as_const(frontends))
995 list.append( QVariant::fromValue<QObject *>( pFrontend ));
996 pFrontend->setName(fe->m_name);
997 pFrontend->setIP(fe->m_ip.toString());
1000 pFrontend->setPort(port);
1001 pFrontend->setOnLine(fe->m_connectionCount > 0);
1011 query.
prepare(
"INSERT INTO recgroups SET recgroup = :NAME, "
1012 "displayname = :DISPLAYNAME");
1014 query.
bindValue(
":DISPLAYNAME", groupName);
1020 LOG(VB_GENERAL, LOG_ERR, QString(
"Could not create recording group (%1). "
1021 "Does it already exist?").arg(groupName));
1031 QJsonArray members = cast[
"CastMembers"].toArray();
1032 for (
const auto & m : std::as_const(members))
1034 QJsonObject actor = m.toObject();
1035 QString name = actor.value(
"Name").toString(
"");
1036 QString character = actor.value(
"CharacterName").toString(
"");
1037 QString role = actor.value(
"Role").toString(
"");
1039 credits->emplace_back(role, name, priority++, character);
1050 uint minor_max = 15;
1051 QString card = QString();
1054 QDir dev(
"/dev/v4l",
"video*", QDir::Name, QDir::System);
1056 card, driver,
false, pList, cardType);
1059 dev.setPath(
"/dev");
1061 card, driver,
false, pList, cardType);
1064 dev.setPath(
"/dev/dtv");
1066 card, driver,
false, pList, cardType);
1069 dev.setPath(
"/dev");
1070 dev.setNameFilters(QStringList(
"dtv*"));
1072 card, driver,
false, pList, cardType);
1079 const QString& card,
const QRegularExpression& driver,
1081 const QString & cardType)
1084 QMap<uint, uint> minorlist;
1085 QFileInfoList entries = dir.entryInfoList();
1086 for (
const auto & fi : std::as_const(entries))
1089 QString filepath = fi.absoluteFilePath();
1090 int err =
lstat(filepath.toLocal8Bit().constData(), &st);
1094 LOG(VB_GENERAL, LOG_ERR,
1095 QString(
"Could not stat file: %1").arg(filepath));
1100 if (!S_ISCHR(st.st_mode))
1105 if (minor_min > minor_num || minor_max < minor_num)
1109 if (!allow_duplicates && minorlist[minor_num])
1113 QByteArray tmp = filepath.toLatin1();
1114 int videofd = open(tmp.constData(), O_RDWR);
1118 QString driver_name;
1121 auto match = driver.match(driver_name);
1122 if ((!driver.pattern().isEmpty() || match.hasMatch()) &&
1123 (card.isEmpty() || (card_name == card)))
1126 pDev->setCardType (cardType);
1127 pDev->setVideoDevice (filepath);
1128 pDev->setFrontendName(card_name);
1131 pDev->setInputNames(inputs);
1133 pDev->setAudioDevices(inputs);
1134 if (cardType ==
"HDPVR")
1135 pDev->setChannelTimeout ( 15000 );
1142 minorlist[minor_num] = 1;
1154 for (
auto &
info : list)
1156 auto* pDev = pList->AddCaptureDevice();
1157 pDev->setCardType (cardType);
1158 QString guid =
info.GetGUIDString();
1159 pDev->setVideoDevice (guid);
1161 pDev->setFirewireModel(model);
1162 pDev->setDescription(
info.m_product_name);
1163 pDev->setSignalTimeout ( 2000 );
1164 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)