40 matchCount(0), recCount(0),
41 last_record(QDateTime()),
52 if (!ignore_non_serialized_data)
68 if (!ignore_non_serialized_data)
80 const ProgramInfo &other,
bool ignore_non_serialized_data)
84 if (!ignore_non_serialized_data)
108 bool showrerecord,
uint star_range)
const 111 progMap[
"title"] = (
title ==
"Default (Template)") ?
112 QObject::tr(
"Default (Template)") :
title;;
113 progMap[
"category"] = (
category ==
"Default") ?
142 int finalB =
b->GetRecordingPriority();
144 if (finalA != finalB)
147 return finalA < finalB;
149 return finalA > finalB;
158 return typeA > typeB;
160 return typeA < typeB;
165 b->GetRecordingRuleID());
168 b->GetRecordingRuleID());
184 int finalB =
b->GetRecordingPriority();
186 if (finalA != finalB)
189 return finalA < finalB;
191 return finalA > finalB;
200 return typeA > typeB;
202 return typeA < typeB;
207 b->GetRecordingRuleID());
210 b->GetRecordingRuleID());
231 return (typeA > typeB);
233 return (typeA < typeB);
237 int finalB =
b->GetRecordingPriority();
239 if (finalA != finalB)
242 return finalA < finalB;
244 return finalA > finalB;
249 b->GetRecordingRuleID());
252 b->GetRecordingRuleID());
268 int countB =
b->matchCount;
270 int recCountB =
b->recCount;
272 if (countA != countB)
275 return countA < countB;
277 return countA > countB;
280 if (recCountA != recCountB)
283 return recCountA < recCountB;
285 return recCountA > recCountB;
315 int countB =
b->matchCount;
317 int recCountB =
b->recCount;
319 if (recCountA != recCountB)
322 return recCountA < recCountB;
324 return recCountA > recCountB;
327 if (countA != countB)
330 return countA < countB;
332 return countA > countB;
362 QDateTime lastRecB =
b->last_record;
364 if (lastRecA != lastRecB)
367 return lastRecA < lastRecB;
369 return lastRecA > lastRecB;
399 int avgB =
b->avg_delay;
432 m_programList(nullptr), m_schedInfoText(nullptr),
433 m_recPriorityText(nullptr),
434 m_recPriorityBText(nullptr), m_finalPriorityText(nullptr),
435 m_lastRecordedText(nullptr), m_lastRecordedDateText(nullptr),
436 m_lastRecordedTimeText(nullptr), m_channameText(nullptr),
437 m_channumText(nullptr), m_callsignText(nullptr),
438 m_recProfileText(nullptr), m_currentItem(nullptr)
466 LOG(VB_GENERAL, LOG_ERR,
"Theme is missing critical theme elements.");
476 "rec_type|titlesubtitle|progpriority");
503 for (
int i = 0; i < actions.size() && !handled; i++)
505 QString
action = actions[i];
510 else if (
action ==
"RANKDEC")
512 else if (
action ==
"ESCAPE")
616 else if (
action ==
"MENU")
620 else if (
action ==
"CUSTOMEDIT")
625 else if (
action ==
"DELETE")
630 else if (
action ==
"UPCOMING")
649 QString label = tr(
"Options");
658 menuPopup->
AddButton(tr(
"Increase Priority"));
659 menuPopup->
AddButton(tr(
"Decrease Priority"));
660 menuPopup->
AddButton(tr(
"Sort"),
nullptr,
true);
661 menuPopup->
AddButton(tr(
"Program Details"));
665 menuPopup->
AddButton(tr(
"New Template"));
677 QString label = tr(
"Sort Options");
686 menuPopup->
AddButton(tr(
"Reverse Sort Order"));
687 menuPopup->
AddButton(tr(
"Sort By Title"));
688 menuPopup->
AddButton(tr(
"Sort By Priority"));
689 menuPopup->
AddButton(tr(
"Sort By Type"));
690 menuPopup->
AddButton(tr(
"Sort By Count"));
691 menuPopup->
AddButton(tr(
"Sort By Record Count"));
692 menuPopup->
AddButton(tr(
"Sort By Last Recorded"));
693 menuPopup->
AddButton(tr(
"Sort By Average Delay"));
709 QString resultid = dce->
GetId();
713 if (resultid ==
"menu")
715 if (resulttext == tr(
"Increase Priority"))
719 else if (resulttext == tr(
"Decrease Priority"))
723 else if (resulttext == tr(
"Sort"))
727 else if (resulttext == tr(
"Program Details"))
731 else if (resulttext == tr(
"Upcoming"))
736 else if (resulttext == tr(
"Custom Edit"))
741 else if (resulttext == tr(
"Delete Rule"))
746 else if (resulttext == tr(
"New Template"))
752 tr(
"Template Name"));
760 else if (resultid ==
"sortmenu")
762 if (resulttext == tr(
"Reverse Sort Order"))
767 else if (resulttext == tr(
"Sort By Title"))
778 else if (resulttext == tr(
"Sort By Priority"))
789 else if (resulttext == tr(
"Sort By Type"))
800 else if (resulttext == tr(
"Sort By Count"))
813 else if (resulttext == tr(
"Sort By Record Count"))
824 else if (resulttext == tr(
"Sort By Last Recorded"))
835 else if (resulttext == tr(
"Sort By Average Delay"))
847 else if (resultid ==
"deleterule")
858 if (record->
Delete() && item)
861 LOG(VB_GENERAL, LOG_ERR,
862 "Failed to delete recording rule");
867 else if (resultid ==
"templatecat")
897 connect(schededit, SIGNAL(ruleSaved(
int)), SLOT(
scheduleChanged(
int)));
898 connect(schededit, SIGNAL(ruleDeleted(
int)), SLOT(
scheduleChanged(
int)));
906 category = category.trimmed();
907 if (category.isEmpty())
911 QMap<int, ProgramRecPriorityInfo>::Iterator it;
917 Qt::CaseInsensitive) == 0)
935 connect(schededit, SIGNAL(ruleSaved(
int)), SLOT(
scheduleChanged(
int)));
936 connect(schededit, SIGNAL(ruleDeleted(
int)), SLOT(
scheduleChanged(
int)));
952 if (!pgRecInfo || recid != pgRecInfo->
getRecordID())
984 query.
prepare(
"SELECT recpriority, type, inactive " 986 "WHERE recordid = :RECORDID");
992 else if (query.
next())
994 int recPriority = query.
value(0).toInt();
995 int rectype = query.
value(1).toInt();
996 int inactive = query.
value(2).toInt();
1030 .compare(
"Default", Qt::CaseInsensitive) == 0))
1037 if (!record->
Load())
1043 QString message = tr(
"Delete '%1' %2 rule?").arg(record->
m_title)
1052 okPopup->
SetData(qVariantFromValue(record));
1073 query.
prepare(
"SELECT inactive " 1075 "WHERE recordid = :RECID");
1083 else if (query.
next())
1085 int inactive = query.
value(0).toInt();
1091 query.
prepare(
"UPDATE record " 1092 "SET inactive = :INACTIVE " 1093 "WHERE recordid = :RECID");
1100 "Update recording schedule inactive query", query);
1105 QString(
"DeactivateRule %1 %2")
1127 int tempRecPriority;
1130 if (tempRecPriority > -100 && tempRecPriority < 100)
1142 item->
SetText(QString::number(progRecPriority),
"progpriority");
1143 item->
SetText(QString::number(progRecPriority),
"recpriority");
1147 item->
SetText(QString::number(progRecPriority),
"recpriorityB");
1151 item->
SetText(QString::number(progRecPriority),
"finalpriority");
1160 QMap<int, ProgramRecPriorityInfo>::Iterator it;
1177 vector<ProgramInfo *> recordinglist;
1183 vector<ProgramInfo *>::iterator pgiter = recordinglist.begin();
1185 for (; pgiter != recordinglist.end(); ++pgiter)
1194 (*pgiter)->GetRecordingPriority();
1204 result.
prepare(
"SELECT recordid, title, chanid, starttime, startdate, " 1205 "type, inactive, last_record, avg_delay, profile " 1212 else if (result.
next())
1216 uint recordid = result.
value(0).toUInt();
1217 QString title = result.
value(1).toString();
1218 QString chanid = result.
value(2).toString();
1219 QString tempTime = result.
value(3).toString();
1220 QString tempDate = result.
value(4).toString();
1222 int inactive = result.
value(6).toInt();
1224 int avgd = result.
value(8).toInt();
1229 QMap<int, ProgramRecPriorityInfo>::Iterator it;
1255 }
while (result.
next());
1270 for (; it != schedList.
end(); ++it)
1273 const uint recordid = (**it).GetRecordingRuleID();
1302 QMap<int, ProgramRecPriorityInfo>::Iterator pit;
1356 vector<ProgramRecPriorityInfo*>::iterator it;
1363 qVariantFromValue(progInfo));
1395 progInfo->
ToMap(infoMap);
1399 if (progInfo->
subtitle !=
"(null)" &&
1410 matchInfo = QString(
"%1 %2")
1416 matchInfo = tr(
"Recording %1 of %2")
1420 subtitle = QString(
"(%1) %2").arg(matchInfo).arg(subtitle);
1421 item->
SetText(subtitle,
"scheduleinfo", state);
1423 item->
SetText(QString::number(progRecPriority),
"progpriority", state);
1424 item->
SetText(QString::number(progRecPriority),
"finalpriority", state);
1426 item->
SetText(QString::number(progRecPriority),
"recpriority", state);
1427 item->
SetText(QString::number(progRecPriority),
"recpriorityB", state);
1432 item->
SetText(tempDateTime,
"lastrecorded", state);
1436 item->
SetText(tempDate,
"lastrecordeddate", state);
1439 item->
SetText(tempTime,
"lastrecordedtime", state);
1441 QString channame = progInfo->
channame;
1442 QString channum = progInfo->
chanstr;
1443 QString callsign = progInfo->
chansign;
1450 channame = tr(
"Any");
1451 channum = tr(
"Any");
1452 callsign = tr(
"Any");
1454 item->
SetText(channame,
"channel", state);
1455 item->
SetText(channum,
"channum", state);
1456 item->
SetText(callsign,
"callsign", state);
1471 MythUIText *norecordingText = dynamic_cast<MythUIText*>
1474 if (norecordingText)
1492 if (pgRecInfo->
subtitle !=
"(null)" &&
1503 matchInfo = QString(
"%1 %2")
1509 matchInfo = tr(
"Recording %1 of %2")
1513 subtitle = QString(
"(%1) %2").arg(matchInfo).arg(subtitle);
1516 pgRecInfo->
ToMap(infoMap);
1556 QString channame = pgRecInfo->
channame;
1557 QString channum = pgRecInfo->
chanstr;
1558 QString callsign = pgRecInfo->
chansign;
1565 channame = tr(
"Any");
1566 channum = tr(
"Any");
1567 callsign = tr(
"Any");
1599 QMap<int, ProgramRecPriorityInfo>::iterator it;
void saveRecPriority(void)
ProgramRecTypeSort(bool reverse)
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
float GetStars(void) const
MythUIText * m_lastRecordedDateText
ProgramRecPriority(MythScreenStack *parent, const QString &name)
MythUIText * m_lastRecordedTimeText
void bindValue(const QString &placeholder, const QVariant &val)
std::vector< ProgramRecPriorityInfo * > m_sortedProgram
virtual void ToMap(InfoMap &progMap, bool showrerecord=false, uint star_range=10) const
Converts ProgramInfo into QString QHash containing each field in ProgramInfo converted into localized...
bool LoadByProgram(const ProgramInfo *proginfo)
Dialog asking for user confirmation.
void newTemplate(QString category)
bool Create(void) override
bool TranslateKeyPress(const QString &context, QKeyEvent *e, QStringList &actions, bool allowJumps=true)
Get a list of actions for a keypress in the given context.
bool Delete(bool sendSig=true)
All purpose text widget, displays a text string.
QString toString(MarkTypes type)
virtual void ShowUpcoming(void) const
Show the upcoming recordings for this title.
void SaveSetting(const QString &key, int newValue)
MythUIText * m_finalPriorityText
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Basic menu dialog, message and a list of options.
RecordingRule * GetRecordingRule(void)
Returns the "record" field, creating it if necessary.
QString GetTitle(void) const
void SetRecordingRuleID(uint id)
virtual void SetText(const QString &text)
Holds information on a TV Program one might wish to record.
MythScreenStack * GetStack(const QString &stackname)
QMap< int, int > m_listMatch
QMap< int, int > m_origRecPriorityData
void customEvent(QEvent *event) override
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
void ToMap(InfoMap &progMap, bool showrerecord=false, uint star_range=10) const override
Converts ProgramInfo into QString QHash containing each field in ProgramInfo converted into localized...
MythScreenStack * GetMainStack()
virtual void ShowDetails(void) const
Show the Program Details screen.
MythUIText * m_lastRecordedText
int GetRecordingPriority(void) const
int RecTypePrecedence(RecordingType rectype)
Converts a RecordingType to a simple integer so it's specificity can be compared to another.
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
void Init(void) override
Used after calling Load() to assign data to widgets and other UI initilisation which is prohibited in...
QDateTime as_utc(const QDateTime &old_dt)
Returns copy of QDateTime with TimeSpec set to UTC.
void BuildFocusList(void)
enum RecordingTypes RecordingType
MythUIText * m_recPriorityText
QVariant value(int i) const
void AddButton(const QString &title, QVariant data=0, bool newMenu=false, bool setCurrent=false)
virtual void clone(const RecordingInfo &other, bool ignore_non_serialized_data=false)
Copies important fields from other RecordingInfo.
void changeRecPriority(int howMuch)
Holds information on recordings and videos.
bool Create(void) override
virtual void SetVisible(bool visible)
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
def rating(profile, smoonURL, gate)
ProgramInfo * GetCurrentProgram(void) const override
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
MythUIButtonList * m_programList
QHash< QString, QString > InfoMap
void clear(void) override
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
Construct a recording schedule.
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
void RemoteGetAllScheduledRecordings(vector< ProgramInfo * > &scheduledlist)
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
void SetReturnEvent(QObject *retobject, const QString &resultid)
ProgramRecPriorityInfo * m_currentItem
QString GetSortSubtitle(void) const
static QString toString(Type, uint id)
Converts "recstatus" into a short (unreadable) string.
void RemoveItemFromList(MythUIButtonListItem *item)
QString GetSubtitle(void) const
void SetReturnEvent(QObject *retobject, const QString &resultid)
QMap< int, ProgramRecPriorityInfo > m_programData
virtual void SetTextFromMap(const InfoMap &infoMap)
static void ReschedulePlace(const QString &why)
bool Create(void) override
void scheduleChanged(int recid)
QMap< int, int > m_conMatch
static MSqlQueryInfo InitCon(ConnectionReuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Do Today/Yesterday/Tomorrow transform.
Internal representation of a recording rule, mirrors the record table.
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
void Load(void) override
Load data which will ultimately be displayed on-screen or used to determine what appears on-screen (S...
MythUIText * m_callsignText
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
virtual void EditCustom(void)
Creates a dialog for creating a custom recording rule.
MythUIText * m_channameText
virtual void clone(const ProgramRecPriorityInfo &other, bool ignore_non_serialized_data=false)
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
void customEvent(QEvent *) override
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
MythUIType * GetFocusWidget(void) const
void clear(void) override
MythMainWindow * GetMythMainWindow(void)
bool keyPressEvent(QKeyEvent *) override
Key event handler.
bool MakeTemplate(QString category)
void SetCategory(const QString &cat)
void SetTitle(const QString &t, const QString &st=nullptr)
ProgramAvgDelaySort(bool reverse)
int GetNumSetting(const QString &key, int defaultval=0)
void SortList(ProgramRecPriorityInfo *newCurrentItem=nullptr)
Dialog prompting the user to enter a text string.
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
bool keyPressEvent(QKeyEvent *) override
Key event handler.
#define LOG(_MASK_, _LEVEL_, _STRING_)
MythUIText * m_recProfileText
QString m_title
Recording rule is enabled?
RecStatus::Type GetRecordingStatus(void) const
ProgramRecCountSort(bool reverse)
bool GetBoolSetting(const QString &key, bool defaultval=false)
QString GetSortTitle(void) const
MythUIText * m_channumText
bool Create(void) override
RecordingType GetRecordingRuleType(void) const
QMap< int, int > m_recMatch
void SetReturnEvent(QObject *retobject, const QString &resultid)
MythUIText * m_schedInfoText
void SetRecordingRuleType(RecordingType type)
uint GetRecordingRuleID(void) const
bool LoadFromScheduler(AutoDeleteDeque< TYPE * > &destination, bool &hasConflicts, QString altTable="", int recordid=-1)
bool operator()(const ProgramRecPriorityInfo *a, const ProgramRecPriorityInfo *b) const
ProgramRecPrioritySort(bool reverse)
QMap< int, int > m_nowMatch
MythUIText * m_recPriorityBText
int getRecordID(void)
Returns a record id, creating "record" it if necessary.
bool Load(bool asTemplate=false)
Load a single rule from the recorded table.
Add year to string if not included.
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
QString GetCategory(void) const
static void DBError(const QString &where, const MSqlQuery &query)
void ApplyRecordRecPriorityChange(int)
Sets recording priority of "record", creating "record" if it does not exist.
void updateInfo(MythUIButtonListItem *item)
List::const_iterator const_iterator
void SetRecordingPriority(int priority)
int naturalCompare(const QString &_a, const QString &_b, Qt::CaseSensitivity caseSensitivity)
Event dispatched from MythUI modal dialogs to a listening class containing a result of some form.
MythUIType * GetChild(const QString &name) const
Get a named child of this UIType.
void edit(MythUIButtonListItem *item)
ProgramCountSort(bool reverse)
void SetData(QVariant data)
ProgramLastRecordSort(bool reverse)
RecSearchType m_searchType
void SetSubtitle(const QString &st, const QString &sst=nullptr)
void LoadInBackground(QString message="")
bool Create(void) override