MythTV  master
zmconsole.cpp
Go to the documentation of this file.
1 /* ============================================================
2  * This program is free software; you can redistribute it
3  * and/or modify it under the terms of the GNU General
4  * Public License as published bythe Free Software Foundation;
5  * either version 2, or (at your option)
6  * any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * ============================================================ */
14 
15 // C++
16 #include <chrono>
17 #include <cstdlib>
18 #include <iostream>
19 #include <unistd.h>
20 
21 // qt
22 #include <QTimer>
23 
24 // MythTV
25 #include <libmyth/mythcontext.h>
26 #include <libmythbase/mythdate.h>
27 #include <libmythbase/mythdbcon.h>
29 #include <libmythui/mythuitext.h>
30 
31 // zoneminder
32 #include "zmclient.h"
33 #include "zmconsole.h"
34 
35 constexpr std::chrono::milliseconds STATUS_UPDATE_TIME { 10s }; // update the status every 10 seconds
36 constexpr std::chrono::milliseconds TIME_UPDATE_TIME { 1s }; // update the time every 1 second
37 
39 {
40  if (!LoadWindowFromXML("zoneminder-ui.xml", "functionpopup", this))
41  return false;
42 
43  bool err = false;
44  UIUtilE::Assign(this, m_captionText, "caption_text", &err);
45  UIUtilE::Assign(this, m_functionList, "function_list", &err);
46  UIUtilE::Assign(this, m_enabledCheck, "enable_check", &err);
47  UIUtilE::Assign(this, m_notificationCheck, "notification_check", &err);
48  UIUtilE::Assign(this, m_okButton, "ok_button", &err);
49 
50  if (err)
51  {
52  LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'functionpopup'");
53  return false;
54  }
55 
56  new MythUIButtonListItem(m_functionList, "Monitor");
57  new MythUIButtonListItem(m_functionList, "Modect");
58  new MythUIButtonListItem(m_functionList, "Nodect");
59  new MythUIButtonListItem(m_functionList, "Record");
60  new MythUIButtonListItem(m_functionList, "Mocord");
62 
64 
66 
68 
69  if (m_monitor->enabled)
71  else
73 
74 
77  else
79 
81 
83 
84  return true;
85 }
86 
88 {
89  QString function = m_functionList->GetValue();
90  bool enabled = (m_enabledCheck->GetCheckState() == MythUIStateType::Full);
91  bool showNotifications = (m_notificationCheck->GetCheckState() == MythUIStateType::Full);
92 
93  LOG(VB_GENERAL, LOG_INFO,
94  "Monitor id : " + QString::number(m_monitor->id) +
95  " function change " + m_monitor->function + " -> " + function +
96  ", enable value " + QString::number(m_monitor->enabled) + " -> " + QString::number(enabled) +
97  ", notification value " + QString::number(m_monitor->showNotifications) + " -> " + QString::number(showNotifications));
98 
99  m_monitor->showNotifications = showNotifications;
101 
102  if ((m_monitor->function == function) && (m_monitor->enabled == enabled))
103  {
104  LOG(VB_GENERAL, LOG_WARNING,
105  "Monitor Function/Enable values not changed so not updating.");
106  emit haveResult(false);
107  Close();
108  return;
109  }
110 
111  ZMClient::get()->setMonitorFunction(m_monitor->id, function, enabled);
112 
113  emit haveResult(true);
114 
115  Close();
116 }
117 
119 
121  :MythScreenType(parent, "zmconsole"),
122  m_popupStack(GetMythMainWindow()->GetStack("popup stack")),
123  m_timeTimer(new QTimer(this)),
124  m_timeFormat(gCoreContext->GetSetting("TimeFormat", "h:mm AP")),
125  m_updateTimer(new QTimer(this))
126 {
127  connect(m_timeTimer, &QTimer::timeout, this,
129 
130  connect(m_updateTimer, &QTimer::timeout, this,
132 }
133 
135 {
136  delete m_timeTimer;
137 }
138 
140 {
141  // Load the theme for this screen
142  bool foundtheme = LoadWindowFromXML("zoneminder-ui.xml", "zmconsole", this);
143  if (!foundtheme)
144  return false;
145 
146  bool err = false;
147  UIUtilE::Assign(this, m_monitorList, "monitor_list", &err);
148  UIUtilE::Assign(this, m_statusText, "status_text", &err);
149  UIUtilE::Assign(this, m_timeText, "time_text", &err);
150  UIUtilE::Assign(this, m_dateText, "date_text", &err);
151  UIUtilE::Assign(this, m_loadText, "load_text", &err);
152  UIUtilE::Assign(this, m_diskText, "disk_text", &err);
153 
154  if (err)
155  {
156  LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'zmconsole'");
157  return false;
158  }
159 
160  BuildFocusList();
161 
163 
165  m_updateTimer->start(100ms);
166 
167  updateTime();
168 
169  return true;
170 }
171 
173 {
174  QString s = MythDate::current().toLocalTime().toString(m_timeFormat);
175 
176  if (s != m_timeText->GetText())
177  m_timeText->SetText(s);
178 
179  s = MythDate::current().toLocalTime().toString("dddd\ndd MMM yyyy");
180 
181  if (s != m_dateText->GetText())
182  m_dateText->SetText(s);
183 }
184 
186 {
187  m_updateTimer->stop();
188  getDaemonStatus();
191 }
192 
194 {
196 
197  if (m_daemonStatus.left(7) == "running")
198  {
199  m_statusText->SetFontState("running");
200  m_statusText->SetText(tr("Running"));
201  }
202  else
203  {
204  m_statusText->SetFontState("stopped");
205  m_statusText->SetText(tr("Stopped"));
206  }
207 
208  m_loadText->SetText("Load: " + m_cpuStat);
209  m_diskText->SetText("Disk: " + m_diskStat);
210 }
211 
213 {
215 }
216 
217 bool ZMConsole::keyPressEvent(QKeyEvent *event)
218 {
219  if (GetFocusWidget()->keyPressEvent(event))
220  return true;
221 
222  QStringList actions;
223  bool handled = GetMythMainWindow()->TranslateKeyPress("Global", event, actions);
224 
225  for (int i = 0; i < actions.size() && !handled; i++)
226  {
227  QString action = actions[i];
228  handled = true;
229 
230  if (action == "MENU")
231  {
233  }
234  else
235  handled = false;
236  }
237 
238  if (!handled && MythScreenType::keyPressEvent(event))
239  handled = true;
240 
241  return handled;
242 }
243 
245 {
246  auto *currentMonitor = m_monitorList->GetItemCurrent()->GetData().value<Monitor*>();
247  if (!currentMonitor)
248  return;
249 
250  m_functionDialog = new FunctionDialog(m_popupStack, currentMonitor);
251 
252  if (m_functionDialog->Create())
253  {
257  }
258 }
259 
261 {
263 
264  int pos = m_monitorList->GetCurrentPos();
265  m_monitorList->Reset();
266 
267  for (int x = 0; x < ZMClient::get()->getMonitorCount(); x++)
268  {
269  Monitor *monitor = ZMClient::get()->getMonitorAt(x);
270 
271  if (monitor)
272  {
273  auto *item = new MythUIButtonListItem(m_monitorList,
274  "", nullptr, true, MythUIButtonListItem::NotChecked);
275  item->SetData(QVariant::fromValue(monitor));
276  item->SetText(monitor->name, "name");
277  item->SetText(monitor->zmcStatus, "zmcstatus");
278  item->SetText(monitor->zmaStatus, "zmastatus");
279  item->SetText(QString("%1").arg(monitor->events), "eventcount");
280  }
281  }
282 
284 }
285 
286 void ZMConsole::functionChanged(bool changed)
287 {
288  if (changed)
289  updateStatus();
290 }
MythUIButton::Clicked
void Clicked()
MythUIText::SetFontState
void SetFontState(const QString &state)
Definition: mythuitext.cpp:219
ZMConsole::m_diskText
MythUIText * m_diskText
Definition: zmconsole.h:85
MythUIButtonList::GetItemCurrent
MythUIButtonListItem * GetItemCurrent() const
Definition: mythuibuttonlist.cpp:1591
hardwareprofile.smolt.timeout
float timeout
Definition: smolt.py:102
FunctionDialog
Definition: zmconsole.h:31
ZMConsole::ZMConsole
ZMConsole(MythScreenStack *parent)
Definition: zmconsole.cpp:120
mythuitext.h
ZMConsole::m_diskStat
QString m_diskStat
Definition: zmconsole.h:95
ZMConsole::~ZMConsole
~ZMConsole() override
Definition: zmconsole.cpp:134
Monitor::function
QString function
Definition: zmdefines.h:109
ZMConsole::functionChanged
void functionChanged(bool changed)
Definition: zmconsole.cpp:286
Monitor::name
QString name
Definition: zmdefines.h:107
MythScreenType::Close
virtual void Close()
Definition: mythscreentype.cpp:386
FunctionDialog::Create
bool Create() override
Definition: zmconsole.cpp:38
ZMClient::getServerStatus
void getServerStatus(QString &status, QString &cpuStat, QString &diskStat)
Definition: zmclient.cpp:256
ZMClient::getMonitorCount
int getMonitorCount(void)
Definition: zmclient.cpp:837
Monitor::events
int events
Definition: zmdefines.h:114
ZMConsole::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: zmconsole.cpp:217
MythScreenStack
Definition: mythscreenstack.h:16
ZMConsole::m_cpuStat
QString m_cpuStat
Definition: zmconsole.h:94
mythdbcon.h
FunctionDialog::m_functionList
MythUIButtonList * m_functionList
Definition: zmconsole.h:50
ZMConsole::m_monitorList
MythUIButtonList * m_monitorList
Definition: zmconsole.h:79
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
MythScreenType
Screen in which all other widgets are contained and rendered.
Definition: mythscreentype.h:45
Monitor::zmcStatus
QString zmcStatus
Definition: zmdefines.h:112
ZMConsole::getMonitorStatus
void getMonitorStatus(void)
Definition: zmconsole.cpp:212
FunctionDialog::haveResult
void haveResult(bool)
MythDate::current
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:14
MythScreenType::GetFocusWidget
MythUIType * GetFocusWidget(void) const
Definition: mythscreentype.cpp:113
ZMConsole::updateStatus
void updateStatus()
Definition: zmconsole.cpp:185
Monitor::enabled
bool enabled
Definition: zmdefines.h:110
ZMClient::saveNotificationMonitors
void saveNotificationMonitors(void)
Definition: zmclient.cpp:943
MythUIButtonListItem
Definition: mythuibuttonlist.h:41
zmclient.h
zmconsole.h
mythdate.h
FunctionDialog::m_captionText
MythUIText * m_captionText
Definition: zmconsole.h:49
FunctionDialog::m_notificationCheck
MythUICheckBox * m_notificationCheck
Definition: zmconsole.h:52
ZMConsole::showEditFunctionPopup
void showEditFunctionPopup()
Definition: zmconsole.cpp:244
MythMainWindow::TranslateKeyPress
bool TranslateKeyPress(const QString &Context, QKeyEvent *Event, QStringList &Actions, bool AllowJumps=true)
Get a list of actions for a keypress in the given context.
Definition: mythmainwindow.cpp:1112
MythUIButtonList::GetCurrentPos
int GetCurrentPos() const
Definition: mythuibuttonlist.h:238
ZMConsole::m_timeTimer
QTimer * m_timeTimer
Definition: zmconsole.h:90
MythScreenType::SetFocusWidget
bool SetFocusWidget(MythUIType *widget=nullptr)
Definition: mythscreentype.cpp:118
FunctionDialog::m_okButton
MythUIButton * m_okButton
Definition: zmconsole.h:53
MythScreenType::BuildFocusList
void BuildFocusList(void)
Definition: mythscreentype.cpp:206
ZMConsole::m_statusText
MythUIText * m_statusText
Definition: zmconsole.h:81
STATUS_UPDATE_TIME
constexpr std::chrono::milliseconds STATUS_UPDATE_TIME
Definition: zmconsole.cpp:35
Monitor::showNotifications
bool showNotifications
Definition: zmdefines.h:121
FunctionDialog::m_enabledCheck
MythUICheckBox * m_enabledCheck
Definition: zmconsole.h:51
FunctionDialog::m_monitor
Monitor * m_monitor
Definition: zmconsole.h:48
FunctionDialog::setMonitorFunction
void setMonitorFunction(void)
Definition: zmconsole.cpp:87
ZMConsole::getDaemonStatus
void getDaemonStatus()
Definition: zmconsole.cpp:193
MythUIStateType::Full
@ Full
Definition: mythuistatetype.h:25
ZMClient::get
static ZMClient * get(void)
Definition: zmclient.cpp:37
MythUIButtonListItem::GetData
QVariant GetData()
Definition: mythuibuttonlist.cpp:3660
ZMConsole::m_popupStack
MythScreenStack * m_popupStack
Definition: zmconsole.h:88
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:55
Monitor::zmaStatus
QString zmaStatus
Definition: zmdefines.h:113
UIUtilDisp::Assign
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27
ZMConsole::Create
bool Create(void) override
Definition: zmconsole.cpp:139
MythUIStateType::Off
@ Off
Definition: mythuistatetype.h:25
ZMClient::updateMonitorStatus
void updateMonitorStatus(void)
Definition: zmclient.cpp:276
MythScreenType::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: mythscreentype.cpp:404
ZMConsole::updateTime
void updateTime()
Definition: zmconsole.cpp:172
MythUICheckBox::SetCheckState
void SetCheckState(MythUIStateType::StateType state)
Definition: mythuicheckbox.cpp:66
XMLParseBase::LoadWindowFromXML
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
Definition: xmlparsebase.cpp:687
TIME_UPDATE_TIME
constexpr std::chrono::milliseconds TIME_UPDATE_TIME
Definition: zmconsole.cpp:36
MythUIButtonList::GetValue
virtual QString GetValue() const
Definition: mythuibuttonlist.cpp:1610
MythUIText::SetText
virtual void SetText(const QString &text)
Definition: mythuitext.cpp:132
mythcontext.h
ZMConsole::m_daemonStatus
QString m_daemonStatus
Definition: zmconsole.h:93
MythUIButtonList::Reset
void Reset() override
Reset the widget to it's original state, should not reset changes made by the theme.
Definition: mythuibuttonlist.cpp:116
GetMythMainWindow
MythMainWindow * GetMythMainWindow(void)
Definition: mythmainwindow.cpp:104
MythUIButtonList::MoveToNamedPosition
bool MoveToNamedPosition(const QString &position_name)
Definition: mythuibuttonlist.cpp:2283
MythUIButtonList::SetItemCurrent
void SetItemCurrent(MythUIButtonListItem *item)
Definition: mythuibuttonlist.cpp:1558
ZMConsole::m_timeFormat
QString m_timeFormat
Definition: zmconsole.h:91
build_compdb.action
action
Definition: build_compdb.py:9
Monitor::id
int id
Definition: zmdefines.h:106
ZMConsole::updateMonitorList
void updateMonitorList()
Definition: zmconsole.cpp:260
Monitor
Definition: zmdefines.h:99
ZMConsole::m_timeText
MythUIText * m_timeText
Definition: zmconsole.h:82
ZMClient::getMonitorAt
Monitor * getMonitorAt(int pos)
Definition: zmclient.cpp:843
MythUIText::GetText
QString GetText(void) const
Definition: mythuitext.h:43
MythUICheckBox::GetCheckState
MythUIStateType::StateType GetCheckState() const
Definition: mythuicheckbox.cpp:98
ZMClient::setMonitorFunction
void setMonitorFunction(int monitorID, const QString &function, bool enabled)
Definition: zmclient.cpp:930
ZMConsole::m_dateText
MythUIText * m_dateText
Definition: zmconsole.h:83
mythmainwindow.h
ZMConsole::m_functionDialog
FunctionDialog * m_functionDialog
Definition: zmconsole.h:87
MythScreenStack::AddScreen
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Definition: mythscreenstack.cpp:52
ZMConsole::m_updateTimer
QTimer * m_updateTimer
Definition: zmconsole.h:97
ZMConsole::m_loadText
MythUIText * m_loadText
Definition: zmconsole.h:84
MythUIButtonListItem::NotChecked
@ NotChecked
Definition: mythuibuttonlist.h:46