Go to the documentation of this file.
31 if (!ignore_non_serialized_data)
49 if (!ignore_non_serialized_data)
63 const ProgramInfo &other,
bool ignore_non_serialized_data)
67 if (!ignore_non_serialized_data)
95 bool showrerecord,
uint star_range,
96 uint date_format)
const
99 progMap[
"title"] = (
m_title ==
"Default (Template)") ?
100 QObject::tr(
"Default (Template)") :
m_title;
101 progMap[
"category"] = (
m_category ==
"Default") ?
310 LOG(VB_GENERAL, LOG_ERR,
"Theme is missing critical theme elements.");
320 "rec_type|titlesubtitle|progpriority");
347 for (
int i = 0; i < actions.size() && !handled; i++)
349 QString
action = actions[i];
354 else if (
action ==
"RANKDEC")
356 else if (
action ==
"ESCAPE")
460 else if (
action ==
"MENU")
464 else if (
action ==
"CUSTOMEDIT")
469 else if (
action ==
"DELETE")
474 else if (
action ==
"UPCOMING")
493 QString label = tr(
"Options");
496 auto *menuPopup =
new MythDialogBox(label, popupStack,
"menuPopup");
498 if (menuPopup->Create())
500 menuPopup->SetReturnEvent(
this,
"menu");
502 menuPopup->AddButton(tr(
"Increase Priority"));
503 menuPopup->AddButton(tr(
"Decrease Priority"));
504 menuPopup->AddButton(tr(
"Sort"),
nullptr,
true);
505 menuPopup->AddButton(tr(
"Program Details"));
506 menuPopup->AddButton(tr(
"Upcoming"));
507 menuPopup->AddButton(tr(
"Custom Edit"));
508 menuPopup->AddButton(tr(
"Delete Rule"));
509 menuPopup->AddButton(tr(
"New Template"));
521 QString label = tr(
"Sort Options");
524 auto *menuPopup =
new MythDialogBox(label, popupStack,
"menuPopup");
526 if (menuPopup->Create())
528 menuPopup->SetReturnEvent(
this,
"sortmenu");
530 menuPopup->AddButton(tr(
"Reverse Sort Order"));
531 menuPopup->AddButton(tr(
"Sort By Title"));
532 menuPopup->AddButton(tr(
"Sort By Priority"));
533 menuPopup->AddButton(tr(
"Sort By Type"));
534 menuPopup->AddButton(tr(
"Sort By Count"));
535 menuPopup->AddButton(tr(
"Sort By Record Count"));
536 menuPopup->AddButton(tr(
"Sort By Last Recorded"));
537 menuPopup->AddButton(tr(
"Sort By Average Delay"));
553 QString resultid = dce->GetId();
554 QString resulttext = dce->GetResultText();
555 int buttonnum = dce->GetResult();
557 if (resultid ==
"menu")
559 if (resulttext == tr(
"Increase Priority"))
563 else if (resulttext == tr(
"Decrease Priority"))
567 else if (resulttext == tr(
"Sort"))
571 else if (resulttext == tr(
"Program Details"))
575 else if (resulttext == tr(
"Upcoming"))
580 else if (resulttext == tr(
"Custom Edit"))
585 else if (resulttext == tr(
"Delete Rule"))
590 else if (resulttext == tr(
"New Template"))
595 tr(
"Template Name"));
596 if (textInput->Create())
598 textInput->SetReturnEvent(
this,
"templatecat");
603 else if (resultid ==
"sortmenu")
605 if (resulttext == tr(
"Reverse Sort Order"))
610 else if (resulttext == tr(
"Sort By Title"))
621 else if (resulttext == tr(
"Sort By Priority"))
632 else if (resulttext == tr(
"Sort By Type"))
643 else if (resulttext == tr(
"Sort By Count"))
656 else if (resulttext == tr(
"Sort By Record Count"))
667 else if (resulttext == tr(
"Sort By Last Recorded"))
678 else if (resulttext == tr(
"Sort By Average Delay"))
690 else if (resultid ==
"deleterule")
700 if (record->Delete() && item)
703 LOG(VB_GENERAL, LOG_ERR,
704 "Failed to delete recording rule");
709 else if (resultid ==
"templatecat")
728 record->m_recordID = pgRecInfo->GetRecordingRuleID();
730 record->LoadByProgram(pgRecInfo);
734 if (schededit->Create())
746 category = category.trimmed();
747 if (category.isEmpty())
751 QMap<int, ProgramRecPriorityInfo>::Iterator it;
757 Qt::CaseInsensitive) == 0)
768 record->MakeTemplate(category);
772 if (schededit->Create())
792 if (!pgRecInfo || recid != pgRecInfo->
getRecordID())
826 query.
prepare(
"SELECT recpriority, type, inactive "
828 "WHERE recordid = :RECORDID");
834 else if (query.
next())
836 int recPriority = query.
value(0).toInt();
837 int rectype = query.
value(1).toInt();
838 int inactive = query.
value(2).toInt();
869 pgRecInfo->GetCategory()
870 .compare(
"Default", Qt::CaseInsensitive) == 0))
876 record->m_recordID = pgRecInfo->GetRecordingRuleID();
883 QString message = tr(
"Delete '%1' %2 rule?")
884 .arg(record->m_title,
toString(pgRecInfo->GetRecordingRuleType()));
889 okPopup->SetReturnEvent(
this,
"deleterule");
890 okPopup->SetData(QVariant::fromValue(record));
892 if (okPopup->Create())
909 query.
prepare(
"SELECT inactive "
911 "WHERE recordid = :RECID");
912 query.
bindValue(
":RECID", pgRecInfo->GetRecordingRuleID());
919 else if (query.
next())
921 int inactive = query.
value(0).toInt();
928 "SET inactive = :INACTIVE "
929 "WHERE recordid = :RECID");
931 query.
bindValue(
":RECID", pgRecInfo->GetRecordingRuleID());
936 "Update recording schedule inactive query", query);
941 QString(
"DeactivateRule %1 %2")
942 .arg(pgRecInfo->GetRecordingRuleID())
943 .arg(pgRecInfo->GetTitle()));
963 if (tempRecPriority > -100 && tempRecPriority < 100)
965 pgRecInfo->m_recPriority = tempRecPriority;
973 int progRecPriority = pgRecInfo->GetRecordingPriority();
975 item->
SetText(QString::number(progRecPriority),
"progpriority");
976 item->
SetText(QString::number(progRecPriority),
"recpriority");
980 item->
SetText(QString::number(progRecPriority),
"recpriorityB");
984 item->
SetText(QString::number(progRecPriority),
"finalpriority");
993 QMap<int, ProgramRecPriorityInfo>::Iterator it;
1010 std::vector<ProgramInfo *> recordinglist;
1016 for (
auto & pgiter : recordinglist)
1025 pgiter->GetRecordingPriority();
1035 result.
prepare(
"SELECT recordid, title, chanid, starttime, startdate, "
1036 "type, inactive, last_record, avg_delay, profile, "
1037 "recgroup, storagegroup "
1044 else if (result.
next())
1048 uint recordid = result.
value(0).toUInt();
1054 int inactive = result.
value(6).toInt();
1056 int avgd = result.
value(8).toInt();
1058 QString recordingGroup = result.
value(10).toString();
1059 QString storageGroup = result.
value(11).toString();
1063 QMap<int, ProgramRecPriorityInfo>::Iterator it;
1091 }
while (result.
next());
1105 for (
auto *program : schedList)
1108 const uint recordid = (*program).GetRecordingRuleID();
1137 QMap<int, ProgramRecPriorityInfo>::Iterator pit;
1191 std::vector<ProgramRecPriorityInfo*>::iterator it;
1197 QVariant::fromValue(progInfo));
1208 item->DisplayState(
rating,
"ratingstate");
1229 progInfo->
ToMap(infoMap);
1230 item->SetTextFromMap(infoMap, state);
1244 matchInfo = QString(
"%1 %2")
1251 matchInfo = tr(
"Recording %1 of %2")
1256 subtitle = QString(
"(%1) %2").arg(matchInfo, subtitle);
1257 item->SetText(subtitle,
"scheduleinfo", state);
1259 item->SetText(QString::number(progRecPriority),
"progpriority", state);
1260 item->SetText(QString::number(progRecPriority),
"finalpriority", state);
1262 item->SetText(QString::number(progRecPriority),
"recpriority", state);
1263 item->SetText(QString::number(progRecPriority),
"recpriorityB", state);
1268 item->SetText(tempDateTime,
"lastrecorded", state);
1272 item->SetText(tempDate,
"lastrecordeddate", state);
1275 item->SetText(tempTime,
"lastrecordedtime", state);
1286 channame = tr(
"Any");
1287 channum = tr(
"Any");
1288 callsign = tr(
"Any");
1290 item->SetText(channame,
"channel", state);
1291 item->SetText(channum,
"channum", state);
1292 item->SetText(callsign,
"callsign", state);
1298 item->SetText(
profile,
"recordingprofile", state);
1301 item->DisplayState(state,
"status");
1312 if (norecordingText)
1332 if (pgRecInfo->m_subtitle !=
"(null)" &&
1337 subtitle = pgRecInfo->m_subtitle;
1343 matchInfo = QString(
"%1 %2")
1344 .arg(
m_listMatch[pgRecInfo->GetRecordingRuleID()])
1346 pgRecInfo->GetRecordingRuleType()));
1350 matchInfo = tr(
"Recording %1 of %2")
1351 .arg(
m_recMatch[pgRecInfo->GetRecordingRuleID()])
1352 .arg(
m_listMatch[pgRecInfo->GetRecordingRuleID()]);
1355 subtitle = QString(
"(%1) %2").arg(matchInfo, subtitle);
1358 pgRecInfo->ToMap(infoMap);
1398 QString channame = pgRecInfo->m_chanName;
1399 QString channum = pgRecInfo->m_chanStr;
1400 QString callsign = pgRecInfo->m_chanSign;
1404 !(pgRecInfo->GetRecordingRule()->m_filter & 1024) &&
1405 pgRecInfo->GetRecordingRule()->m_searchType !=
kManualSearch)
1407 channame = tr(
"Any");
1408 channum = tr(
"Any");
1409 callsign = tr(
"Any");
1421 QString
profile = pgRecInfo->m_profile;
1439 QMap<int, ProgramRecPriorityInfo>::iterator it;
QString GetSortTitle(void) const
void LoadInBackground(const QString &message="")
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
QSqlQuery wrapper that fetches a DB connection from the connection pool.
MythScreenStack * GetMainStack()
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
MythUIText * m_recPriorityBText
MythUIText * m_chanNumText
bool LoadFromScheduler(AutoDeleteDeque< TYPE * > &destination, bool &hasConflicts, const QString &altTable="", int recordid=-1)
MythUIText * m_finalPriorityText
void clear(void) override
bool Create(void) override
void SetCategory(const QString &cat)
QDateTime as_utc(const QDateTime &old_dt)
Returns copy of QDateTime with TimeSpec set to UTC.
void updateInfo(MythUIButtonListItem *item)
void customEvent(QEvent *event) override
ProgramRecPrioritySort(bool reverse)
ProgramRecPriorityInfo * m_currentItem
ProgramInfo * GetCurrentProgram(void) const override
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
Holds information on a TV Program one might wish to record.
MythUIType * GetChild(const QString &name) const
Get a named child of this UIType.
void saveRecPriority(void)
ProgramRecTypeSort(bool reverse)
MythUIText * m_recProfileText
QVariant value(int i) const
QString GetCategory(void) const
Internal representation of a recording rule, mirrors the record table.
ProgramCountSort(bool reverse)
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
void Load(void) override
Load data which will ultimately be displayed on-screen or used to determine what appears on-screen (S...
void changeRecPriority(int howMuch)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
void ruleSaved(int ruleId)
MythUIText * m_recPriorityText
bool m_isInactive
Recording rule is enabled?
int GetRecordingPriority(void) const
int getRecordID(void)
Returns a record id, creating "record" it if necessary.
MythUIText * m_lastRecordedTimeText
virtual void ShowDetails(void) const
Show the Program Details screen.
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
MythUIType * GetFocusWidget(void) const
static QString toString(RecStatus::Type recstatus, uint id)
Converts "recstatus" into a short (unreadable) string.
QHash< QString, QString > InfoMap
MythUIText * m_lastRecordedText
bool Load(bool asTemplate=false)
Load a single rule from the recorded table.
void SetSubtitle(const QString &st, const QString &sst=nullptr)
void newTemplate(QString category)
virtual void EditCustom(void)
Creates a dialog for creating a custom recording rule.
RecStatus::Type GetRecordingStatus(void) const
ProgramRecPriority(MythScreenStack *parent, const QString &name)
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
bool TranslateKeyPress(const QString &Context, QKeyEvent *Event, QStringList &Actions, bool AllowJumps=true)
Get a list of actions for a keypress in the given context.
void SetRecordingRuleType(RecordingType type)
Basic menu dialog, message and a list of options.
static QString GetRecgroupString(uint recGroupID)
Temporary helper during transition from string to ID.
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
void ruleDeleted(int ruleId)
static void DBError(const QString &where, const MSqlQuery &query)
QMap< int, int > m_listMatch
void BuildFocusList(void)
def rating(profile, smoonURL, gate)
MBASE_PUBLIC int naturalCompare(const QString &_a, const QString &_b, Qt::CaseSensitivity caseSensitivity=Qt::CaseSensitive)
This method chops the input a and b into pieces of digits and non-digits (a1.05 becomes a | 1 | .
QMap< int, int > m_origRecPriorityData
MythUIText * m_chanNameText
void ToMap(InfoMap &progMap, bool showrerecord=false, uint star_range=10, uint date_format=0) const override
Converts ProgramInfo into QString QHash containing each field in ProgramInfo converted into localized...
RecSearchType m_searchType
QMap< int, int > m_recMatch
virtual void SetTextFromMap(const InfoMap &infoMap)
ProgramLastRecordSort(bool reverse)
void SetRecordingPriority(int priority)
QMap< int, ProgramRecPriorityInfo > m_programData
virtual void ToMap(InfoMap &progMap, bool showrerecord=false, uint star_range=10, uint date_format=0) const
Converts ProgramInfo into QString QHash containing each field in ProgramInfo converted into localized...
ProgramAvgDelaySort(bool reverse)
void SetTitle(const QString &t, const QString &st=nullptr)
int ternary_compare(const QDateTime &a, const QDateTime &b)
balanced ternary (three way) comparison This is equivalent to C++20's operator <=>.
MythUIText * m_callSignText
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
void customEvent(QEvent *event) override
int GetNumSetting(const QString &key, int defaultval=0)
MythUIText * m_schedInfoText
QString GetSortSubtitle(void) const
MythUIButtonList * m_programList
static void ReschedulePlace(const QString &why)
std::vector< ProgramRecPriorityInfo * > m_sortedProgram
void RemoveItemFromList(MythUIButtonListItem *item)
@ kSimplify
Do Today/Yesterday/Tomorrow transform.
void scheduleChanged(int recid)
bool GetBoolSetting(const QString &key, bool defaultval=false)
void ApplyRecordRecPriorityChange(int newrecpriority)
Sets recording priority of "record", creating "record" if it does not exist.
RecordingType GetRecordingRuleType(void) const
virtual void clone(const RecordingInfo &other, bool ignore_non_serialized_data=false)
Copies important fields from other RecordingInfo.
Holds information on recordings and videos.
All purpose text widget, displays a text string.
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
int m_recordID
Unique Recording Rule ID.
void SortList(ProgramRecPriorityInfo *newCurrentItem=nullptr)
@ kAddYear
Add year to string if not included.
Dialog asking for user confirmation. Ok and optional Cancel button.
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
void RemoteGetAllScheduledRecordings(std::vector< ProgramInfo * > &scheduledlist)
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
void clear(void) override
Event dispatched from MythUI modal dialogs to a listening class containing a result of some form.
virtual void SetText(const QString &text)
virtual void SetVisible(bool visible)
virtual void ShowUpcoming(void) const
Show the upcoming recordings for this title.
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
MythMainWindow * GetMythMainWindow(void)
QMap< int, int > m_conMatch
MythScreenStack * GetStack(const QString &Stackname)
@ kDateFull
Default local time.
int RecTypePrecedence(RecordingType rectype)
Converts a RecordingType to a simple integer so it's specificity can be compared to another.
void Init(void) override
Used after calling Load() to assign data to widgets and other UI initilisation which is prohibited in...
void SetRecordingRuleID(uint id)
@ kDateTimeFull
Default local time.
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
Dialog prompting the user to enter a text string.
void SaveSetting(const QString &key, int newValue)
@ kTime
Default local time.
RecordingRule * GetRecordingRule(void)
Returns the "record" field, creating it if necessary.
uint GetRecordingRuleID(void) const
void edit(MythUIButtonListItem *item) const
ProgramRecCountSort(bool reverse)
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Construct a recording schedule.
MythUIText * m_lastRecordedDateText
virtual void clone(const ProgramRecPriorityInfo &other, bool ignore_non_serialized_data=false)
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
QMap< int, int > m_nowMatch
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
QString GetSubtitle(void) const
float GetStars(void) const