4#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(_WIN32)
7#include <sys/sysmacros.h>
13#include <QFileInfoList>
51 if ((pProgram ==
nullptr) || (pInfo ==
nullptr))
56 pProgram->setTitle ( pInfo->
GetTitle() );
60 pProgram->setRepeat ( pInfo->
IsRepeat() );
72 pProgram->setStars ( pInfo->
GetStars() );
89 pProgram->setSeason ( pInfo->
GetSeason() );
97 pProgram->enableCast(
false);
112 pProgram->enableChannel(
false);
133 pRecording->setFileName ( pRecInfo.
GetPathname() );
134 pRecording->setFileSize ( pRecInfo.
GetFilesize() );
135 pRecording->setHostName ( pRecInfo.
GetHostname() );
145 pRecording->setEncoderId ( pRecInfo.
GetInputID() );
152 pProgram->enableRecording(
false);
155 if ( bIncArtwork && !pInfo->
GetInetRef().isEmpty() )
158 pProgram->enableArtwork(
false);
170 if (channel.
Load(nChanID))
189 pChannel->setChanId(channelInfo.
m_chanId);
190 pChannel->setChanNum(channelInfo.
m_chanNum);
191 pChannel->setCallSign(channelInfo.
m_callSign);
192 if (!channelInfo.
m_icon.isEmpty())
194 QString sIconURL = QString(
"/Guide/GetChannelIcon?FileName=%1")
195 .arg( channelInfo.
m_icon );
196 pChannel->setIconURL( sIconURL );
197 pChannel->setIcon( channelInfo.
m_icon );
199 pChannel->setChannelName(channelInfo.
m_name);
205 pChannel->setMplexId(channelInfo.
m_mplexId);
210 pChannel->setFineTune(channelInfo.
m_fineTune);
211 pChannel->setFrequencyId(channelInfo.
m_freqId);
213 pChannel->setSourceId(channelInfo.
m_sourceId);
216 pChannel->setXMLTVID(channelInfo.
m_xmltvId);
220 pChannel->setTimeOffset(channelInfo.
m_tmOffset);
225 for (
int x = 0; x < groupIds.size(); x++)
230 sGroupIds += QString::number(groupIds.at(x));
232 pChannel->setChannelGroups(sGroupIds);
236 for (
int x = 0; x < inputIds.size(); x++)
241 sInputIds += QString::number(inputIds.at(x));
243 pChannel->setInputs(sInputIds);
254 pGroup->setGroupId(pGroupItem.
m_grpId);
255 pGroup->setName(pGroupItem.
m_name);
256 pGroup->setPassword(
"");
266 if ((pRecRule ==
nullptr) || (pRule ==
nullptr))
272 pRecRule->setTitle ( pRule->
m_title );
275 pRecRule->setSeason ( pRule->
m_season );
276 pRecRule->setEpisode ( pRule->
m_episode );
278#if QT_VERSION < QT_VERSION_CHECK(6,5,0)
279 pRecRule->setStartTime ( QDateTime(pRule->
m_startdate,
281 pRecRule->setEndTime ( QDateTime(pRule->
m_enddate,
284 static const QTimeZone utc(QTimeZone::UTC);
285 pRecRule->setStartTime ( QDateTime(pRule->
m_startdate,
287 pRecRule->setEndTime ( QDateTime(pRule->
m_enddate,
292 pRecRule->setInetref ( pRule->
m_inetref );
294 pRecRule->setCallSign ( pRule->
m_station );
295 pRecRule->setFindDay ( pRule->
m_findday );
300 pRecRule->setPreferredInput ( pRule->
m_prefInput );
306 pRecRule->setFilter ( pRule->
m_filter );
330 const QString &sInetref,
334 for (
auto i = map.cbegin(); i != map.cend(); ++i)
337 pArtInfo->setFileName(i.value().url);
341 pArtInfo->setStorageGroup(
"Fanart");
342 pArtInfo->setType(
"fanart");
343 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
346 QString(QUrl::toPercentEncoding(
347 QUrl(i.value().url).path()))));
350 pArtInfo->setStorageGroup(
"Banners");
351 pArtInfo->setType(
"banner");
352 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
355 QString(QUrl::toPercentEncoding(
356 QUrl(i.value().url).path()))));
360 pArtInfo->setStorageGroup(
"Coverart");
361 pArtInfo->setType(
"coverart");
362 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
365 QString(QUrl::toPercentEncoding(
366 QUrl(i.value().url).path()))));
378 query.
prepare(
"SELECT genre from videogenre "
379 "LEFT JOIN videometadatagenre ON videometadatagenre.idgenre = videogenre.intid "
380 "WHERE idvideo = :ID "
384 if (query.
exec() && query.
size() > 0)
389 QString genre = query.
value(0).toString();
390 pGenre->setName(genre);
401 pVideoMetadataInfo->setId(pMetadata->GetID());
402 pVideoMetadataInfo->setTitle(pMetadata->GetTitle());
403 pVideoMetadataInfo->setSubTitle(pMetadata->GetSubtitle());
404 pVideoMetadataInfo->setTagline(pMetadata->GetTagline());
405 pVideoMetadataInfo->setDirector(pMetadata->GetDirector());
406 pVideoMetadataInfo->setStudio(pMetadata->GetStudio());
407 pVideoMetadataInfo->setDescription(pMetadata->GetPlot());
408 pVideoMetadataInfo->setCertification(pMetadata->GetRating());
409 pVideoMetadataInfo->setInetref(pMetadata->GetInetRef());
410 pVideoMetadataInfo->setCollectionref(pMetadata->GetCollectionRef());
411 pVideoMetadataInfo->setHomePage(pMetadata->GetHomepage());
412#if QT_VERSION < QT_VERSION_CHECK(6,5,0)
413 pVideoMetadataInfo->setReleaseDate(
414 QDateTime(pMetadata->GetReleaseDate(),
415 QTime(0,0),Qt::LocalTime).toUTC());
416 pVideoMetadataInfo->setAddDate(
417 QDateTime(pMetadata->GetInsertdate(),
418 QTime(0,0),Qt::LocalTime).toUTC());
420 static const QTimeZone localtime(QTimeZone::LocalTime);
421 pVideoMetadataInfo->setReleaseDate(
422 QDateTime(pMetadata->GetReleaseDate(),
423 QTime(0,0),localtime).toUTC());
424 pVideoMetadataInfo->setAddDate(
425 QDateTime(pMetadata->GetInsertdate(),
426 QTime(0,0),localtime).toUTC());
428 pVideoMetadataInfo->setUserRating(pMetadata->GetUserRating());
429 pVideoMetadataInfo->setChildID(pMetadata->GetChildID());
430 pVideoMetadataInfo->setLength(pMetadata->GetLength().count());
431 pVideoMetadataInfo->setPlayCount(pMetadata->GetPlayCount());
432 pVideoMetadataInfo->setSeason(pMetadata->GetSeason());
433 pVideoMetadataInfo->setEpisode(pMetadata->GetEpisode());
434 pVideoMetadataInfo->setParentalLevel(pMetadata->GetShowLevel());
435 pVideoMetadataInfo->setVisible(pMetadata->GetBrowse());
436 pVideoMetadataInfo->setWatched(pMetadata->GetWatched());
437 pVideoMetadataInfo->setProcessed(pMetadata->GetProcessed());
439 pMetadata->GetContentType()));
440 pVideoMetadataInfo->setFileName(pMetadata->GetFilename());
441 pVideoMetadataInfo->setHash(pMetadata->GetHash());
442 pVideoMetadataInfo->setHostName(pMetadata->GetHost());
443 pVideoMetadataInfo->setCoverart(pMetadata->GetCoverFile());
444 pVideoMetadataInfo->setFanart(pMetadata->GetFanart());
445 pVideoMetadataInfo->setBanner(pMetadata->GetBanner());
446 pVideoMetadataInfo->setScreenshot(pMetadata->GetScreenshot());
447 pVideoMetadataInfo->setTrailer(pMetadata->GetTrailer());
448 pVideoMetadataInfo->setCategory(pMetadata->GetCategoryID());
452 if (!pMetadata->GetFanart().isEmpty())
455 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
456 pArtInfo->setStorageGroup(
"Fanart");
457 pArtInfo->setType(
"fanart");
458 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
462 QUrl::toPercentEncoding(pMetadata->GetFanart()))));
464 if (!pMetadata->GetCoverFile().isEmpty())
467 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
468 pArtInfo->setStorageGroup(
"Coverart");
469 pArtInfo->setType(
"coverart");
470 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
474 QUrl::toPercentEncoding(pMetadata->GetCoverFile()))));
476 if (!pMetadata->GetBanner().isEmpty())
479 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
480 pArtInfo->setStorageGroup(
"Banners");
481 pArtInfo->setType(
"banner");
482 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
486 QUrl::toPercentEncoding(pMetadata->GetBanner()))));
488 if (!pMetadata->GetScreenshot().isEmpty())
491 pVideoMetadataInfo->
Artwork()->AddNewArtworkInfo();
492 pArtInfo->setStorageGroup(
"Screenshots");
493 pArtInfo->setType(
"screenshot");
494 pArtInfo->setURL(QString(
"/Content/GetImageFile?StorageGroup=%1"
498 QUrl::toPercentEncoding(pMetadata->GetScreenshot()))));
504 auto castList = pMetadata->GetCast();
507 QString actors = QObject::tr(
"Actors");
511 pCastMember->setTranslatedRole(actors);
512 pCastMember->setRole(
"ACTOR");
513 pCastMember->setName(ent.second);
525 pVideoMetadataInfo->setId(pMetadata->
ID());
526 pVideoMetadataInfo->setArtist(pMetadata->
Artist());
528 pVideoMetadataInfo->setAlbum(pMetadata->
Album());
529 pVideoMetadataInfo->setTitle(pMetadata->
Title());
530 pVideoMetadataInfo->setTrackNo(pMetadata->
Track());
531 pVideoMetadataInfo->setGenre(pMetadata->
Genre());
532 pVideoMetadataInfo->setYear(pMetadata->
Year());
533 pVideoMetadataInfo->setPlayCount(pMetadata->
PlayCount());
534 pVideoMetadataInfo->setLength(pMetadata->
Length().count());
535 pVideoMetadataInfo->setRating(pMetadata->
Rating());
536 pVideoMetadataInfo->setFileName(pMetadata->
Filename());
537 pVideoMetadataInfo->setHostName(pMetadata->
Hostname());
538 pVideoMetadataInfo->setLastPlayed(pMetadata->
LastPlay());
539 pVideoMetadataInfo->setCompilation(pMetadata->
Compilation());
550 input->setInputName(inputInfo.
m_name);
565 if (!pCastMemberList || !pInfo)
572 table =
"recordedcredits";
576 query.
prepare(QString(
"SELECT role, people.name, roles.name FROM %1"
578 " LEFT JOIN people ON"
579 " credits.person = people.person"
580 " LEFT JOIN roles ON"
581 " credits.roleid = roles.roleid"
582 " WHERE credits.chanid = :CHANID"
583 " AND credits.starttime = :STARTTIME"
584 " ORDER BY role, priority;").arg(table));
589 if (query.
exec() && query.
size() > 0)
591 QMap<QString, QString> translations;
592 translations[
"ACTOR"] = QObject::tr(
"Actors");
593 translations[
"DIRECTOR"] = QObject::tr(
"Director");
594 translations[
"PRODUCER"] = QObject::tr(
"Producer");
595 translations[
"EXECUTIVE_PRODUCER"] = QObject::tr(
"Executive Producer");
596 translations[
"WRITER"] = QObject::tr(
"Writer");
597 translations[
"GUEST_STAR"] = QObject::tr(
"Guest Star");
598 translations[
"HOST"] = QObject::tr(
"Host");
599 translations[
"ADAPTER"] = QObject::tr(
"Adapter");
600 translations[
"PRESENTER"] = QObject::tr(
"Presenter");
601 translations[
"COMMENTATOR"] = QObject::tr(
"Commentator");
602 translations[
"GUEST"] = QObject::tr(
"Guest");
608 QString role = query.
value(0).toString();
609 pCastMember->setTranslatedRole(translations.value(role.toUpper()));
610 pCastMember->setRole(role);
626 pCastMember->setName(QString::fromUtf8(query.
value(1)
627 .toByteArray().constData()));
628 pCastMember->setCharacterName(QString::fromUtf8(query.
value(2)
629 .toByteArray().constData()));
639 frm_dir_map_t::const_iterator it;
646 it = markMap.cbegin();
647 if (it != markMap.cend())
650 pCutting->setMark(*it);
651 pCutting->setOffset(it.key());
657 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
663 pCutting->setMark(*it);
664 pCutting->setOffset(it.key());
666 else if (marktype == 1)
672 pCutting->setMark(*it);
673 pCutting->setOffset(offset);
676 else if (marktype == 2)
682 pCutting->setMark(*it);
683 pCutting->setOffset(offset);
693 frm_dir_map_t::const_iterator it;
700 it = markMap.cbegin();
701 if (it != markMap.cend())
704 pCutting->setMark(*it);
705 pCutting->setOffset(it.key());
711 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
717 pCutting->setMark(*it);
718 pCutting->setOffset(it.key());
720 else if (marktype == 1)
726 pCutting->setMark(*it);
727 pCutting->setOffset(offset);
730 else if (marktype == 2)
736 pCutting->setMark(*it);
737 pCutting->setOffset(offset);
751 frm_pos_map_t::const_iterator it;
757 for (it = markMap.cbegin(); it != markMap.cend(); ++it)
760 pCutting->setMark(it.key());
761 pCutting->setOffset(it.value());
770 for (
auto * elink : std::as_const(
gTVList))
772 if (elink !=
nullptr)
775 auto *pEncoder =
new V2Encoder( parent );
776 list.append( QVariant::fromValue<QObject *>( pEncoder ));
778 pEncoder->setId ( elink->GetInputID() );
779 pEncoder->setState ( elink->GetState() );
780 pEncoder->setLocal ( elink->IsLocal() );
781 pEncoder->setConnected ( elink->IsConnected() );
782 pEncoder->setSleepStatus ( elink->GetSleepStatus() );
784 if (pEncoder->GetLocal())
787 pEncoder->setHostName( elink->GetHostName() );
789 for (
const auto & inputInfo : std::as_const(inputInfoList))
791 if (inputInfo.m_inputId ==
static_cast<uint>(elink->GetInputID()))
793 V2Input *input = pEncoder->AddNewInput();
798 bool progFound =
false;
800 switch ( pEncoder->GetState() )
822 pProgram->setProperty(
"isNull",QVariant(
true));
836 const QString &RecGroup )
856 for (
auto it = tmpList.begin(); it < tmpList.end(); ++it)
858 if ((nRecStatus == -999
859 && (*it)->GetRecordingStatus() >= 0)
860 || (nRecStatus != 0 && nRecStatus != -999
861 && (*it)->GetRecordingStatus() != nRecStatus))
868 if (!RecGroup.isEmpty())
870 if ( (*it)-> GetRecordingGroup() != RecGroup )
899 if (Sort.startsWith(
"channum", Qt::CaseInsensitive))
901 else if (Sort.startsWith(
"title", Qt::CaseInsensitive))
903 else if (Sort.startsWith(
"length", Qt::CaseInsensitive))
905 else if (Sort.startsWith(
"status", Qt::CaseInsensitive))
907 if (Sort.endsWith(
"desc", Qt::CaseInsensitive))
910 static QRegularExpression regex(
"[_-]");
921 return First->
GetChanNum().replace(regex,
".").toDouble()
922 < Second->GetChanNum().replace(regex,
".").toDouble();
924 return First->
GetChanNum().replace(regex,
".").toDouble()
925 > Second->GetChanNum().replace(regex,
".").toDouble();
927 return QString::compare(First->
GetSortTitle(), Second->GetSortTitle(), Qt::CaseInsensitive) < 0 ;
929 return QString::compare(First->
GetSortTitle(), Second->GetSortTitle(), Qt::CaseInsensitive) > 0 ;
933 qint64 time2 = Second->GetScheduledStartTime().msecsTo( Second->GetScheduledEndTime());
934 return time1 < time2 ;
939 qint64 time2 = Second->GetScheduledStartTime().msecsTo( Second->GetScheduledEndTime());
940 return time1 > time2 ;
945 Qt::CaseInsensitive) < 0 ;
949 Qt::CaseInsensitive) > 0 ;
956 std::stable_sort(recordingList.
begin(), recordingList.
end(), comp);
962 nStartIndex = (nStartIndex > 0) ? std::min( nStartIndex, (
int)recordingList.
size() ) : 0;
963 nCount = (nCount > 0) ? std::min( nCount, (
int)recordingList.
size() ) : recordingList.
size();
964 int nEndIndex = std::min((nStartIndex + nCount), (
int)recordingList.
size() );
966 for(
int n = nStartIndex; n < nEndIndex; n++)
969 auto *pProgram =
new V2Program( parent );
970 list.append( QVariant::fromValue<QObject *>( pProgram ));
974 return recordingList.
size();
979 QMap<QString, Frontend*> frontends;
985 for (
auto * fe : std::as_const(frontends))
988 list.append( QVariant::fromValue<QObject *>( pFrontend ));
989 pFrontend->setName(fe->m_name);
990 pFrontend->setIP(fe->m_ip.toString());
993 pFrontend->setPort(port);
994 pFrontend->setOnLine(fe->m_connectionCount > 0);
1004 query.
prepare(
"INSERT INTO recgroups SET recgroup = :NAME, "
1005 "displayname = :DISPLAYNAME");
1007 query.
bindValue(
":DISPLAYNAME", groupName);
1013 LOG(VB_GENERAL, LOG_ERR, QString(
"Could not create recording group (%1). "
1014 "Does it already exist?").arg(groupName));
1024 QJsonArray members = cast[
"CastMembers"].toArray();
1025 for (
const auto & m : std::as_const(members))
1027 QJsonObject actor = m.toObject();
1028 QString name = actor.value(
"Name").toString(
"");
1029 QString character = actor.value(
"CharacterName").toString(
"");
1030 QString role = actor.value(
"Role").toString(
"");
1032 credits->emplace_back(role, name, priority++, character);
1043 uint minor_max = 15;
1044 QString card = QString();
1047 QDir dev(
"/dev/v4l",
"video*", QDir::Name, QDir::System);
1049 card, driver,
false, pList, cardType);
1052 dev.setPath(
"/dev");
1054 card, driver,
false, pList, cardType);
1057 dev.setPath(
"/dev/dtv");
1059 card, driver,
false, pList, cardType);
1062 dev.setPath(
"/dev");
1063 dev.setNameFilters(QStringList(
"dtv*"));
1065 card, driver,
false, pList, cardType);
1072 const QString& card,
const QRegularExpression& driver,
1074 const QString & cardType)
1077 QMap<uint, uint> minorlist;
1078 QFileInfoList entries = dir.entryInfoList();
1079 for (
const auto & fi : std::as_const(entries))
1082 QString filepath = fi.absoluteFilePath();
1083 int err =
lstat(filepath.toLocal8Bit().constData(), &st);
1087 LOG(VB_GENERAL, LOG_ERR,
1088 QString(
"Could not stat file: %1").arg(filepath));
1093 if (!S_ISCHR(st.st_mode))
1098 if (minor_min > minor_num || minor_max < minor_num)
1102 if (!allow_duplicates && minorlist[minor_num])
1106 QByteArray
tmp = filepath.toLatin1();
1107 int videofd = open(
tmp.constData(), O_RDWR);
1111 QString driver_name;
1114 auto match = driver.match(driver_name);
1115 if ((!driver.pattern().isEmpty() || match.hasMatch()) &&
1116 (card.isEmpty() || (card_name == card)))
1119 pDev->setCardType (cardType);
1120 pDev->setVideoDevice (filepath);
1121 pDev->setFrontendName(card_name);
1124 pDev->setInputNames(inputs);
1126 pDev->setAudioDevices(inputs);
1127 if (cardType ==
"HDPVR")
1128 pDev->setChannelTimeout ( 15000 );
1135 minorlist[minor_num] = 1;
1147 for (
auto &
info : list)
1149 auto* pDev = pList->AddCaptureDevice();
1150 pDev->setCardType (cardType);
1151 QString guid =
info.GetGUIDString();
1152 pDev->setVideoDevice (guid);
1154 pDev->setFirewireModel(model);
1155 pDev->setDescription(
info.m_product_name);
1156 pDev->setSignalTimeout ( 2000 );
1157 pDev->setChannelTimeout ( 9000 );
QMap< int, EncoderLink * > gTVList
BackendContext * gBackendContext
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.
QString toRawString(RecordingType rectype)
Converts "rectype" into an untranslated string.
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)