10 #include <QStringList> 27 #define NUMPROGRAMLINES 52 71 kCategorySports, kCategoryTVShow };
84 const QString &sortTitle,
85 const QString &subtitle,
86 const QString &sortSubtitle,
87 const QString &description,
91 const QString &syndicatedepisode,
92 const QString &category,
95 const QString &channum,
96 const QString &chansign,
97 const QString &channame,
98 const QString &chanplaybackfilters,
100 const QString &recgroup,
101 const QString &playgroup,
103 const QString &pathname,
106 const QString &storagegroup,
108 const QString &seriesid,
109 const QString &programid,
110 const QString &inetref,
111 CategoryType catType,
117 const QDateTime &startts,
118 const QDateTime &endts,
119 const QDateTime &recstartts,
120 const QDateTime &recendts,
128 const QDate &originalAirDate,
129 const QDateTime &lastmodified,
141 uint audioproperties,
142 uint videoproperties,
144 const QString &inputname,
145 const QDateTime &bookmarkupdate);
149 const QString &sortTitle,
150 const QString &subtitle,
151 const QString &sortSubtitle,
152 const QString &description,
155 const QString &category,
158 const QString &channum,
159 const QString &chansign,
160 const QString &channame,
162 const QString &seriesid,
163 const QString &programid,
164 const QString &inetref,
166 const QDateTime &startts,
167 const QDateTime &endts,
168 const QDateTime &recstartts,
169 const QDateTime &recendts,
183 const QString &sortTitle,
184 const QString &subtitle,
185 const QString &sortSubtitle,
186 const QString &description,
187 const QString &syndicatedepisode,
188 const QString &category,
191 const QString &channum,
192 const QString &chansign,
193 const QString &channame,
194 const QString &chanplaybackfilters,
196 const QDateTime &startts,
197 const QDateTime &endts,
198 const QDateTime &recstartts,
199 const QDateTime &recendts,
201 const QString &seriesid,
202 const QString &programid,
203 const CategoryType catType,
209 const QDate &originalAirDate,
229 const QString &sortTitle,
230 const QString &subtitle,
231 const QString &sortSubtitle,
232 const QString &description,
236 const QString &category,
239 const QString &channum,
240 const QString &chansign,
241 const QString &channame,
242 const QString &chanplaybackfilters,
244 const QString &recgroup,
245 const QString &playgroup,
247 const QDateTime &startts,
248 const QDateTime &endts,
249 const QDateTime &recstartts,
250 const QDateTime &recendts,
252 const QString &seriesid,
253 const QString &programid,
254 const QString &inetref,
255 const QString &inputname);
261 const QString &title,
262 const QString &sortTitle,
263 const QString &subtitle,
264 const QString &sortSubtitle,
265 const QString &director,
266 int season,
int episode,
267 const QString &inetref,
268 uint length_in_minutes,
270 const QString &programid);
273 const QDateTime &_startts,
const QDateTime &_endts);
275 ProgramInfo(
const QString &_title,
const QString &_category,
276 const QDateTime &_startts,
const QDateTime &_endts);
278 QStringList::const_iterator end) :
280 positionMapDBReplacement(nullptr)
282 if (!FromStringList(it, end))
287 positionMapDBReplacement(nullptr)
289 QStringList::const_iterator it = list.begin();
290 if (!FromStringList(it, list.end()))
297 bool ignore_non_serialized_data =
false);
298 void ensureSortFields(
void);
300 virtual void clear(
void);
306 void ToStringList(QStringList &list)
const;
307 virtual void ToMap(
InfoMap &progMap,
308 bool showrerecord =
false,
309 uint star_range = 10)
const;
310 virtual void SubstituteMatches(QString &str);
313 bool IsSameProgram(
const ProgramInfo &other)
const;
314 bool IsDuplicateProgram(
const ProgramInfo &other)
const;
315 bool IsSameProgramAndStartTime(
const ProgramInfo &other)
const;
316 bool IsSameTitleStartTimeAndChannel(
const ProgramInfo &other)
const;
317 bool IsSameTitleTimeslotAndChannel(
const ProgramInfo &other)
const;
320 return usingProgIDAuth;
322 static void CheckProgramIDAuthorities(
void);
325 bool IsSameProgramWeakCheck(
const ProgramInfo &other)
const;
328 bool IsSameChannel(
const ProgramInfo &other)
const;
334 {
return MakeUniqueKey(chanid, recstartts); }
335 uint GetSecondsInRecording(
void)
const;
336 QString ChannelText(
const QString&)
const;
338 QString
GetBasename(
void)
const {
return pathname.section(
'/', -1); }
345 bool IsLocal(
void)
const {
return pathname.startsWith(
"/")
347 || pathname.at(1) ==
':' 350 bool IsMythStream(
void)
const {
return pathname.startsWith(
"myth://"); }
351 bool IsPathSet(
void)
const {
return GetBasename() != pathname; }
353 bool IsFileReadable(
void)
const;
382 {
return chanplaybackfilters; }
419 return ((year) ? year :
420 (originalAirDate.isValid()) ? originalAirDate.year() : 0);
428 virtual uint64_t GetFilesize(
void)
const;
433 QString GetCategoryTypeString(
void)
const;
438 {
return (
int)(stars * range_max + 0.5f); }
460 {
return inputname.isRightToLeft() ?
461 inputname.left(2) : inputname.right(2); }
470 bool IsGeneric(
void)
const;
500 QString
toString(Verbosity v = kLongDescription, QString sep =
":",
501 QString grp =
"\"")
const;
504 void SetTitle(
const QString &
t,
const QString &st =
nullptr);
505 void SetSubtitle(
const QString &st,
const QString &sst =
nullptr);
507 { programflags &= ~
FL_TYPEMASK; programflags |= ((uint32_t)
t<<20); }
508 void SetPathname(
const QString&)
const;
518 virtual void SetFilesize( uint64_t sz);
569 { positionMapDBReplacement = pmap; }
572 QString QueryBasename(
void)
const;
574 uint QueryMplexID(
void)
const;
575 QDateTime QueryBookmarkTimeStamp(
void)
const;
576 uint64_t QueryBookmark(
void)
const;
577 uint64_t QueryProgStart(
void)
const;
578 uint64_t QueryLastPlayPos(
void)
const;
579 CategoryType QueryCategoryType(
void)
const;
580 QStringList QueryDVDBookmark(
const QString &serialid)
const;
581 QStringList QueryBDBookmark(
const QString &serialid)
const;
582 bool QueryIsEditing(
void)
const;
583 bool QueryIsInUse(QStringList &byWho)
const;
584 bool QueryIsInUse(QString &byWho)
const;
585 bool QueryIsDeleteCandidate(
bool one_player_allowed =
false)
const;
588 bool QueryTuningInfo(QString &channum, QString &input)
const;
589 QString QueryInputDisplayName(
void)
const;
590 uint QueryAverageWidth(
void)
const;
591 uint QueryAverageHeight(
void)
const;
592 uint QueryAverageFrameRate(
void)
const;
593 MarkTypes QueryAverageAspectRatio(
void)
const;
594 uint32_t QueryTotalDuration(
void)
const;
595 int64_t QueryTotalFrames(
void)
const;
596 QString QueryRecordingGroup(
void)
const;
598 uint QueryTranscoderID(
void)
const;
599 uint64_t QueryLastFrameInPosMap(
void)
const;
603 virtual void SaveFilesize(uint64_t fsize);
604 void SaveBookmark(uint64_t frame);
605 void SaveDVDBookmark(
const QStringList &fields)
const;
606 void SaveBDBookmark(
const QStringList &fields)
const;
607 void SaveEditing(
bool edit);
609 void SaveWatched(
bool watchedFlag);
610 void SaveDeletePendingFlag(
bool deleteFlag);
612 void SaveAutoExpire(
AutoExpireType autoExpire,
bool updateDelete =
false);
613 void SavePreserve(
bool preserveEpisode);
614 bool SaveBasename(
const QString &basename);
616 void SaveResolution(uint64_t frame,
uint width,
uint height);
617 void SaveFrameRate(uint64_t frame,
uint framerate);
618 void SaveTotalDuration(int64_t duration);
619 void SaveTotalFrames(int64_t
frames);
620 void SaveVideoProperties(
uint mask,
uint video_property_flags);
623 void UpdateLastDelete(
bool setTime)
const;
624 void MarkAsInUse(
bool inuse, QString usedFor =
"");
625 void UpdateInUseMark(
bool force =
false);
626 void SaveSeasonEpisode(
uint seas,
uint ep);
627 void SaveInetRef(
const QString &inet);
630 QString DiscoverRecordingDirectory(
void)
const;
632 bool forceCheckLocal =
false)
const;
636 bool QueryCutList(
frm_dir_map_t &,
bool loadAutosave=
false)
const;
637 void SaveCutList(
frm_dir_map_t &,
bool isAutoSave=
false)
const;
647 int64_t min_frm = -1, int64_t max_frm = -1)
const;
651 bool QueryKeyFrameInfo(uint64_t *, uint64_t position_or_keyframe,
654 const char *from_filemarkup_desc,
655 const char *from_recordedseek_asc,
656 const char *from_recordedseek_desc)
const;
657 bool QueryKeyFramePosition(uint64_t *, uint64_t keyframe,
658 bool backwards)
const;
659 bool QueryPositionKeyFrame(uint64_t *, uint64_t position,
660 bool backwards)
const;
661 bool QueryKeyFrameDuration(uint64_t *, uint64_t keyframe,
662 bool backwards)
const;
663 bool QueryDurationKeyFrame(uint64_t *, uint64_t duration,
664 bool backwards)
const;
674 :
type(
t), frame(f), data(
d), isDataNull(n) {}
676 :
type(-1), frame(0), data(0), isDataNull(
true) {}
678 void QueryMarkup(QVector<MarkupEntry> &mapMark,
679 QVector<MarkupEntry> &mapSeek)
const;
680 void SaveMarkup(
const QVector<MarkupEntry> &mapMark,
681 const QVector<MarkupEntry> &mapSeek)
const;
684 void SendUpdateEvent(
void);
686 void SendAddedEvent(
void)
const;
688 void SendDeletedEvent(
void)
const;
691 static QString i18n(
const QString&);
693 static QString MakeUniqueKey(
uint chanid,
const QDateTime &recstartts);
694 static bool ExtractKey(
const QString &uniquekey,
695 uint &chanid, QDateTime &recstartts);
696 static bool ExtractKeyFromPathname(
697 const QString &pathname,
uint &chanid, QDateTime &recstartts);
698 static bool QueryKeyFromPathname(
699 const QString &pathname,
uint &chanid, QDateTime &recstartts);
700 static bool QueryRecordedIdFromPathname(
const QString &pathname,
703 static QString QueryRecordingGroupPassword(
const QString &group);
704 static uint64_t QueryBookmark(
uint chanid,
const QDateTime &recstartts);
705 static QMap<QString,uint32_t> QueryInUseMap(
void);
706 static QMap<QString,bool> QueryJobsRunning(
int type);
711 bool merge =
false)
const;
713 int64_t min_frm = -1, int64_t max_frm = -1)
const;
715 int64_t min_frm = -1, int64_t max_frm = -1)
const;
719 QString CreateRecordBasename(
const QString &ext)
const;
721 bool LoadProgramFromRecorded(
722 const uint chanid,
const QDateTime &recstarttime);
724 bool FromStringList(QStringList::const_iterator &it,
725 QStringList::const_iterator end);
727 static void QueryMarkupMap(
728 const QString &video_pathname,
730 static void QueryMarkupMap(
731 uint chanid,
const QDateTime &recstartts,
734 static int InitStatics(
void);
828 const QString &where,
829 const QString &groupBy,
830 const QString &orderBy,
850 const uint chanid,
const QDateTime &starttime);
867 bool possiblyInProgressRecordingsOnly,
868 const QMap<QString,uint32_t> &inUseMap,
869 const QMap<QString,bool> &isJobRunning,
870 const QMap<QString, ProgramInfo*> &recMap,
872 const QString &sortBy =
"");
875 template<
typename TYPE>
879 QString altTable =
"",
883 hasConflicts =
false;
889 hasConflicts = slist[0].toInt();
891 QStringList::const_iterator sit = slist.begin()+2;
892 while (sit != slist.end())
894 TYPE *p =
new TYPE(sit, slist.end());
897 if (!p->HasPathname() && !p->GetChanID())
905 if (destination.
size() != slist[1].toUInt())
924 bool *hasConflicts =
nullptr,
925 std::vector<ProgramInfo> *list =
nullptr);
934 QMap<MarkTypes,frm_pos_map_t>
map;
944 #endif // MYTHPROGRAM_H_ MPUBLIC bool LoadFromProgram(ProgramList &destination, const QString &where, const QString &groupBy, const QString &orderBy, const MSqlBindings &bindings, const ProgramList &schedList)
void SetStorageGroup(const QString &group)
float GetStars(void) const
#define kAudioPropertyMask
ProgramInfoType GetProgramInfoType(void) const
bool IsPreserved(void) const
uint GetInputID(void) const
void SetAllowLastPlayPos(bool allow)
If "ignore" is true QueryLastPlayPos() will return 0, otherwise QueryLastPlayPos() will return the la...
RecordingDupMethodType GetDuplicateCheckMethod(void) const
What should be compared to determine if two programs are the same?
QDateTime GetBookmarkUpdate(void) const
QString GetChannelName(void) const
This is the channel name in the local market, i.e.
VERBOSE_PREAMBLE Most true
void SetEditing(bool editing)
QMap< MarkTypes, frm_pos_map_t > map
bool IsReactivated(void) const
void SetScheduledStartTime(const QDateTime &dt)
QString toString(MarkTypes type)
void SetProgramInfoType(ProgramInfoType t)
void SetCategoryType(const CategoryType type)
void SetIgnoreBookmark(bool ignore)
If "ignore" is true GetBookmark() will return 0, otherwise GetBookmark() will return the bookmark pos...
MPUBLIC QString format_season_and_episode(int seasEp, int digits=-1)
uint GetSourceID(void) const
enum RecordingDupInTypes RecordingDupInType
void SetRecordingPriority2(int priority)
QSqlQuery wrapper that fetches a DB connection from the connection pool.
bool IsVideoDVD(void) const
uint GetParentRecordingRuleID(void) const
QString GetRecordingEndTime(MythDate::Format fmt) const
Approximate time the recording should have ended, did end, or is intended to end (with formatting).
QString GetTitle(void) const
void SetRecordingRuleID(uint id)
void SetSourceID(uint id)
bool IsCommercialFree(void) const
static QStringList LoadFromScheduler(const QString &altTable, int recordid)
QMap< uint64_t, MarkTypes > frm_dir_map_t
Frame # -> Mark map.
AutoDeleteDeque< ProgramInfo * > ProgramList
ProgramInfo(const QStringList &list)
void SetReactivated(bool reactivate)
int GetRecordingPriority(void) const
#define kAudioPropertyOffset
void SetFlagging(bool flagging)
uint GetStars(uint range_max) const
QString GetChanNum(void) const
This is the channel "number", in the form 1, 1_2, 1-2, 1#1, etc.
Q_DECLARE_METATYPE(GrabberScript *)
uint GetAudioProperties(void) const
QString GetChannelPlaybackFilters(void) const
bool IsBookmarkSet(void) const
uint GetVideoProperties(void) const
QString GetInetRef(void) const
uint16_t properties
SubtitleType,VideoProperty,AudioProperty.
QDate GetOriginalAirDate(void) const
MPUBLIC bool LoadFromRecorded(ProgramList &destination, bool possiblyInProgressRecordingsOnly, const QMap< QString, uint32_t > &inUseMap, const QMap< QString, bool > &isJobRunning, const QMap< QString, ProgramInfo * > &recMap, int sort=0, const QString &sortBy="")
QString GetStorageGroup(void) const
QDateTime GetScheduledStartTime(void) const
The scheduled start time of program.
QString MakeUniqueKey(void) const
Creates a unique string that can be used to identify an existing recording.
static bool usingProgIDAuth
Holds information on recordings and videos.
MPUBLIC bool GetNextRecordingList(QDateTime &nextRecordingStart, bool *hasConflicts=nullptr, std::vector< ProgramInfo > *list=nullptr)
void SetScheduledEndTime(const QDateTime &dt)
void ClearMarkupFlag(MarkTypes type) const
bool IsWatched(void) const
QString GetChannelSchedulingID(void) const
This is the unique programming identifier of a channel.
uint32_t GetProgramFlags(void) const
static void clear(SettingsMap &cache, SettingsMap &overrides, const QString &myKey)
QHash< QString, QString > InfoMap
bool IsRecording(void) const
QString GetDescription(void) const
MPUBLIC ProgramInfo * LoadProgramFromProgram(const uint chanid, const QDateTime &starttime)
QString GetBasename(void) const
static const uint16_t * d
uint32_t programflags
ProgramFlag.
QString GetScheduledEndTime(MythDate::Format fmt) const
The scheduled end time of the program (with formatting).
bool IsVideoBD(void) const
#define kSubtitlePropertyMask
QString GetSortSubtitle(void) const
bool HasCutlist(void) const
QString GetShortInputName(void) const
QString GetSubtitle(void) const
bool IsRepeat(void) const
float stars
Rating, range [0..1].
AvailableStatusType GetAvailableStatus(void) const
QString GetRecordingStartTime(MythDate::Format fmt) const
Approximate time the recording started (with formatting).
QString GetRecordingGroup(void) const
bool IsAutoExpirable(void) const
uint GetRecordingID(void) const
uint GetSeason(void) const
enum TranscodingStatuses TranscodingStatus
static bool UsingProgramIDAuthority(void)
void SetRecordingStatus(RecStatus::Type status)
void SetSeriesID(const QString &id)
TODO Move to RecordingInfo.
bool IsDeletePending(void) const
void ClearInputName(void)
QString GetLastModifiedTime(MythDate::Format fmt) const
QDateTime GetScheduledEndTime(void) const
The scheduled end time of the program.
MPUBLIC QString myth_category_type_to_string(ProgramInfo::CategoryType category_type)
MPUBLIC bool LoadFromOldRecorded(ProgramList &destination, const QString &sql, const MSqlBindings &bindings)
virtual void SetRecordingID(uint _recordedid)
enum CommFlagStatuses CommFlagStatus
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
QString GetPlaybackGroup(void) const
bool IsVideoFile(void) const
#define kVideoPropertyOffset
QString GetSeriesID(void) const
void SetCategory(const QString &cat)
QString chanplaybackfilters
uint GetYearOfInitialRelease(void) const
enum AvailableStatusTypes AvailableStatusType
void SetChanID(uint _chanid)
#define kVideoPropertyMask
uint GetSubtitleType(void) const
static QMutex staticDataLock
RecStatus::Type GetRecordingStatus(void) const
bool IsSameRecording(const ProgramInfo &other) const
uint GetEpisodeTotal(void) const
PMapDBReplacement * positionMapDBReplacement
int GetRecordingPriority2(void) const
QString GetSortTitle(void) const
static const QString kFromRecordedQuery
void SetPositionMapDBReplacement(PMapDBReplacement *pmap)
bool operator==(const DialogCode &a, const QDialog::DialogCode &b)
RecordingType GetRecordingRuleType(void) const
void SetHostname(const QString &host)
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
QString GetPlaybackURL(ProgramInfo *pginfo, bool storePath)
enum AutoExpireTypes AutoExpireType
void SetRecordingRuleType(RecordingType type)
uint GetRecordingRuleID(void) const
bool LoadFromScheduler(AutoDeleteDeque< TYPE * > &destination, bool &hasConflicts, QString altTable="", int recordid=-1)
QString GetProgramID(void) const
uint GetFindID(void) const
void SetProgramID(const QString &id)
void SetRecordingStartTime(const QDateTime &dt)
QDateTime GetRecordingStartTime(void) const
Approximate time the recording started.
void SetRecordingEndTime(const QDateTime &dt)
QDateTime GetRecordingEndTime(void) const
Approximate time the recording should have ended, did end, or is intended to end.
QDateTime GetLastModifiedTime(void) const
QString GetHostname(void) const
static ProgramInfoUpdater * updater
QString GetInputName(void) const
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
MarkupEntry(int t, uint64_t f, uint64_t d, bool n)
bool IsMythStream(void) const
void SetIgnoreProgStart(bool ignore)
If "ignore" is true QueryProgStart() will return 0, otherwise QueryProgStart() will return the progst...
QString GetCategory(void) const
QMap< long long, long long > frm_pos_map_t
Frame # -> File offset map.
RecordingDupInType GetDuplicateCheckSource(void) const
Where should we check for duplicates?
#define kSubtitlePropertyOffset
void SetRecordingGroup(const QString &group)
void SetRecordingPriority(int priority)
QString GetScheduledStartTime(MythDate::Format fmt) const
The scheduled start time of program (with formatting).
QString GetPathname(void) const
CategoryType GetCategoryType(void) const
bool IsInUsePlaying(void) const
bool HasPathname(void) const
MPUBLIC ProgramInfo::CategoryType string_to_myth_category_type(const QString &type)
ProgramInfo(QStringList::const_iterator &it, QStringList::const_iterator end)
enum MythDate::Formats Format
QString syndicatedepisode
uint GetEpisode(void) const
bool IsDuplicate(void) const
bool IsPathSet(void) const
void SetPlaybackGroup(const QString &group)
int pginfo_init_statics()