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