12 #include <QCoreApplication> 32 #define LOC QString("ProgLister: ") 33 #define LOC_WARN QString("ProgLister, Warning: ") 34 #define LOC_ERR QString("ProgLister, Error: ") 37 const QString &view,
const QString &extraArg,
38 const QDateTime &selectedTime) :
45 m_searchTime(m_startTime),
46 m_selectedTime(selectedTime),
47 m_channelOrdering(
gCoreContext->GetSetting(
"ChannelOrdering",
"channum")),
70 m_curviewText(nullptr),
71 m_positionText(nullptr),
73 m_messageText(nullptr),
75 m_allowViewDialog(
true)
80 query.
prepare(
"SELECT COUNT(*) FROM program WHERE stars > 0");
84 if (query.
value(0).toInt() == 0)
113 m_searchTime(m_startTime),
115 m_channelOrdering(
gCoreContext->GetSetting(
"ChannelOrdering",
"channum")),
119 m_view(
"reverse time"),
137 m_schedText(nullptr),
138 m_curviewText(nullptr),
139 m_positionText(nullptr),
141 m_messageText(nullptr),
143 m_allowViewDialog(
true)
168 LOG(VB_GENERAL, LOG_ERR,
"Cannot load screen 'programlist'");
196 case plTitle: value = tr(
"Program Listings");
break;
203 case plSQLSearch: value = tr(
"Power Search");
break;
204 case plRecordid: value = tr(
"Rule Search");
break;
205 case plCategory: value = tr(
"Category Search");
break;
206 case plChannel: value = tr(
"Channel Search");
break;
207 case plMovies: value = tr(
"Movie Search");
break;
208 case plTime: value = tr(
"Time Search");
break;
210 default: value = tr(
"Unknown Search");
break;
232 QCoreApplication::postEvent(
this, slce);
250 "TV Frontend", e, actions);
252 bool needUpdate =
false;
253 for (
uint i = 0; i <
uint(actions.size()) && !handled; ++i)
255 QString
action = actions[i];
260 else if (
action ==
"NEXTVIEW")
262 else if (
action ==
"CUSTOMEDIT")
264 else if (
action ==
"EDIT")
266 else if (
action ==
"DELETE")
274 else if (
action ==
"GUIDE")
278 else if (
action ==
"TOGGLERECORD")
326 sortMenu->
AddItem(tr(
"Reverse Sort Order"));
327 sortMenu->
AddItem(tr(
"Sort By Title"));
328 sortMenu->
AddItem(tr(
"Sort By Time"));
337 menu->AddItem(tr(
"Sort"),
nullptr, sortMenu);
429 if (newview >= 0 && newview == oldview)
437 query.
prepare(
"DELETE FROM keyword " 438 "WHERE phrase = :PHRASE AND searchtype = :TYPE;");
444 "ProgLister::updateKeywordInDB -- delete", query);
452 QString qphrase = text;
455 query.
prepare(
"REPLACE INTO keyword (phrase, searchtype)" 456 "VALUES(:PHRASE, :TYPE );");
462 "ProgLister::updateKeywordInDB -- replace", query);
474 bool connect_string =
true;
490 case plMovies: msg = tr(
"Select Rating");
break;
491 case plChannel: msg = tr(
"Select Channel");
break;
492 case plCategory: msg = tr(
"Select Category");
break;
495 .arg(tr(
"Select a search stored from"))
496 .arg(tr(
"Custom Record"));
break;
520 QString message = tr(
"Start search from date and time");
525 connect_string =
false;
547 connect(screen, SIGNAL(haveResult( QString)),
552 connect(screen, SIGNAL(haveResult( QDateTime)),
585 QStringList field = qphrase.split(
':');
586 if (field.size() != 6)
588 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Power search should have 6 fields," +
589 QString(
"\n\t\t\tnot %1 (%2)") .arg(field.size()).arg(qphrase));
593 static const QString bindinglist[6] =
603 static const QString outputlist[6] =
605 "program.title LIKE :POWERTITLE ",
606 "program.subtitle LIKE :POWERSUB ",
607 "program.description LIKE :POWERDESC ",
608 "program.category_type = :POWERCATTYPE ",
609 "programgenres.genre = :POWERGENRE ",
610 "channel.callsign = :POWERCALLSIGN ",
613 for (
uint i = 0; i < (
uint) field.size(); i++)
615 if (field[i].isEmpty())
622 bindings[bindinglist[i]] =
623 (!outputlist[i].contains(
"=")) ?
624 QString(
'%') + field[i] + QString(
'%') : field[i];
627 return output.contains(
"programgenres");
660 QString message = tr(
"Delete '%1' %2 rule?").arg(record->
m_title)
666 popupStack, message,
true);
669 okPopup->
SetData(qVariantFromValue(record));
684 QString message = tr(
"Delete this episode of '%1'?").arg(pi->
GetTitle());
697 "DELETE FROM oldrecorded " 698 "WHERE chanid = :CHANID AND " 699 " starttime = :STARTTIME");
717 QString message = tr(
"Delete all episodes of '%1'?").arg(pi->
GetTitle());
729 query.
prepare(
"DELETE FROM oldrecorded " 730 "WHERE title = :TITLE AND future = 0");
755 message +=
"\n\n\n" + tr(
"NOTE: removing items from this list will not " 756 "delete any recordings.");
758 QString title = tr(
"Previously Recorded");
762 menu->AddItem(tr(
"Allow this episode to re-record"));
764 menu->AddItem(tr(
"Never record this episode"));
765 menu->AddItem(tr(
"Remove this episode from the list"));
766 menu->AddItem(tr(
"Remove all episodes for this title"));
767 menu->AddItem(tr(
"Cancel"));
786 0,
true,
"channum, chanid");
789 for (
uint i = 0; i < channels.size(); ++i)
793 m_viewList.push_back(QString::number(channels[i].chanid));
802 QDateTime query_starttime =
m_startTime.addSecs(50 -
805 query.
prepare(
"SELECT g1.genre, g2.genre " 807 "JOIN programgenres g1 ON " 808 " program.chanid = g1.chanid AND " 809 " program.starttime = g1.starttime " 810 "LEFT JOIN programgenres g2 ON " 811 " g1.chanid = g2.chanid AND " 812 " g1.starttime = g2.starttime " 813 "WHERE program.endtime > :PGILSTART " 814 "GROUP BY g1.genre, g2.genre;");
815 query.
bindValue(
":PGILSTART", query_starttime);
827 QString genre1 = query.
value(0).toString();
828 if (genre1.isEmpty())
831 if (genre1 != lastGenre1)
838 QString genre2 = query.
value(1).toString();
839 if (genre2.isEmpty() || genre2 == genre1)
842 m_viewList.push_back(genre1 +
":/:" + genre2);
849 query.
prepare(
"SELECT category " 851 "WHERE program.endtime > :PGILSTART " 852 "GROUP BY category");
853 query.
bindValue(
":PGILSTART", query_starttime);
859 QString category = query.
value(0).toString();
860 if (category.isEmpty())
862 category = query.
value(0).toString();
876 query.
prepare(
"SELECT phrase FROM keyword " 877 "WHERE searchtype = :SEARCHTYPE;");
888 QString phrase = QString::fromUtf8(query.
value(0)
889 .toByteArray().constData());
890 if (phrase.isEmpty())
903 QString qphrase = view;
906 query2.
prepare(
"REPLACE INTO keyword (phrase, searchtype)" 907 "VALUES(:VIEW, :SEARCHTYPE );");
912 "replace keyword", query2);
964 m_viewList.push_back(QString(
">= %1").arg((10 - 0.5) / 10.0 - 0.001));
966 for (
int i = 9; i > 0; i--)
968 float stars = (i - 0.5 ) / 10.0 - 0.001;
969 m_viewList.push_back(QString(
">= %1").arg(stars));
994 query.
prepare(
"SELECT title FROM record " 995 "WHERE recordid = :RECORDID");
1000 QString title = query.
value(0).toString();
1008 query.
prepare(
"SELECT rulename FROM customexample " 1009 "WHERE search > 0 ORDER BY rulename;");
1013 while (query.
next())
1015 QString rulename = query.
value(0).toString();
1016 if (rulename.isEmpty() || rulename.trimmed().isEmpty())
1018 rulename = query.
value(0).toString();
1023 if (!view.isEmpty())
1040 if (!view.isEmpty())
1048 class plCompare : binary_function<const ProgramInfo*, const ProgramInfo*, bool>
1060 if (a->GetSortTitle() !=
b->GetSortTitle())
1062 if (a->GetSortSubtitle() !=
b->GetSortSubtitle())
1063 return naturalCompare(a->GetSortSubtitle(),
b->GetSortSubtitle()) < 0;
1065 if (a->GetRecordingStatus() ==
b->GetRecordingStatus())
1066 return a->GetScheduledStartTime() <
b->GetScheduledStartTime();
1084 return a->GetScheduledStartTime() <
b->GetScheduledStartTime();
1095 if (a->GetSortTitle() !=
b->GetSortTitle())
1097 if (a->GetSortSubtitle() !=
b->GetSortSubtitle())
1098 return naturalCompare(a->GetSortSubtitle(),
b->GetSortSubtitle()) < 0;
1100 if (a->GetProgramID() !=
b->GetProgramID())
1101 return a->GetProgramID() <
b->GetProgramID();
1103 return a->GetScheduledStartTime() <
b->GetScheduledStartTime();
1114 if (a->GetScheduledStartTime() ==
b->GetScheduledStartTime())
1115 return (a->GetChanID() <
b->GetChanID());
1117 return (a->GetScheduledStartTime() <
b->GetScheduledStartTime());
1150 bindings[
":PGILSTART"] =
1155 where =
"WHERE channel.visible = 1 " 1156 " AND program.endtime > :PGILSTART " 1157 " AND (program.title = :PGILPHRASE0 OR " 1158 " (program.seriesid <> '' AND " 1159 " program.seriesid = :PGILPHRASE1)) ";
1160 bindings[
":PGILPHRASE0"] = qphrase;
1165 where =
"LEFT JOIN oldprogram ON " 1166 " oldprogram.oldtitle = program.title " 1167 "WHERE channel.visible = 1 " 1168 " AND program.endtime > :PGILSTART " 1169 " AND oldprogram.oldtitle IS NULL " 1170 " AND program.manualid = 0 ";
1172 if (qphrase ==
"premieres")
1175 where +=
" ( program.originalairdate = DATE(";
1176 where +=
" CONVERT_TZ(program.starttime, 'Etc/UTC', 'SYSTEM'))";
1177 where +=
" AND (program.category = 'Special' ";
1178 where +=
" OR program.programid LIKE 'EP%0001')) ";
1179 where +=
" OR (program.category_type='movie' ";
1180 where +=
" AND program.stars > 0.5 ";
1181 where +=
" AND program.airdate >= YEAR(NOW()) - 2) ";
1184 else if (qphrase ==
"movies")
1186 where +=
" AND program.category_type = 'movie' ";
1188 else if (qphrase ==
"series")
1190 where +=
" AND program.category_type = 'series' ";
1192 else if (qphrase ==
"specials")
1194 where +=
" AND program.category_type = 'tvshow' ";
1198 where +=
" AND (program.category_type <> 'movie' ";
1199 where +=
" OR program.airdate >= YEAR(NOW()) - 3) ";
1204 where =
"WHERE channel.visible = 1 " 1205 " AND program.endtime > :PGILSTART " 1206 " AND program.title LIKE :PGILLIKEPHRASE0 ";
1207 bindings[
":PGILLIKEPHRASE0"] = QString(
"%") + qphrase +
'%';
1211 where =
"WHERE channel.visible = 1 " 1212 " AND program.endtime > :PGILSTART " 1213 " AND (program.title LIKE :PGILLIKEPHRASE1 " 1214 " OR program.subtitle LIKE :PGILLIKEPHRASE2 " 1215 " OR program.description LIKE :PGILLIKEPHRASE3 ) ";
1216 bindings[
":PGILLIKEPHRASE1"] = QString(
"%") + qphrase +
'%';
1217 bindings[
":PGILLIKEPHRASE2"] = QString(
"%") + qphrase +
'%';
1218 bindings[
":PGILLIKEPHRASE3"] = QString(
"%") + qphrase +
'%';
1222 where =
", people, credits WHERE channel.visible = 1 " 1223 " AND program.endtime > :PGILSTART " 1224 " AND people.name LIKE :PGILPHRASE1 " 1225 " AND credits.person = people.person " 1226 " AND program.chanid = credits.chanid " 1227 " AND program.starttime = credits.starttime";
1228 bindings[
":PGILPHRASE1"] = qphrase;
1237 if (!powerWhere.isEmpty())
1240 where = QString(
"LEFT JOIN programgenres ON " 1241 "program.chanid = programgenres.chanid AND " 1242 "program.starttime = programgenres.starttime ");
1244 where += QString(
"WHERE channel.visible = 1 " 1245 " AND program.endtime > :PGILSTART " 1246 " AND ( ") + powerWhere +
" ) ";
1252 qphrase.remove(QRegExp(
"^\\s*AND\\s+", Qt::CaseInsensitive));
1253 where = QString(
"WHERE channel.visible = 1 " 1254 " AND program.endtime > :PGILSTART " 1255 " AND ( %1 ) ").arg(qphrase);
1261 where =
"WHERE channel.visible = 1 " 1262 " AND program.endtime > :PGILSTART " 1263 " AND channel.chanid = :PGILPHRASE2 ";
1264 bindings[
":PGILPHRASE2"] = qphrase;
1270 where =
"WHERE channel.visible = 1 " 1271 " AND program.endtime > :PGILSTART " 1272 " AND program.category = :PGILPHRASE3 ";
1273 bindings[
":PGILPHRASE3"] = qphrase;
1277 where =
"JOIN programgenres g ON " 1278 " program.chanid = g.chanid AND " 1279 " program.starttime = g.starttime AND " 1280 " genre = :PGILPHRASE4 " 1281 "WHERE channel.visible = 1 " 1282 " AND program.endtime > :PGILSTART ";
1283 bindings[
":PGILPHRASE4"] = qphrase;
1287 where =
"JOIN programgenres g1 ON " 1288 " program.chanid = g1.chanid AND " 1289 " program.starttime = g1.starttime AND " 1290 " g1.genre = :GENRE1 " 1291 "JOIN programgenres g2 ON " 1292 " program.chanid = g2.chanid AND " 1293 " program.starttime = g2.starttime AND " 1294 " g2.genre = :GENRE2 " 1295 "WHERE channel.visible = 1 " 1296 " AND program.endtime > :PGILSTART ";
1303 where =
"WHERE channel.visible = 1 " 1304 " AND program.endtime > :PGILSTART " 1305 " AND program.category_type = 'movie' " 1306 " AND program.stars " + qphrase +
' ';
1311 searchTime.setTime(QTime(searchTime.time().hour(), 0, 0));
1312 bindings[
":PGILSEARCHTIME1"] = searchTime;
1313 where =
"WHERE channel.visible = 1 " 1314 " AND program.starttime >= :PGILSEARCHTIME1 ";
1317 where +=
" AND program.starttime < DATE_ADD(:PGILSEARCHTIME2, " 1318 "INTERVAL '1' HOUR) ";
1319 bindings[
":PGILSEARCHTIME2"] = bindings[
":PGILSEARCHTIME1"];
1324 where =
"JOIN recordmatch ON " 1325 " (program.starttime = recordmatch.starttime " 1326 " AND program.chanid = recordmatch.chanid) " 1327 "WHERE channel.visible = 1 " 1328 " AND program.endtime > :PGILSTART " 1329 " AND recordmatch.recordid = :PGILPHRASE5 ";
1330 bindings[
":PGILPHRASE5"] = qphrase;
1335 query.
prepare(
"SELECT fromclause, whereclause FROM customexample " 1336 "WHERE rulename = :RULENAME;");
1341 QString fromc = query.
value(0).toString();
1342 QString wherec = query.
value(1).toString();
1344 where = QString(
"WHERE channel.visible = 1 " 1345 " AND program.endtime > :PGILSTART " 1346 " AND ( %1 ) ").arg(wherec);
1347 if (!fromc.isEmpty())
1348 where = fromc +
' ' + where;
1355 where = QString(
"AND ( recordid = %1 OR title = :MTITLE )")
1357 bindings[
":MTITLE"] =
m_title;
1361 where = QString(
"AND title = :MTITLE ");
1362 bindings[
":MTITLE"] =
m_title;
1366 where = QString(
"AND recordid = %1 ").arg(
m_recid);
1374 selected = *selectedP;
1375 selectedP = &selected;
1407 if ((*it)->GetSortTitle() != curtitle)
1409 curtitle = (*it)->GetSortTitle();
1464 pginfo.
ToMap(infoMap);
1537 if (item->
GetText(
"is_item_initialized").isNull())
1540 pginfo->
ToMap(infoMap);
1551 if (tempSubTitle.trimmed().isEmpty())
1553 item->
SetText(tempSubTitle,
"titlesubtitle", state);
1562 item->
SetText(
"yes",
"is_item_initialized");
1576 tr(
"%1 of %2",
"Current position in list where %1 is the " 1577 "position, %2 is the total count")
1599 pginfo->
ToMap(infoMap);
1605 tr(
"%1 of %2",
"Current position in list where %1 is the " 1606 "position, %2 is the total count")
1623 bool needUpdate =
false;
1629 QString resultid = dce->
GetId();
1633 if (resultid ==
"sortmenu")
1653 else if (resultid ==
"deletemenu")
1679 else if (resultid ==
"deleterule")
1683 if (record && buttonnum > 0 && !record->
Delete())
1685 LOG(VB_GENERAL, LOG_ERR,
LOC +
1686 "Failed to delete recording rule");
1699 QString
id = slce->
GetId();
1701 if (
id == objectName())
1712 MythEvent *me = static_cast<MythEvent *>(event);
1713 QString message = me->
Message();
1717 else if (message ==
"SCHEDULE_CHANGE")
This widget is used for grouping other widgets for display when a particular named state is called.
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
iterator erase(iterator it)
float GetStars(void) const
void setAutoDelete(bool auto_delete)
virtual ~plCompare()=default
friend class PowerSearchPopup
void bindValue(const QString &placeholder, const QVariant &val)
ProgramInfo * GetCurrentProgram(void) const override
void ShowMenu(void) override
bool keyPressEvent(QKeyEvent *) override
Key event handler.
void FillItemList(bool restorePosition, bool updateDisp=true)
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.
VERBOSE_PREAMBLE Most true
void SetViewFromTime(QDateTime searchTime)
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)
MythConfirmationDialog * ShowOkPopup(const QString &message, QObject *parent, const char *slot, bool showCancel)
Non-blocking version of MythPopupBox::showOkPopup()
QString toString(MarkTypes type)
void FillViewList(const QString &view)
virtual void ShowUpcoming(void) const
Show the upcoming recordings for this title.
static Type MythEventMessage
void removeListener(QObject *listener)
Remove a listener to the observable.
MythUIText * m_curviewText
void ShowDeleteOldEpisodeMenu(void)
QSqlQuery wrapper that fetches a DB connection from the connection pool.
bool Create(void) override
void ShowChooseViewMenu(void)
virtual bool Create(void)
Basic menu dialog, message and a list of options.
QString toString(Verbosity v=kLongDescription, QString sep=":", QString grp="\"") const
QString GetTitle(void) const
virtual void SetText(const QString &text)
Holds information on a TV Program one might wish to record.
MythScreenStack * GetStack(const QString &stackname)
void ShowDeleteItemMenu(void)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
MythScreenStack * GetMainStack()
void customEvent(QEvent *) override
virtual void ShowDetails(void) const
Show the Program Details screen.
void addListener(QObject *listener)
Add a listener to the observable.
void ClearCurrentProgramInfo(void)
void SetDupHistory(void)
Set the duplicate flag in oldrecorded.
static MythThemedMenu * menu
static void SortChannels(ChannelInfoList &list, const QString &order, bool eliminate_duplicates=false)
static QString toUIState(Type)
Event that can be dispatched from a MythScreenType when it has completed loading.
void BuildFocusList(void)
MythUIText * m_positionText
QString m_channelOrdering
reverse_iterator rbegin(void)
ProgLister(MythScreenStack *parent, ProgListType pltype, const QString &view, const QString &extraArg, const QDateTime &selectedTime=QDateTime())
QDateTime GetScheduledStartTime(void) const
The scheduled start time of program.
QVariant value(int i) const
void RestoreSelection(const ProgramInfo *selected, int selectedOffset)
Holds information on recordings and videos.
virtual void SetVisible(bool visible)
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
RecSearchType m_searchType
This class is used as a container for messages.
def rating(profile, smoonURL, gate)
void DeleteOldEpisode(bool ok)
virtual void ShowGuide(void) const
Show the program guide.
virtual void ShowPrevious(void) const
Show the previous recordings for this recording rule.
void ForgetHistory(void)
Forget the recording of a program so it will be recorded again.
QHash< QString, QString > InfoMap
void ShowDeleteOldSeriesMenu(void)
QString GetDescription(void) const
void Load(void) override
Load data which will ultimately be displayed on-screen or used to determine what appears on-screen (S...
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
static void RescheduleCheck(const RecordingInfo &recinfo, const QString &why)
void Reset(void) override
Reset the widget to it's original state, should not reset changes made by the theme.
void SwitchToNextView(void)
QString GetSubtitle(void) const
void SetReturnEvent(QObject *retobject, const QString &resultid)
static ChannelInfoList GetChannels(uint sourceid, bool visible_only, const QString &group_by=QString(), uint channel_groupid=0)
virtual void SetTextFromMap(const InfoMap &infoMap)
bool operator()(const ProgramInfo *a, const ProgramInfo *b) override
MythUIText * m_messageText
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
void UpdateDisplay(const ProgramInfo *selected=nullptr)
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.
void ShowOldRecordedMenu(void)
MythUIButtonList * m_progList
bool operator()(const ProgramInfo *a, const ProgramInfo *b) override
virtual void EditCustom(void)
Creates a dialog for creating a custom recording rule.
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
SortBy GetSortBy(void) const
MythMainWindow * GetMythMainWindow(void)
virtual void ShowChannelSearch(void) const
Show the channel search.
vector< ChannelInfo > ChannelInfoList
void SwitchToPreviousView(void)
void SetViewFromList(QString item)
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_)
void CloseBusyPopup(void)
QStringList m_viewTextList
bool PowerStringToSQL(const QString &qphrase, QString &output, MSqlBindings &bindings) const
QString m_title
Recording rule is enabled?
RecStatus::Type GetRecordingStatus(void) const
ProgramList m_itemListSave
bool LoadFromProgram(ProgramList &destination, const QString &where, const QString &groupBy, const QString &orderBy, const MSqlBindings &bindings, const ProgramList &schedList)
bool Create(void) override
virtual void QuickRecord(void)
Create a kSingleRecord or bring up recording dialog.
virtual void EditScheduled(void)
Creates a dialog for editing the recording schedule.
RecordingType GetRecordingRuleType(void) const
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
uint GetRecordingRuleID(void) const
bool LoadFromScheduler(AutoDeleteDeque< TYPE * > &destination, bool &hasConflicts, QString altTable="", int recordid=-1)
reverse_iterator rend(void)
void SetProgramID(const QString &id)
void UpdateButtonList(void)
bool DisplayState(const QString &name)
bool LoadFromOldRecorded(ProgramList &destination, const QString &sql, const MSqlBindings &bindings)
void MSqlAddMoreBindings(MSqlBindings &output, MSqlBindings &addfrom)
Add the entries in addfrom to the map in output.
void HandleVisible(MythUIButtonListItem *item)
#define ACTION_CHANNELSEARCH
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
static void DBError(const QString &where, const MSqlQuery &query)
Screen in which all other widgets are contained and rendered.
void UpdateKeywordInDB(const QString &text, const QString &oldValue)
const QString & Message() const
List::const_iterator const_iterator
static int comp(const void *va, const void *vb)
void DeleteOldSeries(bool ok)
int naturalCompare(const QString &_a, const QString &_b, Qt::CaseSensitivity caseSensitivity)
virtual void ResetMap(const InfoMap &infoMap)
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.
bool operator()(const ProgramInfo *a, const ProgramInfo *b) override
void ShowDeleteRuleMenu(void)
void SetData(QVariant data)
virtual bool operator()(const ProgramInfo *, const ProgramInfo *)=0
virtual void EditRecording(bool may_watch_now=false)
Creates a dialog for editing the recording status, blocking until user leaves dialog.
void SortList(SortBy sortby, bool reverseSort)
Provide a dialog to quickly find an entry in a list.
void LoadInBackground(QString message="")
bool Create(void) override
bool IsDuplicate(void) const
void HandleSelected(MythUIButtonListItem *item)