Go to the documentation of this file.
11 #include <QCoreApplication>
32 #define LOC QString("ProgLister: ")
33 #define LOC_WARN QString("ProgLister, Warning: ")
34 #define LOC_ERR QString("ProgLister, Error: ")
37 QString view, QString extraArg,
38 QDateTime selectedTime) :
41 m_extraArg(std::move(extraArg)),
43 m_searchTime(m_startTime),
44 m_selectedTime(std::move(selectedTime)),
46 m_view(std::move(view))
51 query.
prepare(
"SELECT COUNT(*) FROM program WHERE stars > 0");
81 m_title(std::move(
title)),
83 m_searchTime(m_startTime),
85 m_view(
"reverse time"),
111 LOG(VB_GENERAL, LOG_ERR,
"Cannot load screen 'programlist'");
143 case plTitle: value = tr(
"Program Listings");
break;
150 case plSQLSearch: value = tr(
"Power Search");
break;
151 case plRecordid: value = tr(
"Rule Search");
break;
152 case plCategory: value = tr(
"Category Search");
break;
153 case plChannel: value = tr(
"Channel Search");
break;
154 case plMovies: value = tr(
"Movie Search");
break;
155 case plTime: value = tr(
"Time Search");
break;
157 default: value = tr(
"Unknown Search");
break;
178 QCoreApplication::postEvent(
this, slce);
196 "TV Frontend",
e, actions);
198 bool needUpdate =
false;
199 for (
uint i = 0; i <
uint(actions.size()) && !handled; ++i)
201 QString
action = actions[i];
206 else if (
action ==
"NEXTVIEW")
208 else if (
action ==
"CUSTOMEDIT")
210 else if (
action ==
"EDIT")
212 else if (
action ==
"DELETE")
220 else if (
action ==
"GUIDE")
224 else if (
action ==
"TOGGLERECORD")
271 auto *sortMenu =
new MythMenu(tr(
"Sort Options"),
this,
"sortmenu");
272 sortMenu->AddItem(tr(
"Reverse Sort Order"));
273 sortMenu->AddItem(tr(
"Sort By Title"));
274 sortMenu->AddItem(tr(
"Sort By Time"));
283 menu->AddItem(tr(
"Sort"),
nullptr, sortMenu);
314 if (!menuPopup->Create())
375 if (newview >= 0 && newview == oldview)
384 "WHERE phrase = :PHRASE AND searchtype = :TYPE;");
390 "ProgLister::updateKeywordInDB -- delete",
query);
398 const QString& qphrase = text;
401 query.
prepare(
"REPLACE INTO keyword (phrase, searchtype)"
402 "VALUES(:PHRASE, :TYPE );");
408 "ProgLister::updateKeywordInDB -- replace",
query);
434 case plMovies: msg = tr(
"Select Rating");
break;
435 case plChannel: msg = tr(
"Select Channel");
break;
436 case plCategory: msg = tr(
"Select Category");
break;
439 .arg(tr(
"Select a search stored from"))
440 .arg(tr(
"Custom Record"));
break;
482 QString message = tr(
"Start search from date and time");
504 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"No menu");
543 QStringList field = qphrase.split(
':');
544 if (field.size() != 6)
546 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Power search should have 6 fields," +
547 QString(
"\n\t\t\tnot %1 (%2)") .
arg(field.size()).arg(qphrase));
551 static const std::array<QString,6> kBindingList
561 static const std::array<QString,6> kOutputList
563 "program.title LIKE :POWERTITLE ",
564 "program.subtitle LIKE :POWERSUB ",
565 "program.description LIKE :POWERDESC ",
566 "program.category_type = :POWERCATTYPE ",
567 "programgenres.genre = :POWERGENRE ",
568 "channel.callsign = :POWERCALLSIGN ",
571 for (
uint i = 0; i < (
uint) field.size(); i++)
573 if (field[i].isEmpty())
580 bindings[kBindingList[i]] =
581 (!kOutputList[i].contains(
"=")) ?
582 QString(
'%') + field[i] + QString(
'%') : field[i];
585 return output.contains(
"programgenres");
612 if (!record->LoadByProgram(pi))
618 QString message = tr(
"Delete '%1' %2 rule?").arg(record->m_title)
624 popupStack, message,
true);
626 okPopup->SetReturnEvent(
this,
"deleterule");
627 okPopup->SetData(QVariant::fromValue(record));
629 if (okPopup->Create())
642 QString message = tr(
"Delete this episode of '%1'?").arg(pi->
GetTitle());
655 "DELETE FROM oldrecorded "
656 "WHERE chanid = :CHANID AND "
657 " starttime = :STARTTIME");
675 QString message = tr(
"Delete all episodes of '%1'?").arg(pi->
GetTitle());
688 "WHERE title = :TITLE AND future = 0");
713 message +=
"\n\n\n" + tr(
"NOTE: removing items from this list will not "
714 "delete any recordings.");
716 QString
title = tr(
"Previously Recorded");
720 menu->AddItem(tr(
"Allow this episode to re-record"));
722 menu->AddItem(tr(
"Never record this episode"));
723 menu->AddItem(tr(
"Remove this episode from the list"));
724 menu->AddItem(tr(
"Remove all episodes for this title"));
725 menu->AddItem(tr(
"Cancel"));
730 if (menuPopup->Create())
744 0,
true,
"channum, chanid");
747 for (
auto &
channel : channels)
760 QDateTime query_starttime =
m_startTime.addSecs(50 -
765 "JOIN programgenres g1 ON "
766 " program.chanid = g1.chanid AND "
767 " program.starttime = g1.starttime "
768 "LEFT JOIN programgenres g2 ON "
769 " g1.chanid = g2.chanid AND "
770 " g1.starttime = g2.starttime "
771 "WHERE program.endtime > :PGILSTART "
772 "GROUP BY g1.genre, g2.genre;");
786 if (genre1.isEmpty())
789 if (genre1 != lastGenre1)
797 if (genre2.isEmpty() || genre2 == genre1)
800 m_viewList.push_back(genre1 +
":/:" + genre2);
809 "WHERE program.endtime > :PGILSTART "
810 "GROUP BY category");
835 "WHERE searchtype = :SEARCHTYPE;");
846 QString phrase = QString::fromUtf8(
query.
value(0)
847 .toByteArray().constData());
848 if (phrase.isEmpty())
861 const QString& qphrase = view;
864 query2.
prepare(
"REPLACE INTO keyword (phrase, searchtype)"
865 "VALUES(:VIEW, :SEARCHTYPE );");
870 "replace keyword", query2);
922 m_viewList.push_back(QString(
">= %1").
arg((10 - 0.5) / 10.0 - 0.001));
924 for (
int i = 9; i > 0; i--)
926 float stars = (i - 0.5 ) / 10.0 - 0.001;
927 m_viewList.push_back(QString(
">= %1").arg(stars));
953 "WHERE recordid = :RECORDID");
967 "WHERE search > 0 ORDER BY rulename;");
974 if (rulename.isEmpty() || rulename.trimmed().isEmpty())
1006 class plCompare : std::binary_function<const ProgramInfo*, const ProgramInfo*, bool>
1018 if (a->GetSortTitle() != b->GetSortTitle())
1020 if (a->GetSortSubtitle() != b->GetSortSubtitle())
1021 return naturalCompare(a->GetSortSubtitle(), b->GetSortSubtitle()) < 0;
1023 if (a->GetRecordingStatus() == b->GetRecordingStatus())
1024 return a->GetScheduledStartTime() < b->GetScheduledStartTime();
1042 return a->GetScheduledStartTime() < b->GetScheduledStartTime();
1053 if (a->GetSortTitle() != b->GetSortTitle())
1055 if (a->GetSortSubtitle() != b->GetSortSubtitle())
1056 return naturalCompare(a->GetSortSubtitle(), b->GetSortSubtitle()) < 0;
1058 if (a->GetProgramID() != b->GetProgramID())
1059 return a->GetProgramID() < b->GetProgramID();
1061 return a->GetScheduledStartTime() < b->GetScheduledStartTime();
1072 if (a->GetScheduledStartTime() == b->GetScheduledStartTime())
1073 return (a->GetChanID() < b->GetChanID());
1075 return (a->GetScheduledStartTime() < b->GetScheduledStartTime());
1108 bindings[
":PGILSTART"] =
1113 where =
"WHERE channel.deleted IS NULL "
1114 " AND channel.visible > 0 "
1115 " AND program.endtime > :PGILSTART "
1116 " AND (program.title = :PGILPHRASE0 OR "
1117 " (program.seriesid <> '' AND "
1118 " program.seriesid = :PGILPHRASE1)) ";
1119 bindings[
":PGILPHRASE0"] = qphrase;
1124 where =
"LEFT JOIN oldprogram ON "
1125 " oldprogram.oldtitle = program.title "
1126 "WHERE channel.deleted IS NULL "
1127 " AND channel.visible > 0 "
1128 " AND program.endtime > :PGILSTART "
1129 " AND oldprogram.oldtitle IS NULL "
1130 " AND program.manualid = 0 ";
1132 if (qphrase ==
"premieres")
1135 where +=
" ( program.originalairdate = DATE(";
1136 where +=
" CONVERT_TZ(program.starttime, 'Etc/UTC', 'SYSTEM'))";
1137 where +=
" AND (program.category = 'Special' ";
1138 where +=
" OR program.programid LIKE 'EP%0001')) ";
1139 where +=
" OR (program.category_type='movie' ";
1140 where +=
" AND program.stars > 0.5 ";
1141 where +=
" AND program.airdate >= YEAR(NOW()) - 2) ";
1144 else if (qphrase ==
"movies")
1146 where +=
" AND program.category_type = 'movie' ";
1148 else if (qphrase ==
"series")
1150 where +=
" AND program.category_type = 'series' ";
1152 else if (qphrase ==
"specials")
1154 where +=
" AND program.category_type = 'tvshow' ";
1158 where +=
" AND (program.category_type <> 'movie' ";
1159 where +=
" OR program.airdate >= YEAR(NOW()) - 3) ";
1164 where =
"WHERE channel.deleted IS NULL "
1165 " AND channel.visible > 0 "
1166 " AND program.endtime > :PGILSTART "
1167 " AND program.title LIKE :PGILLIKEPHRASE0 ";
1168 bindings[
":PGILLIKEPHRASE0"] = QString(
"%") + qphrase +
'%';
1172 where =
"WHERE channel.deleted IS NULL "
1173 " AND channel.visible > 0 "
1174 " AND program.endtime > :PGILSTART "
1175 " AND (program.title LIKE :PGILLIKEPHRASE1 "
1176 " OR program.subtitle LIKE :PGILLIKEPHRASE2 "
1177 " OR program.description LIKE :PGILLIKEPHRASE3 ) ";
1178 bindings[
":PGILLIKEPHRASE1"] = QString(
"%") + qphrase +
'%';
1179 bindings[
":PGILLIKEPHRASE2"] = QString(
"%") + qphrase +
'%';
1180 bindings[
":PGILLIKEPHRASE3"] = QString(
"%") + qphrase +
'%';
1184 where =
", people, credits "
1185 "WHERE channel.deleted IS NULL "
1186 " AND channel.visible > 0 "
1187 " AND program.endtime > :PGILSTART "
1188 " AND people.name LIKE :PGILPHRASE1 "
1189 " AND credits.person = people.person "
1190 " AND program.chanid = credits.chanid "
1191 " AND program.starttime = credits.starttime";
1192 bindings[
":PGILPHRASE1"] = qphrase;
1201 if (!powerWhere.isEmpty())
1205 where = QString(
"LEFT JOIN programgenres ON "
1206 "program.chanid = programgenres.chanid AND "
1207 "program.starttime = programgenres.starttime ");
1210 where += QString(
"WHERE channel.deleted IS NULL "
1211 " AND channel.visible > 0 "
1212 " AND program.endtime > :PGILSTART "
1213 " AND ( ") + powerWhere +
" ) ";
1219 qphrase.remove(QRegExp(
"^\\s*AND\\s+", Qt::CaseInsensitive));
1220 where = QString(
"WHERE channel.deleted iS NULL "
1221 " AND channel.visible > 0 "
1222 " AND program.endtime > :PGILSTART "
1223 " AND ( %1 ) ").arg(qphrase);
1229 where =
"WHERE channel.deleted IS NULL "
1230 " AND channel.visible > 0 "
1231 " AND program.endtime > :PGILSTART "
1232 " AND channel.chanid = :PGILPHRASE2 ";
1233 bindings[
":PGILPHRASE2"] = qphrase;
1239 where =
"WHERE channel.deleted IS NULL "
1240 " AND channel.visible > 0 "
1241 " AND program.endtime > :PGILSTART "
1242 " AND program.category = :PGILPHRASE3 ";
1243 bindings[
":PGILPHRASE3"] = qphrase;
1247 where =
"JOIN programgenres g ON "
1248 " program.chanid = g.chanid AND "
1249 " program.starttime = g.starttime AND "
1250 " genre = :PGILPHRASE4 "
1251 "WHERE channel.deleted IS NULL "
1252 " AND channel.visible > 0 "
1253 " AND program.endtime > :PGILSTART ";
1254 bindings[
":PGILPHRASE4"] = qphrase;
1258 where =
"JOIN programgenres g1 ON "
1259 " program.chanid = g1.chanid AND "
1260 " program.starttime = g1.starttime AND "
1261 " g1.genre = :GENRE1 "
1262 "JOIN programgenres g2 ON "
1263 " program.chanid = g2.chanid AND "
1264 " program.starttime = g2.starttime AND "
1265 " g2.genre = :GENRE2 "
1266 "WHERE channel.deleted IS NULL "
1267 " AND channel.visible > 0 "
1268 " AND program.endtime > :PGILSTART ";
1275 where =
"WHERE channel.deleted IS NULL "
1276 " AND channel.visible > 0 "
1277 " AND program.endtime > :PGILSTART "
1278 " AND program.category_type = 'movie' "
1279 " AND program.stars " + qphrase +
' ';
1284 searchTime.setTime(QTime(searchTime.time().hour(), 0, 0));
1285 bindings[
":PGILSEARCHTIME1"] = searchTime;
1286 where =
"WHERE channel.deleted IS NULL "
1287 " AND channel.visible > 0 "
1288 " AND program.starttime >= :PGILSEARCHTIME1 ";
1291 where +=
" AND program.starttime < DATE_ADD(:PGILSEARCHTIME2, "
1292 "INTERVAL '1' HOUR) ";
1293 bindings[
":PGILSEARCHTIME2"] = bindings[
":PGILSEARCHTIME1"];
1298 where =
"JOIN recordmatch ON "
1299 " (program.starttime = recordmatch.starttime "
1300 " AND program.chanid = recordmatch.chanid) "
1301 "WHERE channel.deleted IS NULL "
1302 " AND channel.visible > 0 "
1303 " AND program.endtime > :PGILSTART "
1304 " AND recordmatch.recordid = :PGILPHRASE5 ";
1305 bindings[
":PGILPHRASE5"] = qphrase;
1310 query.
prepare(
"SELECT fromclause, whereclause FROM customexample "
1311 "WHERE rulename = :RULENAME;");
1319 where = QString(
"WHERE channel.deleted IS NULL "
1320 " AND channel.visible > 0 "
1321 " AND program.endtime > :PGILSTART "
1322 " AND ( %1 ) ").arg(wherec);
1323 if (!fromc.isEmpty())
1324 where = fromc +
' ' + where;
1331 where = QString(
"AND ( recordid = %1 OR title = :MTITLE )")
1333 bindings[
":MTITLE"] =
m_title;
1337 where = QString(
"AND title = :MTITLE ");
1338 bindings[
":MTITLE"] =
m_title;
1342 where = QString(
"AND recordid = %1 ").arg(
m_recid);
1350 selected = *selectedP;
1351 selectedP = &selected;
1383 if ((*it)->GetSortTitle() != curtitle)
1385 curtitle = (*it)->GetSortTitle();
1451 pginfo.
ToMap(infoMap);
1506 bool dobreak =
false;
1508 dobreak = comp->operator()(selected,
m_itemList[i]);
1510 dobreak = comp->operator()(
m_itemList[i], selected);
1524 if (item->
GetText(
"is_item_initialized").isNull())
1527 pginfo->
ToMap(infoMap);
1537 QString tempSubTitle = pginfo->GetSubtitle();
1538 if (tempSubTitle.trimmed().isEmpty())
1539 tempSubTitle = pginfo->GetTitle();
1540 item->
SetText(tempSubTitle,
"titlesubtitle", state);
1543 item->
DisplayState(QString::number(pginfo->GetStars(10)),
1549 item->
SetText(
"yes",
"is_item_initialized");
1562 tr(
"%1 of %2",
"Current position in list where %1 is the "
1563 "position, %2 is the total count")
1585 pginfo->ToMap(infoMap);
1591 tr(
"%1 of %2",
"Current position in list where %1 is the "
1592 "position, %2 is the total count")
1602 QString
rating = QString::number(pginfo->GetStars(10));
1609 bool needUpdate =
false;
1615 QString resultid = dce->GetId();
1617 int buttonnum = dce->GetResult();
1619 if (resultid ==
"sortmenu")
1639 else if (resultid ==
"deletemenu")
1665 else if (resultid ==
"deleterule")
1668 if (record && buttonnum > 0 && !record->Delete())
1670 LOG(VB_GENERAL, LOG_ERR,
LOC +
1671 "Failed to delete recording rule");
1683 QString
id = slce->GetId();
1685 if (
id == objectName())
1696 auto *me =
dynamic_cast<MythEvent *
>(event);
1700 const QString& message = me->
Message();
1704 else if (message ==
"SCHEDULE_CHANGE")
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
void LoadInBackground(const QString &message="")
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
void Load(void) override
Load data which will ultimately be displayed on-screen or used to determine what appears on-screen (S...
QSqlQuery wrapper that fetches a DB connection from the connection pool.
MythScreenStack * GetMainStack()
Provide a dialog to quickly find an entry in a list.
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
static Type MythEventMessage
MythUIButtonList * m_progList
bool IsDuplicate(void) const
bool LoadFromScheduler(AutoDeleteDeque< TYPE * > &destination, bool &hasConflicts, const QString &altTable="", int recordid=-1)
void Reset(void) override
Reset the widget to it's original state, should not reset changes made by the theme.
void DeleteOldEpisode(bool ok)
SortBy GetSortBy(void) const
virtual void ResetMap(const InfoMap &infoMap)
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
void customEvent(QEvent *event) override
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 ForgetHistory(void)
Forget the recording of a program so it will be recorded again.
void MSqlAddMoreBindings(MSqlBindings &output, MSqlBindings &addfrom)
Add the entries in addfrom to the map in output.
This class is used as a container for messages.
QVariant value(int i) const
virtual bool Create(void)
arg(title).arg(filename).arg(doDelete))
Internal representation of a recording rule, mirrors the record table.
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
void ShowOldRecordedMenu(void)
virtual void ShowGuide(void) const
Show the program guide.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Screen in which all other widgets are contained and rendered.
QStringList m_viewTextList
void SetProgramID(const QString &id)
void SwitchToPreviousView(void)
static MythThemedMenu * menu
void ShowDeleteRuleMenu(void)
virtual void ShowDetails(void) const
Show the Program Details screen.
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
const QString & Message() const
VERBOSE_PREAMBLE Most true
void SortList(SortBy sortby, bool reverseSort)
virtual void EditRecording(bool may_watch_now=false)
Creates a dialog for editing the recording status, blocking until user leaves dialog.
virtual void EditScheduled(void)
Creates a dialog for editing the recording schedule.
MythUIType * GetFocusWidget(void) const
void UpdateKeywordInDB(const QString &text, const QString &oldValue)
QHash< QString, QString > InfoMap
static void SortChannels(ChannelInfoList &list, const QString &order, bool eliminate_duplicates=false)
void addListener(QObject *listener)
Add a listener to the observable.
void DeleteOldSeries(bool ok)
void setAutoDelete(bool auto_delete)
ProgramList m_itemListSave
QString toString(MarkTypes type)
virtual void ShowPrevious(void) const
Show the previous recordings for this recording rule.
friend class PowerSearchPopup
reverse_iterator rend(void)
static QString toUIState(Type recstatus)
QDateTime GetScheduledStartTime(void) const
The scheduled start time of program.
virtual void EditCustom(void)
Creates a dialog for creating a custom recording rule.
void ShowMenu(void) override
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 UpdateButtonList(void)
Basic menu dialog, message and a list of options.
QString GetTitle(void) const
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
QString GetDescription(void) const
void HandleSelected(MythUIButtonListItem *item)
static void DBError(const QString &where, const MSqlQuery &query)
void HandleVisible(MythUIButtonListItem *item)
void FillViewList(const QString &view)
void BuildFocusList(void)
def rating(profile, smoonURL, gate)
#define ACTION_CHANNELSEARCH
virtual void SetTextFromMap(const InfoMap &infoMap)
QString toString(Verbosity v=kLongDescription, const QString &sep=":", const QString &grp="\"") const
void FillItemList(bool restorePosition, bool updateDisp=true)
bool operator()(const ProgramInfo *a, const ProgramInfo *b) override
void SetViewFromTime(QDateTime searchTime)
static void RescheduleCheck(const RecordingInfo &recinfo, const QString &why)
static bool PowerStringToSQL(const QString &qphrase, QString &output, MSqlBindings &bindings)
int naturalCompare(const QString &_a, const QString &_b, Qt::CaseSensitivity caseSensitivity)
static ChannelInfoList GetChannels(uint sourceid, bool visible_only, const QString &group_by=QString(), uint channel_groupid=0)
bool operator()(const ProgramInfo *a, const ProgramInfo *b) override
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
ProgramInfo * GetCurrentProgram(void) const override
MythUIText * m_curviewText
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
void SetViewFromList(const QString &item)
@ kSimplify
Do Today/Yesterday/Tomorrow transform.
Event that can be dispatched from a MythScreenType when it has completed loading.
virtual bool operator()(const ProgramInfo *, const ProgramInfo *)=0
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
RecordingType GetRecordingRuleType(void) const
Holds information on recordings and videos.
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
MythUIText * m_positionText
Dialog asking for user confirmation. Ok and optional Cancel button.
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
void ShowChooseViewMenu(void)
void ClearCurrentProgramInfo(void)
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
bool LoadFromProgram(ProgramList &destination, const QString &where, const QString &groupBy, const QString &orderBy, const MSqlBindings &bindings, const ProgramList &schedList)
RecSearchType m_searchType
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 ToMap(InfoMap &progMap, bool showrerecord=false, uint star_range=10) const
Converts ProgramInfo into QString QHash containing each field in ProgramInfo converted into localized...
virtual void ShowUpcoming(void) const
Show the upcoming recordings for this title.
virtual void QuickRecord(void)
Create a kSingleRecord or bring up recording dialog.
MythMainWindow * GetMythMainWindow(void)
bool operator()(const ProgramInfo *a, const ProgramInfo *b) override
QString m_channelOrdering
ProgLister(MythScreenStack *parent, ProgListType pltype, QString view, QString extraArg, QDateTime selectedTime=QDateTime())
bool Create(void) override
reverse_iterator rbegin(void)
bool LoadFromOldRecorded(ProgramList &destination, const QString &sql, const MSqlBindings &bindings)
void ShowDeleteOldEpisodeMenu(void)
MythScreenStack * GetStack(const QString &Stackname)
void RestoreSelection(const ProgramInfo *selected, int selectedOffset)
virtual void ShowChannelSearch(void) const
Show the channel search.
void customEvent(QEvent *event) override
void SwitchToNextView(void)
iterator erase(iterator it)
@ kDateTimeFull
Default local time.
uint GetRecordingRuleID(void) const
void ShowDeleteItemMenu(void)
virtual ~plCompare()=default
void ShowDeleteOldSeriesMenu(void)
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
MSqlQuery query(MSqlQuery::InitCon())
void UpdateDisplay(const ProgramInfo *selected=nullptr)
MythConfirmationDialog * ShowOkPopup(const QString &message, bool showCancel)
Non-blocking version of MythPopupBox::showOkPopup()
void removeListener(QObject *listener)
Remove a listener to the observable.
void CloseBusyPopup(void)
This widget is used for grouping other widgets for display when a particular named state is called....
t<< doc.toString(4);f.close();LOG(VB_JOBQUEUE, LOG_INFO, "Copying video file");bool res=copyFile(filename, saveDirectory+title+"/"+baseName);if(!res) return 0;if(QFile::exists(filename+".png")) { LOG(VB_JOBQUEUE, LOG_INFO, "Copying preview image");res=copyFile(filename+".png", saveDirectory+title+"/"+baseName+".png");if(!res) return 0;} LOG(VB_JOBQUEUE, LOG_INFO, "Item Archived OK");return 1;}int NativeArchive::exportVideo(QDomElement &itemNode, const QString &saveDirectory){ QString dbVersion=gCoreContext-> GetSetting("DBSchemaVer", "")
bool DisplayState(const QString &name)
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
void SetDupHistory(void)
Set the duplicate flag in oldrecorded.
MythUIText * m_messageText
std::vector< ChannelInfo > ChannelInfoList