MythTV master
programinfo.h
Go to the documentation of this file.
1// -*- Mode: c++ -*-
2
3#ifndef MYTHPROGRAM_H_
4#define MYTHPROGRAM_H_
5
6// ANSI C
7#include <cstdint> // for [u]int[32,64]_t
8#include <utility>
9#include <vector> // for GetNextRecordingList
10
11#include <QStringList>
12#include <QDateTime>
13
14// MythTV headers
20
21#include "mythtvexp.h"
22#include "programtypes.h"
23#include "recordingstatus.h"
24#include "recordingtypes.h"
25
26/* If NUMPROGRAMLINES gets updated, then MYTH_PROTO_VERSION and MYTH_PROTO_TOKEN
27 in mythversion.h need to be bumped, and also follow the instructions in
28 myth_version.h about other changes needed when the network protocol changes.
29*/
30static constexpr int8_t NUMPROGRAMLINES { 52 };
31
32class ProgramInfo;
34
65class MSqlQuery;
68
70{
71 friend int pginfo_init_statics(void);
72 friend class TestRecordingExtender;
73 private:
74 // Must match the number of items in CategoryType below
75 static const std::array<const QString,5> kCatName;
76 public:
77 static constexpr int kNumCatTypes = 5;
78 enum CategoryType : std::uint8_t
79 { kCategoryNone, kCategoryMovie, kCategorySeries,
80 kCategorySports, kCategoryTVShow };
81
83 ProgramInfo(void) { ensureSortFields(); }
85 ProgramInfo(const ProgramInfo &other);
87 explicit ProgramInfo(uint recordedid);
89 ProgramInfo(uint chanid, const QDateTime &recstartts);
91 ProgramInfo(uint recordedid,
92 QString title,
93 QString sortTitle,
94 QString subtitle,
95 QString sortSubtitle,
96 QString description,
97 uint season,
98 uint episode,
99 uint totalepisodes,
100 QString syndicatedepisode,
101 QString category,
102
103 uint chanid,
104 QString channum,
105 QString chansign,
106 QString channame,
107 QString chanplaybackfilters,
108
109 QString recgroup,
110 QString playgroup,
111
112 const QString &pathname,
113
114 QString hostname,
115 QString storagegroup,
116
117 QString seriesid,
118 QString programid,
119 QString inetref,
120 CategoryType catType,
121
122 int recpriority,
123
124 uint64_t filesize,
125
126 QDateTime startts,
127 QDateTime endts,
128 QDateTime recstartts,
129 QDateTime recendts,
130
131 float stars,
132
133 uint year,
134 uint partnumber,
135 uint parttotal,
136
137 QDate originalAirDate,
138 QDateTime lastmodified,
139
140 RecStatus::Type recstatus,
141
142 uint recordid,
143
144 RecordingDupInType dupin,
145 RecordingDupMethodType dupmethod,
146
147 uint findid,
148
149 uint programflags,
150 uint audioproperties,
151 uint videoproperties,
152 uint subtitleType,
153 QString inputname,
154 QDateTime bookmarkupdate);
155
157 ProgramInfo(QString title,
158 QString sortTitle,
159 QString subtitle,
160 QString sortSubtitle,
161 QString description,
162 uint season,
163 uint episode,
164 QString category,
165
166 uint chanid,
167 QString channum,
168 QString chansign,
169 QString channame,
170
171 QString seriesid,
172 QString programid,
173 QString inetref,
174
175 QDateTime startts,
176 QDateTime endts,
177 QDateTime recstartts,
178 QDateTime recendts,
179
180 RecStatus::Type recstatus,
181
182 uint recordid,
183
184 RecordingType rectype,
185
186 uint findid,
187
188 bool duplicate);
189
191 ProgramInfo(QString title,
192 QString sortTitle,
193 QString subtitle,
194 QString sortSubtitle,
195 QString description,
196 QString syndicatedepisode,
197 QString category,
198
199 uint chanid,
200 QString channum,
201 QString chansign,
202 QString channame,
203 QString chanplaybackfilters,
204
205 QDateTime startts,
206 QDateTime endts,
207 QDateTime recstartts,
208 QDateTime recendts,
209
210 QString seriesid,
211 QString programid,
212 CategoryType catType,
213
214 float stars,
215 uint year,
216 uint partnumber,
217 uint parttotal,
218 QDate originalAirDate,
219 RecStatus::Type recstatus,
220 uint recordid,
221 RecordingType rectype,
222 uint findid,
223
224 bool commfree,
225 bool repeat,
226
227 uint videoproperties,
228 uint audioproperties,
229 uint subtitletype,
230
231 uint season,
232 uint episode,
233 uint totalepisodes,
234
235 const ProgramList &schedList);
237 ProgramInfo(QString title,
238 QString sortTitle,
239 QString subtitle,
240 QString sortSubtitle,
241 QString description,
242 uint season,
243 uint episode,
244 uint totalepisodes,
245 QString category,
246
247 uint chanid,
248 QString channum,
249 QString chansign,
250 QString channame,
251 QString chanplaybackfilters,
252
253 QString recgroup,
254 QString playgroup,
255
256 QDateTime startts,
257 QDateTime endts,
258 QDateTime recstartts,
259 QDateTime recendts,
260
261 QString seriesid,
262 QString programid,
263 QString inetref,
264 QString inputname);
266 explicit ProgramInfo(const QString &pathname);
268 ProgramInfo(const QString &pathname,
269 const QString &plot,
270 const QString &title,
271 const QString &sortTitle,
272 const QString &subtitle,
273 const QString &sortSubtitle,
274 const QString &director,
275 int season, int episode,
276 const QString &inetref,
277 std::chrono::minutes length_in_minutes,
278 uint year,
279 const QString &programid);
281 ProgramInfo(const QString &_title, uint _chanid,
282 const QDateTime &_startts, const QDateTime &_endts);
284 ProgramInfo(QString _title, QString _category,
285 QDateTime _startts, QDateTime _endts)
286 : m_title(std::move(_title)), m_category(std::move(_category)),
287 m_startTs(std::move(_startts)), m_endTs(std::move(_endts))
288 { ensureSortFields(); }
289 ProgramInfo(QStringList::const_iterator &it,
290 const QStringList::const_iterator& end)
291 {
292 if (!FromStringList(it, end))
294 }
295 explicit ProgramInfo(const QStringList &list)
296 {
297 QStringList::const_iterator it = list.begin();
298 if (!FromStringList(it, list.end()))
300 }
301
302 bool operator==(const ProgramInfo& rhs);
303 ProgramInfo &operator=(const ProgramInfo &other);
304 virtual void clone(const ProgramInfo &other,
305 bool ignore_non_serialized_data = false);
306 void ensureSortFields(void);
307
308 virtual void clear(void);
309
310 // Destructor
311 virtual ~ProgramInfo() = default;
312
313 // Serializers
314 void ToStringList(QStringList &list) const;
315 virtual void ToMap(InfoMap &progMap,
316 bool showrerecord = false,
317 uint star_range = 10,
318 uint date_format = 0) const;
319 virtual void SubstituteMatches(QString &str);
320
321 // Used for scheduling recordings
322 bool IsSameProgram(const ProgramInfo &other) const; // Exact same program
323 bool IsDuplicateProgram(const ProgramInfo &other) const; // Is this program considered a duplicate according to rule type and dup method (scheduler only)
324 bool IsSameProgramAndStartTime(const ProgramInfo &other) const; // Exact same program and same starttime, Any channel
325 bool IsSameTitleStartTimeAndChannel(const ProgramInfo &other) const; // Same title, starttime and channel
326 bool IsSameTitleTimeslotAndChannel(const ProgramInfo &other) const;//sched only - Same title, starttime, endtime and channel
327 static bool UsingProgramIDAuthority(void)
328 {
329 return s_usingProgIDAuth;
330 };
331 static void CheckProgramIDAuthorities(void);//sched only
332
333 // Used for extending scheduled recordings
334 bool IsSameProgramWeakCheck(const ProgramInfo &other) const;
335 bool IsSameRecording(const ProgramInfo &other) const
336 { return m_chanId == other.m_chanId && m_recStartTs == other.m_recStartTs; }
337 bool IsSameChannel(const ProgramInfo &other) const;
338
339 // Quick gets
342 QString MakeUniqueKey(void) const
343 { return MakeUniqueKey(m_chanId, m_recStartTs); }
344 std::chrono::seconds GetSecondsInRecording(void) const;
345 QString ChannelText(const QString& format) const;
346 QString GetPathname(void) const { return m_pathname; }
347 QString GetBasename(void) const { return m_pathname.section('/', -1); }
348 bool IsVideoFile(void) const
349 { return GetProgramInfoType() == kProgramInfoTypeVideoFile; }
350 bool IsVideoDVD(void) const
351 { return GetProgramInfoType() == kProgramInfoTypeVideoDVD; }
352 bool IsVideoBD(void) const
353 { return GetProgramInfoType() == kProgramInfoTypeVideoBD; }
354 bool IsLocal(void) const { return m_pathname.startsWith("/")
355#ifdef _WIN32
356 || m_pathname.at(1) == ':'
357#endif
358 ; }
359 bool IsMythStream(void) const { return m_pathname.startsWith("myth://"); }
360 bool IsPathSet(void) const { return GetBasename() != m_pathname; }
361 bool HasPathname(void) const { return !GetPathname().isEmpty(); }
362 bool IsFileReadable(void);
363
364 QString GetTitle(void) const { return m_title; }
365 QString GetSortTitle(void) const { return m_sortTitle; }
366 QString GetSubtitle(void) const { return m_subtitle; }
367 QString GetSortSubtitle(void) const { return m_sortSubtitle; }
368 QString GetDescription(void) const { return m_description; }
369 uint GetSeason(void) const { return m_season; }
370 uint GetEpisode(void) const { return m_episode; }
371 uint GetEpisodeTotal(void) const { return m_totalEpisodes; }
372 QString GetCategory(void) const { return m_category; }
375 uint GetChanID(void) const { return m_chanId; }
379 QString GetChanNum(void) const { return m_chanStr; }
386 QString GetChannelSchedulingID(void) const { return m_chanSign; }
389 QString GetChannelName(void) const { return m_chanName; }
390 QString GetChannelPlaybackFilters(void) const
391 { return m_chanPlaybackFilters; }
393 QDateTime GetScheduledStartTime(void) const { return m_startTs; }
396 {
397 return MythDate::toString(m_startTs, fmt);
398 }
400 QDateTime GetScheduledEndTime(void) const { return m_endTs; }
403 {
404 return MythDate::toString(m_endTs, fmt);
405 }
407 QDateTime GetRecordingStartTime(void) const { return m_recStartTs; }
410 {
411 return MythDate::toString(m_recStartTs, fmt);
412 }
415 QDateTime GetRecordingEndTime(void) const { return m_recEndTs; }
419 {
420 return MythDate::toString(m_recEndTs, fmt);
421 }
422 QString GetRecordingGroup(void) const { return m_recGroup; }
423 QString GetPlaybackGroup(void) const { return m_playGroup; }
424 QString GetHostname(void) const { return m_hostname; }
425 QString GetStorageGroup(void) const { return m_storageGroup; }
427 {
428 if (m_year > 0)
429 return m_year;
430 if (m_originalAirDate.isValid())
431 return m_originalAirDate.year();
432 return 0;
433 }
434 QDate GetOriginalAirDate(void) const { return m_originalAirDate; }
435 QDateTime GetLastModifiedTime(void) const { return m_lastModified; }
437 {
438 return MythDate::toString(m_lastModified, fmt);
439 }
440 virtual uint64_t GetFilesize(void) const; // TODO Remove
441 QString GetSeriesID(void) const { return m_seriesId; }
442 QString GetProgramID(void) const { return m_programId; }
443 QString GetInetRef(void) const { return m_inetRef; }
444 CategoryType GetCategoryType(void) const { return m_catType; }
445 QString GetCategoryTypeString(void) const;
446 int GetRecordingPriority(void) const { return m_recPriority; }
447 int GetRecordingPriority2(void) const { return m_recPriority2; }
448 float GetStars(void) const { return m_stars; }
449 uint GetStars(uint range_max) const
450 { return lroundf(m_stars * range_max); }
451
452 uint GetRecordingID(void) const { return m_recordedId; }
454 { return (RecStatus::Type)m_recStatus; }
455 uint GetRecordingRuleID(void) const { return m_recordId; }
456 uint GetParentRecordingRuleID(void) const { return m_parentId; }
458 { return (RecordingType)m_recType; }
459
462 { return (RecordingDupInType)m_dupIn; }
463
466 { return (RecordingDupMethodType)m_dupMethod; }
467
468 uint GetSourceID(void) const { return m_sourceId; }
469 uint GetInputID(void) const { return m_inputId; }
470 QString GetInputName(void) const { return m_inputName; }
471 QString GetShortInputName(void) const;
472 void ClearInputName(void) { m_inputName.clear(); }
473
474 uint GetFindID(void) const { return m_findId; }
475
476 uint32_t GetProgramFlags(void) const { return m_programFlags; }
477 QString GetProgramFlagNames(void) const;
479 { return (ProgramInfoType)((m_programFlags & FL_TYPEMASK) >> 20); }
480 QDateTime GetBookmarkUpdate(void) const { return m_bookmarkUpdate; }
481 QString GetRecTypeStatus(bool showrerecord) const;
482 bool IsGeneric(void) const;
483 bool IsInUsePlaying(void) const { return (m_programFlags & FL_INUSEPLAYING) != 0U;}
484 bool IsCommercialFree(void) const { return (m_programFlags & FL_CHANCOMMFREE) != 0U;}
485 bool IsCommercialFlagged(void) const { return (m_programFlags & FL_COMMFLAG) != 0U;}
486 bool HasCutlist(void) const { return (m_programFlags & FL_CUTLIST) != 0U; }
487 bool IsBookmarkSet(void) const { return (m_programFlags & FL_BOOKMARK) != 0U; }
488 bool IsLastPlaySet(void) const { return (m_programFlags & FL_LASTPLAYPOS) != 0U; }
489 bool IsWatched(void) const { return (m_programFlags & FL_WATCHED) != 0U; }
490 bool IsAutoExpirable(void) const { return (m_programFlags & FL_AUTOEXP) != 0U; }
491 bool IsPreserved(void) const { return (m_programFlags & FL_PRESERVED) != 0U; }
492 bool IsVideo(void) const { return (m_programFlags & FL_TYPEMASK) != 0U; }
493 bool IsRecording(void) const { return !IsVideo(); }
494 bool IsRepeat(void) const { return (m_programFlags & FL_REPEAT) != 0U; }
495 bool IsDuplicate(void) const { return (m_programFlags & FL_DUPLICATE) != 0U; }
496 bool IsReactivated(void) const { return (m_programFlags & FL_REACTIVATE) != 0U; }
497 bool IsDeletePending(void) const
498 { return (m_programFlags & FL_DELETEPENDING) != 0U; }
499
500 uint GetSubtitleType(void) const { return m_subtitleProperties; }
501 QString GetSubtitleTypeNames(void) const;
502 uint GetVideoProperties(void) const { return m_videoProperties; }
503 QString GetVideoPropertyNames(void) const;
504 uint GetAudioProperties(void) const { return m_audioProperties; }
505 QString GetAudioPropertyNames(void) const;
506
507 static uint SubtitleTypesFromNames(const QString & names);
508 static uint VideoPropertiesFromNames(const QString & names);
509 static uint AudioPropertiesFromNames(const QString & names);
510
511 void ProgramFlagsFromNames(const QString & names);
512
513 enum Verbosity : std::uint8_t
514 {
519 };
520 QString toString(Verbosity v = kLongDescription, const QString& sep = ":",
521 const QString& grp = "\"") const;
522
523 // Quick sets
524 void SetTitle(const QString &t, const QString &st = nullptr);
525 void SetSubtitle(const QString &st, const QString &sst = nullptr);
527 { m_programFlags &= ~FL_TYPEMASK; m_programFlags |= ((uint32_t)t<<20); }
528 void SetPathname(const QString& pn);
529 void SetChanID(uint _chanid) { m_chanId = _chanid; }
530 void SetScheduledStartTime(const QDateTime &dt) { m_startTs = dt; }
531 void SetScheduledEndTime( const QDateTime &dt) { m_endTs = dt; }
532 void SetRecordingStartTime(const QDateTime &dt) { m_recStartTs = dt; }
533 void SetRecordingEndTime( const QDateTime &dt) { m_recEndTs = dt; }
534 void SetRecordingGroup(const QString &group) { m_recGroup = group; }
535 void SetPlaybackGroup( const QString &group) { m_playGroup = group; }
536 void SetHostname( const QString &host) { m_hostname = host; }
537 void SetStorageGroup( const QString &group) { m_storageGroup = group; }
538 virtual void SetFilesize( uint64_t sz);
539 void SetSeriesID( const QString &id) { m_seriesId = id; }
540 void SetProgramID( const QString &id) { m_programId = id; }
541 void SetCategory( const QString &cat) { m_category = cat; }
542 void SetCategoryType( const CategoryType type) { m_catType = type; }
543 void SetRecordingPriority(int priority) { m_recPriority = priority; }
544 void SetRecordingPriority2(int priority) { m_recPriority2 = priority; }
545 void SetRecordingRuleID(uint id) { m_recordId = id; }
546 void SetSourceID(uint id) { m_sourceId = id; }
547 void SetInputID(uint id) { m_inputId = id; }
548 void SetReactivated(bool reactivate)
549 {
550 m_programFlags &= ~FL_REACTIVATE;
551 m_programFlags |= (reactivate) ? FL_REACTIVATE : FL_NONE;
552 }
553 void SetEditing(bool editing)
554 {
555 m_programFlags &= ~FL_EDITING;
556 m_programFlags |= (editing) ? FL_EDITING : FL_NONE;
557 }
558 void SetFlagging(bool flagging)
559 {
560 m_programFlags &= ~FL_COMMFLAG;
561 m_programFlags |= (flagging) ? FL_COMMFLAG : FL_NONE;
562 }
565 void SetIgnoreBookmark(bool ignore)
566 {
567 m_programFlags &= ~FL_IGNOREBOOKMARK;
568 m_programFlags |= (ignore) ? FL_IGNOREBOOKMARK : FL_NONE;
569 }
572 void SetIgnoreProgStart(bool ignore)
573 {
574 m_programFlags &= ~FL_IGNOREPROGSTART;
575 m_programFlags |= (ignore) ? FL_IGNOREPROGSTART : FL_NONE;
576 }
580 void SetIgnoreLastPlayPos(bool ignore)
581 {
582 m_programFlags &= ~FL_IGNORELASTPLAYPOS;
583 m_programFlags |= (ignore) ? FL_IGNORELASTPLAYPOS : FL_NONE;
584 }
585 virtual void SetRecordingID(uint _recordedid)
586 { m_recordedId = _recordedid; }
587 void SetRecordingStatus(RecStatus::Type status) { m_recStatus = status; }
590 { m_positionMapDBReplacement = pmap; }
591
592 void CalculateRecordedProgress();
593 uint GetRecordedPercent() const { return m_recordedPercent; }
594 void CalculateWatchedProgress(uint64_t pos);
595 uint GetWatchedPercent() const { return m_watchedPercent; }
596 void SetWatchedPercent(uint progress) { m_watchedPercent = progress; }
597 void CalculateProgress(uint64_t pos);
598
599 // Slow DB gets
600 QString QueryBasename(void) const;
601// uint64_t QueryFilesize(void) const; // TODO Remove
602 uint QueryMplexID(void) const;
603 QDateTime QueryBookmarkTimeStamp(void) const;
604 uint64_t QueryBookmark(void) const;
605 uint64_t QueryProgStart(void) const;
606 uint64_t QueryLastPlayPos(void) const;
607 uint64_t QueryStartMark(void) const;
608 CategoryType QueryCategoryType(void) const;
609 QStringList QueryDVDBookmark(const QString &serialid) const;
610 QStringList QueryBDBookmark(const QString &serialid) const;
611 bool QueryIsEditing(void) const;
612 bool QueryIsInUse(QStringList &byWho) const;
613 bool QueryIsInUse(QString &byWho) const;
614 bool QueryIsDeleteCandidate(bool one_playback_allowed = false) const;
615 AutoExpireType QueryAutoExpire(void) const;
616 TranscodingStatus QueryTranscodeStatus(void) const;
617 bool QueryTuningInfo(QString &channum, QString &input) const;
618 QString QueryInputDisplayName(void) const;
619 uint QueryAverageWidth(void) const;
620 uint QueryAverageHeight(void) const;
621 uint QueryAverageFrameRate(void) const;
622 MarkTypes QueryAverageAspectRatio(void) const;
623 bool QueryAverageScanProgressive(void) const;
624 std::chrono::milliseconds QueryTotalDuration(void) const;
625 int64_t QueryTotalFrames(void) const;
626 QString QueryRecordingGroup(void) const;
627 bool QueryMarkupFlag(MarkTypes type) const;
628 uint QueryTranscoderID(void) const;
629 uint64_t QueryLastFrameInPosMap(void) const;
630 bool Reload(void);
631
632 // Slow DB sets
633 virtual void SaveFilesize(uint64_t fsize);
634 void SaveLastPlayPos(uint64_t frame);
635 void SaveBookmark(uint64_t frame);
636 static void SaveDVDBookmark(const QStringList &fields) ;
637 static void SaveBDBookmark(const QStringList &fields) ;
638 void SaveEditing(bool edit);
639 void SaveTranscodeStatus(TranscodingStatus trans);
640 void SaveWatched(bool watchedFlag);
641 void SaveDeletePendingFlag(bool deleteFlag);
642 void SaveCommFlagged(CommFlagStatus flag); // 1 = flagged, 2 = processing
643 void SaveAutoExpire(AutoExpireType autoExpire, bool updateDelete = false);
644 void SavePreserve(bool preserveEpisode);
645 bool SaveBasename(const QString &basename);
646 void SaveAspect(uint64_t frame, MarkTypes type, uint customAspect);
647 void SaveResolution(uint64_t frame, uint width, uint height);
648 void SaveFrameRate(uint64_t frame, uint framerate);
649 void SaveVideoScanType(uint64_t frame, bool progressive);
650 void SaveTotalDuration(std::chrono::milliseconds duration);
651 void SaveTotalFrames(int64_t frames);
652 void SaveVideoProperties(uint mask, uint video_property_flags);
653 void SaveMarkupFlag(MarkTypes type) const;
654 void ClearMarkupFlag(MarkTypes type) const { ClearMarkupMap(type); }
655 void UpdateLastDelete(bool setTime) const;
656 void MarkAsInUse(bool inuse, const QString& usedFor = "");
657 void UpdateInUseMark(bool force = false);
658 void SaveSeasonEpisode(uint seas, uint ep);
659 void SaveInetRef(const QString &inet);
660
661 // Extremely slow functions that cannot be called from the UI thread.
662 QString DiscoverRecordingDirectory(void);
663 QString GetPlaybackURL(bool checkMaster = false,
664 bool forceCheckLocal = false);
665 ProgramInfoType DiscoverProgramInfoType(void) const;
666
667 // Edit flagging map
668 bool QueryCutList(frm_dir_map_t &delMap, bool loadAutosave=false) const;
669 void SaveCutList(frm_dir_map_t &delMap, bool isAutoSave=false) const;
670
671 // Commercial flagging map
672 void QueryCommBreakList(frm_dir_map_t &frames) const;
673 void SaveCommBreakList(frm_dir_map_t &frames) const;
674
675 // Keyframe positions map
676 void QueryPositionMap(frm_pos_map_t &posMap, MarkTypes type) const;
677 void ClearPositionMap(MarkTypes type) const;
678 void SavePositionMap(frm_pos_map_t &posMap, MarkTypes type,
679 int64_t min_frame = -1, int64_t max_frame = -1) const;
680 void SavePositionMapDelta(frm_pos_map_t &posMap, MarkTypes type) const;
681
682 // Get position/duration for keyframe and vice versa
683 bool QueryKeyFrameInfo(uint64_t *result, uint64_t position_or_keyframe,
684 bool backwards,
685 MarkTypes type, const char *from_filemarkup_asc,
686 const char *from_filemarkup_desc,
687 const char *from_recordedseek_asc,
688 const char *from_recordedseek_desc) const;
689 bool QueryKeyFramePosition(uint64_t *position, uint64_t keyframe,
690 bool backwards) const;
691 bool QueryPositionKeyFrame(uint64_t *keyframe, uint64_t position,
692 bool backwards) const;
693 bool QueryKeyFrameDuration(uint64_t *duration, uint64_t keyframe,
694 bool backwards) const;
695 bool QueryDurationKeyFrame(uint64_t *keyframe, uint64_t duration,
696 bool backwards) const;
697
698 // Get/set all markup
700 {
701 int type { -1 }; // MarkTypes
702 uint64_t frame { 0 };
703 uint64_t data { 0 };
704 bool isDataNull { true };
705 MarkupEntry(int t, uint64_t f, uint64_t d, bool n)
706 : type(t), frame(f), data(d), isDataNull(n) {}
707 MarkupEntry(void) = default;
708 };
709 void QueryMarkup(QVector<MarkupEntry> &mapMark,
710 QVector<MarkupEntry> &mapSeek) const;
711 void SaveMarkup(const QVector<MarkupEntry> &mapMark,
712 const QVector<MarkupEntry> &mapSeek) const;
713
715 void SendUpdateEvent(void) const;
717 void SendAddedEvent(void) const;
719 void SendDeletedEvent(void) const;
720
722 static QString i18n(const QString &msg);
723
724 static QString MakeUniqueKey(uint chanid, const QDateTime &recstartts);
725 static bool ExtractKey(const QString &uniquekey,
726 uint &chanid, QDateTime &recstartts);
727 static bool ExtractKeyFromPathname(
728 const QString &pathname, uint &chanid, QDateTime &recstartts);
729 static bool QueryKeyFromPathname(
730 const QString &pathname, uint &chanid, QDateTime &recstartts);
731 static bool QueryRecordedIdFromPathname(const QString &pathname,
732 uint &recordedid);
733
734 static QString QueryRecordingGroupPassword(const QString &group);
735 static uint64_t QueryBookmark(uint chanid, const QDateTime &recstartts);
736 static QMap<QString,uint32_t> QueryInUseMap(void);
737 static QMap<QString,bool> QueryJobsRunning(int type);
738 static QStringList LoadFromScheduler(const QString &tmptable, int recordid);
739
740 // Flagging map support methods
741 void UpdateMarkTimeStamp(bool bookmarked) const;
742 void UpdateLastPlayTimeStamp(bool lastplay) const;
743 void QueryMarkupMap(frm_dir_map_t&marks, MarkTypes type,
744 bool merge = false) const;
745 void SaveMarkupMap(const frm_dir_map_t &marks, MarkTypes type = MARK_ALL,
746 int64_t min_frame = -1, int64_t max_frame = -1) const;
747 void ClearMarkupMap(MarkTypes type = MARK_ALL,
748 int64_t min_frame = -1, int64_t max_frame = -1) const;
749
750 protected:
751 // Creates a basename from the start and end times
752 QString CreateRecordBasename(const QString &ext) const;
753
754 bool LoadProgramFromRecorded(
755 uint chanid, const QDateTime &recstartts);
756
757 bool FromStringList(QStringList::const_iterator &it,
758 const QStringList::const_iterator& end);
759
760 static void QueryMarkupMap(
761 const QString &video_pathname,
762 frm_dir_map_t &marks, MarkTypes type, bool merge = false);
763 static void QueryMarkupMap(
764 uint chanid, const QDateTime &recstartts,
765 frm_dir_map_t &marks, MarkTypes type, bool merge = false);
766
767 static int InitStatics(void);
768
769 protected:
770 QString m_title;
771 QString m_sortTitle;
772 QString m_subtitle;
775 uint m_season {0};
776 uint m_episode {0};
777 uint m_totalEpisodes {0};
779 QString m_category;
780 QString m_director;
781
782 int32_t m_recPriority {0};
783
784 uint32_t m_chanId {0};
785 QString m_chanStr; // Channum
786 QString m_chanSign; // Callsign
787 QString m_chanName;
789
790 QString m_recGroup {"Default"};
791 QString m_playGroup {"Default"};
792
793 mutable QString m_pathname;
794
795 QString m_hostname;
796 QString m_storageGroup {"Default"};
797
798 QString m_seriesId;
799 QString m_programId;
800 QString m_inetRef;
801 CategoryType m_catType {kCategoryNone};
802
803 uint64_t m_fileSize {0ULL};
804
805 QDateTime m_startTs {MythDate::current(true)};
806 QDateTime m_endTs {m_startTs};
807 QDateTime m_recStartTs {m_startTs};
808 QDateTime m_recEndTs {m_startTs};
809
810 float m_stars {0.0F};
812 QDateTime m_lastModified {m_startTs};
813 static constexpr int64_t kLastInUseOffset {4LL * 60 * 60};
814 QDateTime m_lastInUseTime {m_startTs.addSecs(-kLastInUseOffset)};
815
816 int32_t m_recPriority2 {0};
817
818 uint32_t m_recordId {0};
819 uint32_t m_parentId {0};
820
821 uint32_t m_sourceId {0};
822 uint32_t m_inputId {0};
823 uint32_t m_findId {0};
824
825 uint32_t m_programFlags {FL_NONE};
826 VideoPropsType m_videoProperties {VID_UNKNOWN};
827 AudioPropsType m_audioProperties {AUD_UNKNOWN};
828 SubtitlePropsType m_subtitleProperties {SUB_UNKNOWN};
829 uint16_t m_year {0};
830 uint16_t m_partNumber {0};
831 uint16_t m_partTotal {0};
832
833 int8_t m_recStatus {RecStatus::Unknown};
834 uint8_t m_recType {kNotRecording};
835 uint8_t m_dupIn {kDupsInAll};
836 uint8_t m_dupMethod {kDupCheckSubThenDesc};
837
838 uint m_recordedId {0};
839 QString m_inputName;
841
842// everything below this line is not serialized
843 uint8_t m_availableStatus {asAvailable}; // only used for playbackbox.cpp
844 int8_t m_recordedPercent {-1}; // only used by UI
845 int8_t m_watchedPercent {-1}; // only used by UI
846
847 public:
848 void SetAvailableStatus(AvailableStatusType status, const QString &where);
850 { return (AvailableStatusType) m_availableStatus; }
851 int8_t m_spread {-1}; // only used in guidegrid.cpp
852 int8_t m_startCol {-1}; // only used in guidegrid.cpp
853
854 static const QString kFromRecordedQuery;
855
856 protected:
858 PMapDBReplacement *m_positionMapDBReplacement {nullptr};
859
860 static QMutex s_staticDataLock;
862 static bool s_usingProgIDAuth;
863
864 public:
866};
867
868// Class for specifying the desired grouping behavior when querying
869// for program data. Note that title and starttime are always used in
870// all cases but None and callsign is also used in the ChanNum case.
871class MTV_PUBLIC ProgGroupBy : public QObject
872{
873 Q_OBJECT
874
875public:
876 enum Type : uint8_t {
877 None, // Don't group programs
878 ChanNum, // Group by number and callsign
879 CallSign, // Group by call sign
880 ProgramId // Group by program ID
881 };
882 static QString toString(ProgGroupBy::Type groupBy);
883 Q_ENUM(Type)
884};
885
887 ProgramList &destination,
888 const QString &where,
889 const QString &groupBy,
890 const QString &orderBy,
891 const MSqlBindings &bindings,
892 const ProgramList &schedList);
893
895 ProgramList &destination,
896 const QString &sql,
897 const MSqlBindings &bindings,
898 const ProgramList &schedList,
900
902 ProgramList &destination,
903 const QString &sql,
904 const MSqlBindings &bindings,
905 const ProgramList &schedList,
906 uint start,
907 uint limit,
908 uint &count,
910
912 uint chanid, const QDateTime &starttime);
913
915 ProgramList &destination,
916 const QString &sql,
917 const MSqlBindings &bindings);
918
920 ProgramList &destination,
921 const QString &sql,
922 const MSqlBindings &bindings,
923 uint start,
924 uint limit,
925 uint &count);
926
928 ProgramList &destination,
929 bool possiblyInProgressRecordingsOnly,
930 const QMap<QString,uint32_t> &inUseMap,
931 const QMap<QString,bool> &isJobRunning,
932 const QMap<QString, ProgramInfo*> &recMap,
933 int sort = 0,
934 const QString &sortBy = "",
935 bool ignoreLiveTV = false,
936 bool ignoreDeleted = false);
937
938template<typename TYPE>
940 AutoDeleteDeque<TYPE*> &destination,
941 bool &hasConflicts,
942 const QString& altTable = "",
943 int recordid = -1)
944{
945 destination.clear();
946 hasConflicts = false;
947
948 QStringList slist = ProgramInfo::LoadFromScheduler(altTable, recordid);
949 if (slist.empty())
950 return false;
951
952 hasConflicts = slist[0].toInt();
953
954 QStringList::const_iterator sit = slist.cbegin()+2;
955 while (sit != slist.cend())
956 {
957 TYPE *p = new TYPE(sit, slist.cend());
958 destination.push_back(p);
959
960 if (!p->HasPathname() && !p->GetChanID())
961 {
962 delete p;
963 destination.clear();
964 return false;
965 }
966 }
967
968 if (destination.size() != slist[1].toUInt())
969 {
970 destination.clear();
971 return false;
972 }
973
974 return true;
975}
976
977template<typename T>
979{
980 bool dummyConflicts = false;
981 return LoadFromScheduler(destination, dummyConflicts, "", -1);
982}
983
984// Moved from programdetails.cpp/h, used by MythWelcome/MythShutdown
985// could be factored out
986MTV_PUBLIC bool GetNextRecordingList(QDateTime &nextRecordingStart,
987 bool *hasConflicts = nullptr,
988 std::vector<ProgramInfo> *list = nullptr);
989
990class QMutex;
992{
993 public:
996 QMutex *lock;
997 QMap<MarkTypes,frm_pos_map_t> map;
998};
999
1002
1005
1006MTV_PUBLIC bool RemoteCheckFile(ProgramInfo *pginfo, bool checkSlaves = true);
1007
1008#endif // MYTHPROGRAM_H_
1009
1010/* vim: set expandtab tabstop=4 shiftwidth=4: */
void clear(void)
void push_back(T info)
size_t size(void) const
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:128
QMap< MarkTypes, frm_pos_map_t > map
Definition: programinfo.h:997
Holds information on recordings and videos.
Definition: programinfo.h:70
float GetStars(void) const
Definition: programinfo.h:448
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
Definition: programinfo.h:375
uint GetRecordingRuleID(void) const
Definition: programinfo.h:455
bool IsInUsePlaying(void) const
Definition: programinfo.h:483
RecordingDupMethodType GetDuplicateCheckMethod(void) const
What should be compared to determine if two programs are the same?
Definition: programinfo.h:465
QString GetBasename(void) const
Definition: programinfo.h:347
void SetFlagging(bool flagging)
Definition: programinfo.h:558
bool HasPathname(void) const
Definition: programinfo.h:361
QString GetSeriesID(void) const
Definition: programinfo.h:441
static bool s_usingProgIDAuth
Definition: programinfo.h:862
uint GetVideoProperties(void) const
Definition: programinfo.h:502
static ProgramInfoUpdater * s_updater
Definition: programinfo.h:861
bool IsVideoFile(void) const
Definition: programinfo.h:348
ProgramInfo(QStringList::const_iterator &it, const QStringList::const_iterator &end)
Definition: programinfo.h:289
QString GetLastModifiedTime(MythDate::Format fmt) const
Definition: programinfo.h:436
virtual void clear(void)
bool IsCommercialFlagged(void) const
Definition: programinfo.h:485
QString m_hostname
Definition: programinfo.h:795
bool IsDeletePending(void) const
Definition: programinfo.h:497
bool IsAutoExpirable(void) const
Definition: programinfo.h:490
bool IsPreserved(void) const
Definition: programinfo.h:491
bool IsVideoDVD(void) const
Definition: programinfo.h:350
void SetRecordingPriority2(int priority)
Definition: programinfo.h:544
void SetIgnoreProgStart(bool ignore)
If "ignore" is true QueryProgStart() will return 0, otherwise QueryProgStart() will return the progst...
Definition: programinfo.h:572
QString m_pathname
Definition: programinfo.h:793
QDateTime m_previewUpdate
Definition: programinfo.h:865
ProgramInfoType GetProgramInfoType(void) const
Definition: programinfo.h:478
static const QString kFromRecordedQuery
Definition: programinfo.h:854
void SetIgnoreBookmark(bool ignore)
If "ignore" is true GetBookmark() will return 0, otherwise GetBookmark() will return the bookmark pos...
Definition: programinfo.h:565
uint GetEpisode(void) const
Definition: programinfo.h:370
uint GetSubtitleType(void) const
Definition: programinfo.h:500
bool IsVideo(void) const
Definition: programinfo.h:492
QString m_category
Definition: programinfo.h:779
QString GetProgramID(void) const
Definition: programinfo.h:442
QString m_chanPlaybackFilters
Definition: programinfo.h:788
QString m_sortSubtitle
Definition: programinfo.h:773
QDateTime GetBookmarkUpdate(void) const
Definition: programinfo.h:480
void SetEditing(bool editing)
Definition: programinfo.h:553
QString GetRecordingGroup(void) const
Definition: programinfo.h:422
virtual ~ProgramInfo()=default
QString m_inputName
Definition: programinfo.h:839
void SetRecordingRuleType(RecordingType type)
Definition: programinfo.h:588
ProgramInfo(const QStringList &list)
Definition: programinfo.h:295
uint GetRecordingID(void) const
Definition: programinfo.h:452
static const std::array< const QString, 5 > kCatName
Definition: programinfo.h:75
ProgramInfo(void)
Null constructor.
Definition: programinfo.h:83
QDateTime GetScheduledEndTime(void) const
The scheduled end time of the program.
Definition: programinfo.h:400
QString GetChannelPlaybackFilters(void) const
Definition: programinfo.h:390
uint32_t m_chanId
Definition: programinfo.h:784
QString GetInetRef(void) const
Definition: programinfo.h:443
void ClearMarkupFlag(MarkTypes type) const
Definition: programinfo.h:654
QString GetRecordingEndTime(MythDate::Format fmt) const
Approximate time the recording should have ended, did end, or is intended to end (with formatting).
Definition: programinfo.h:418
uint GetWatchedPercent() const
Definition: programinfo.h:595
void SetRecordingStatus(RecStatus::Type status)
Definition: programinfo.h:587
void SetScheduledStartTime(const QDateTime &dt)
Definition: programinfo.h:530
AvailableStatusType GetAvailableStatus(void) const
Definition: programinfo.h:849
RecordingDupInType GetDuplicateCheckSource(void) const
Where should we check for duplicates?
Definition: programinfo.h:461
bool HasCutlist(void) const
Definition: programinfo.h:486
uint GetAudioProperties(void) const
Definition: programinfo.h:504
bool IsRepeat(void) const
Definition: programinfo.h:494
void SetIgnoreLastPlayPos(bool ignore)
If "ignore" is true QueryLastPlayPos() will return 0, otherwise QueryLastPlayPos() will return the la...
Definition: programinfo.h:580
QString QueryInputDisplayName(void) const
QString GetSortSubtitle(void) const
Definition: programinfo.h:367
void SetPlaybackGroup(const QString &group)
Definition: programinfo.h:535
QString GetHostname(void) const
Definition: programinfo.h:424
bool IsRecording(void) const
Definition: programinfo.h:493
void SetRecordingGroup(const QString &group)
Definition: programinfo.h:534
static QStringList LoadFromScheduler(const QString &tmptable, int recordid)
void SetCategory(const QString &cat)
Definition: programinfo.h:541
static bool UsingProgramIDAuthority(void)
Definition: programinfo.h:327
uint GetSourceID(void) const
Definition: programinfo.h:468
QString m_title
Definition: programinfo.h:770
bool IsBookmarkSet(void) const
Definition: programinfo.h:487
bool IsReactivated(void) const
Definition: programinfo.h:496
QString GetPlaybackGroup(void) const
Definition: programinfo.h:423
void SetScheduledEndTime(const QDateTime &dt)
Definition: programinfo.h:531
QString GetDescription(void) const
Definition: programinfo.h:368
QString m_sortTitle
Definition: programinfo.h:771
QDateTime GetLastModifiedTime(void) const
Definition: programinfo.h:435
QString GetStorageGroup(void) const
Definition: programinfo.h:425
void SetPositionMapDBReplacement(PMapDBReplacement *pmap)
Definition: programinfo.h:589
void SetRecordingStartTime(const QDateTime &dt)
Definition: programinfo.h:532
QString GetScheduledStartTime(MythDate::Format fmt) const
The scheduled start time of program (with formatting).
Definition: programinfo.h:395
QString GetChannelName(void) const
This is the channel name in the local market, i.e.
Definition: programinfo.h:389
QString GetTitle(void) const
Definition: programinfo.h:364
void SetHostname(const QString &host)
Definition: programinfo.h:536
QDateTime GetRecordingStartTime(void) const
Approximate time the recording started.
Definition: programinfo.h:407
QString m_description
Definition: programinfo.h:774
QDateTime GetScheduledStartTime(void) const
The scheduled start time of program.
Definition: programinfo.h:393
ProgramInfo(QString _title, QString _category, QDateTime _startts, QDateTime _endts)
Constructs a Dummy ProgramInfo (used by GuideGrid)
Definition: programinfo.h:284
uint GetFindID(void) const
Definition: programinfo.h:474
bool IsLocal(void) const
Definition: programinfo.h:354
QString m_seriesId
Definition: programinfo.h:798
QString m_syndicatedEpisode
Definition: programinfo.h:778
QString GetChanNum(void) const
This is the channel "number", in the form 1, 1_2, 1-2, 1#1, etc.
Definition: programinfo.h:379
void SetChanID(uint _chanid)
Definition: programinfo.h:529
void SetSourceID(uint id)
Definition: programinfo.h:546
uint GetYearOfInitialRelease(void) const
Definition: programinfo.h:426
bool IsCommercialFree(void) const
Definition: programinfo.h:484
QDateTime m_recStartTs
Definition: programinfo.h:807
QString m_director
Definition: programinfo.h:780
bool IsDuplicate(void) const
Definition: programinfo.h:495
void SetRecordingRuleID(uint id)
Definition: programinfo.h:545
void SetProgramInfoType(ProgramInfoType t)
Definition: programinfo.h:526
QString MakeUniqueKey(void) const
Creates a unique string that can be used to identify an existing recording.
Definition: programinfo.h:342
QString GetInputName(void) const
Definition: programinfo.h:470
void SetWatchedPercent(uint progress)
Definition: programinfo.h:596
QString GetSortTitle(void) const
Definition: programinfo.h:365
bool IsVideoBD(void) const
Definition: programinfo.h:352
bool IsSameRecording(const ProgramInfo &other) const
Definition: programinfo.h:335
QString m_programId
Definition: programinfo.h:799
uint GetStars(uint range_max) const
Definition: programinfo.h:449
QString m_chanStr
Definition: programinfo.h:785
int GetRecordingPriority(void) const
Definition: programinfo.h:446
QString m_chanSign
Definition: programinfo.h:786
QString GetPathname(void) const
Definition: programinfo.h:346
QDate m_originalAirDate
Definition: programinfo.h:811
QDate GetOriginalAirDate(void) const
Definition: programinfo.h:434
uint GetInputID(void) const
Definition: programinfo.h:469
QString m_chanName
Definition: programinfo.h:787
CategoryType GetCategoryType(void) const
Definition: programinfo.h:444
int GetRecordingPriority2(void) const
Definition: programinfo.h:447
uint GetParentRecordingRuleID(void) const
Definition: programinfo.h:456
void SetSeriesID(const QString &id)
TODO Move to RecordingInfo.
Definition: programinfo.h:539
QString GetRecordingStartTime(MythDate::Format fmt) const
Approximate time the recording started (with formatting).
Definition: programinfo.h:409
void ClearInputName(void)
Definition: programinfo.h:472
void SetRecordingPriority(int priority)
Definition: programinfo.h:543
bool IsWatched(void) const
Definition: programinfo.h:489
bool IsPathSet(void) const
Definition: programinfo.h:360
void SetRecordingEndTime(const QDateTime &dt)
Definition: programinfo.h:533
QString m_subtitle
Definition: programinfo.h:772
QString m_inUseForWhat
Definition: programinfo.h:857
void SetStorageGroup(const QString &group)
Definition: programinfo.h:537
uint GetRecordedPercent() const
Definition: programinfo.h:593
uint32_t GetProgramFlags(void) const
Definition: programinfo.h:476
RecStatus::Type GetRecordingStatus(void) const
Definition: programinfo.h:453
bool IsLastPlaySet(void) const
Definition: programinfo.h:488
void SetReactivated(bool reactivate)
Definition: programinfo.h:548
void SetCategoryType(const CategoryType type)
Definition: programinfo.h:542
QDateTime m_bookmarkUpdate
Definition: programinfo.h:840
QDateTime GetRecordingEndTime(void) const
Approximate time the recording should have ended, did end, or is intended to end.
Definition: programinfo.h:415
void SetInputID(uint id)
Definition: programinfo.h:547
QString GetSubtitle(void) const
Definition: programinfo.h:366
QString GetScheduledEndTime(MythDate::Format fmt) const
The scheduled end time of the program (with formatting).
Definition: programinfo.h:402
QString GetCategory(void) const
Definition: programinfo.h:372
uint GetSeason(void) const
Definition: programinfo.h:369
virtual void SetRecordingID(uint _recordedid)
Definition: programinfo.h:585
void SetProgramID(const QString &id)
Definition: programinfo.h:540
bool IsMythStream(void) const
Definition: programinfo.h:359
QString m_inetRef
Definition: programinfo.h:800
RecordingType GetRecordingRuleType(void) const
Definition: programinfo.h:457
uint GetEpisodeTotal(void) const
Definition: programinfo.h:371
QString GetChannelSchedulingID(void) const
This is the unique programming identifier of a channel.
Definition: programinfo.h:386
static QMutex s_staticDataLock
Definition: programinfo.h:860
unsigned int uint
Definition: compat.h:68
QString GetPlaybackURL(ProgramInfo *pginfo, bool storePath)
static const iso6937table * d
unsigned short uint16_t
Definition: iso6937tables.h:3
bool operator==(MusicMetadata &a, MusicMetadata &b)
Q_DECLARE_METATYPE(std::chrono::seconds)
static void clear(SettingsMap &cache, SettingsMap &overrides, const QString &myKey)
Definition: mythdb.cpp:949
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
Definition: mythdbcon.h:100
#define MTV_PUBLIC
Definition: mythtvexp.h:11
QHash< QString, QString > InfoMap
Definition: mythtypes.h:15
MBASE_PUBLIC QStringList ToStringList(const FileSystemInfoList &fsInfos)
MBASE_PUBLIC FileSystemInfoList FromStringList(const QStringList &list)
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
Definition: mythdate.cpp:93
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:15
string hostname
Definition: caa.py:17
STL namespace.
int pginfo_init_statics()
Definition: programinfo.cpp:39
MTV_PUBLIC 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="", bool ignoreLiveTV=false, bool ignoreDeleted=false)
static constexpr int8_t NUMPROGRAMLINES
Definition: programinfo.h:30
MTV_PUBLIC bool GetNextRecordingList(QDateTime &nextRecordingStart, bool *hasConflicts=nullptr, std::vector< ProgramInfo > *list=nullptr)
MTV_PUBLIC ProgramInfo::CategoryType string_to_myth_category_type(const QString &type)
MTV_PUBLIC bool LoadFromOldRecorded(ProgramList &destination, const QString &sql, const MSqlBindings &bindings)
MTV_PUBLIC ProgramInfo * LoadProgramFromProgram(uint chanid, const QDateTime &starttime)
MTV_PUBLIC bool LoadFromProgram(ProgramList &destination, const QString &where, const QString &groupBy, const QString &orderBy, const MSqlBindings &bindings, const ProgramList &schedList)
bool LoadFromScheduler(AutoDeleteDeque< TYPE * > &destination, bool &hasConflicts, const QString &altTable="", int recordid=-1)
Definition: programinfo.h:939
MTV_PUBLIC bool RemoteCheckFile(ProgramInfo *pginfo, bool checkSlaves=true)
MTV_PUBLIC QString myth_category_type_to_string(ProgramInfo::CategoryType category_type)
AvailableStatusType
Definition: programtypes.h:175
@ asAvailable
Definition: programtypes.h:176
MarkTypes
Definition: programtypes.h:46
@ MARK_ALL
Definition: programtypes.h:48
QMap< uint64_t, MarkTypes > frm_dir_map_t
Frame # -> Mark map.
Definition: programtypes.h:117
ProgramInfoType
Definition: programtypes.h:166
@ kProgramInfoTypeVideoDVD
Definition: programtypes.h:169
@ kProgramInfoTypeVideoFile
Definition: programtypes.h:168
@ kProgramInfoTypeVideoBD
Definition: programtypes.h:172
AutoExpireType
Definition: programtypes.h:192
CommFlagStatus
Definition: programtypes.h:119
QMap< long long, long long > frm_pos_map_t
Frame # -> File offset map.
Definition: programtypes.h:44
TranscodingStatus
Definition: programtypes.h:156
RecordingDupInType
@ kDupsInAll
RecordingType
@ kNotRecording
RecordingDupMethodType
@ kDupCheckSubThenDesc
MarkupEntry(int t, uint64_t f, uint64_t d, bool n)
Definition: programinfo.h:705
MarkupEntry(void)=default