MythTV  master
exportnative.cpp
Go to the documentation of this file.
1 #include <cstdlib>
2 #include <cstdlib>
3 #include <iostream>
4 #include <unistd.h>
5 
6 // qt
7 #include <QFile>
8 #include <QKeyEvent>
9 #include <QTextStream>
10 #include <QDomDocument>
11 
12 // myth
13 #include <mythcontext.h>
14 #include <remoteutil.h>
15 #include <programinfo.h>
16 #include <mythdb.h>
17 #include <mythdialogbox.h>
18 #include <mythuitext.h>
19 #include <mythuibutton.h>
20 #include <mythuicheckbox.h>
21 #include <mythuibuttonlist.h>
22 #include <mythuiprogressbar.h>
23 #include <mythmainwindow.h>
24 #include <mythsystemlegacy.h>
25 #include <exitcodes.h>
26 
27 // mytharchive
28 #include "exportnative.h"
29 #include "fileselector.h"
30 #include "archiveutil.h"
31 #include "recordingselector.h"
32 #include "videoselector.h"
33 #include "logviewer.h"
34 
36 {
38 
39  while (!m_archiveList.isEmpty())
40  delete m_archiveList.takeFirst();
41  m_archiveList.clear();
42 }
43 
45 {
46  // Load the theme for this screen
47  bool foundtheme = LoadWindowFromXML("mythnative-ui.xml", "exportnative", this);
48  if (!foundtheme)
49  return false;
50 
51  bool err = false;
52  UIUtilE::Assign(this, m_nextButton, "next_button", &err);
53  UIUtilE::Assign(this, m_prevButton, "prev_button", &err);
54  UIUtilE::Assign(this, m_cancelButton, "cancel_button", &err);
55 
56  UIUtilE::Assign(this, m_titleText, "progtitle", &err);
57  UIUtilE::Assign(this, m_datetimeText, "progdatetime", &err);
58  UIUtilE::Assign(this, m_descriptionText, "progdescription", &err);
59  UIUtilE::Assign(this, m_filesizeText, "filesize", &err);
60  UIUtilE::Assign(this, m_nofilesText, "nofiles", &err);
61  UIUtilE::Assign(this, m_sizeBar, "size_bar", &err);
62  UIUtilE::Assign(this, m_archiveButtonList, "archivelist", &err);
63  UIUtilE::Assign(this, m_addrecordingButton, "addrecording_button", &err);
64  UIUtilE::Assign(this, m_addvideoButton, "addvideo_button", &err);
65 
66  UIUtilW::Assign(this, m_maxsizeText, "maxsize");
67  UIUtilW::Assign(this, m_minsizeText, "minsize");
68  UIUtilW::Assign(this, m_currsizeText, "currentsize");
69  UIUtilW::Assign(this, m_currsizeErrText, "currentsize_error");
70 
71  if (err)
72  {
73  LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'exportnative'");
74  return false;
75  }
76 
80 
81 
85 
88 
90 
92 
94 
95  return true;
96 }
97 
98 bool ExportNative::keyPressEvent(QKeyEvent *event)
99 {
100  if (GetFocusWidget()->keyPressEvent(event))
101  return true;
102 
103  QStringList actions;
104  bool handled = GetMythMainWindow()->TranslateKeyPress("Archive", event, actions);
105 
106  for (int i = 0; i < actions.size() && !handled; i++)
107  {
108  QString action = actions[i];
109  handled = true;
110 
111  if (action == "MENU")
112  {
113  ShowMenu();
114  }
115  else if (action == "DELETE")
116  {
117  removeItem();
118  }
119 
120  else
121  handled = false;
122  }
123 
124  if (!handled && MythScreenType::keyPressEvent(event))
125  handled = true;
126 
127  return handled;
128 }
129 
131 {
132  int64_t size = 0;
133 
134  for (const auto *a : qAsConst(m_archiveList))
135  size += a->size;
136 
137  m_usedSpace = size / 1024 / 1024;
138  uint freeSpace = m_archiveDestination.freeSpace / 1024;
139 
140  m_sizeBar->SetTotal(freeSpace);
142 
143  QString tmpSize = QString("%1 Mb").arg(freeSpace);
144 
145  if (m_maxsizeText)
146  m_maxsizeText->SetText(tmpSize);
147 
148  if (m_minsizeText)
149  m_minsizeText->SetText("0 Mb");
150 
151  tmpSize = QString("%1 Mb").arg(m_usedSpace);
152 
153  if (m_usedSpace > freeSpace)
154  {
155  if (m_currsizeText)
156  m_currsizeText->Hide();
157 
158  if (m_currsizeErrText)
159  {
161  m_currsizeErrText->SetText(tmpSize);
162  }
163  }
164  else
165  {
166  if (m_currsizeErrText)
168 
169  if (m_currsizeText)
170  {
171  m_currsizeText->Show();
172  m_currsizeText->SetText(tmpSize);
173  }
174  }
175 }
176 
178 {
179  auto *a = item->GetData().value<ArchiveItem *>();
180  if (!a)
181  return;
182 
183  m_titleText->SetText(a->title);
184 
185  m_datetimeText->SetText(a->startDate + " " + a->startTime);
186 
188  (a->subtitle != "" ? a->subtitle + "\n" : "") + a->description);
189 
190  m_filesizeText->SetText(formatSize(a->size / 1024, 2));
191 }
192 
194 {
195  if (m_archiveList.empty())
196  {
197  ShowOkPopup(tr("You need to add at least one item to archive!"));
198  return;
199  }
200 
201  runScript();
202 
204  Close();
205 }
206 
208 {
209  Close();
210 }
211 
213 {
215  Close();
216 }
217 
219 {
221 
222  if (m_archiveList.empty())
223  {
224  m_titleText->Reset();
228  m_nofilesText->Show();
229  }
230  else
231  {
232  for (auto *a : qAsConst(m_archiveList))
233  {
234  auto* item = new MythUIButtonListItem(m_archiveButtonList, a->title);
235  item->SetData(QVariant::fromValue(a));
236  }
237 
240  m_nofilesText->Hide();
241  }
242 
243  updateSizeBar();
244 }
245 
247 {
248  while (!m_archiveList.isEmpty())
249  delete m_archiveList.takeFirst();
250  m_archiveList.clear();
251 
253  query.prepare("SELECT intid, type, title, subtitle, description, size, "
254  "startdate, starttime, filename, hascutlist "
255  "FROM archiveitems WHERE type = 'Recording' OR type = 'Video' "
256  "ORDER BY title, subtitle");
257 
258  if (query.exec())
259  {
260  while (query.next())
261  {
262  auto *item = new ArchiveItem;
263 
264  item->id = query.value(0).toInt();
265  item->type = query.value(1).toString();
266  item->title = query.value(2).toString();
267  item->subtitle = query.value(3).toString();
268  item->description = query.value(4).toString();
269  item->size = query.value(5).toLongLong();
270  item->startDate = query.value(6).toString();
271  item->startTime = query.value(7).toString();
272  item->filename = query.value(8).toString();
273  item->hasCutlist = (query.value(9).toInt() > 0);
274  item->useCutlist = false;
275  item->editedDetails = false;
276 
277  m_archiveList.append(item);
278  }
279  }
280 }
281 
283 {
286 }
287 
289 {
290  m_bCreateISO = (gCoreContext->GetSetting("MythNativeCreateISO", "0") == "1");
291  m_bDoBurn = (gCoreContext->GetSetting("MythNativeBurnDVDr", "1") == "1");
292  m_bEraseDvdRw = (gCoreContext->GetSetting("MythNativeEraseDvdRw", "0") == "1");
293  m_saveFilename = gCoreContext->GetSetting("MythNativeSaveFilename", "");
294 }
295 
297 {
298  // remove all old archive items from DB
300  query.prepare("DELETE FROM archiveitems;");
301  if (!query.exec())
302  MythDB::DBError("ExportNative::saveConfiguration - "
303  "deleting archiveitems", query);
304 
305  // save new list of archive items to DB
306  query.prepare("INSERT INTO archiveitems (type, title, subtitle, "
307  "description, startdate, starttime, size, filename, hascutlist, "
308  "duration, cutduration, videowidth, videoheight, filecodec,"
309  "videocodec, encoderprofile) "
310  "VALUES(:TYPE, :TITLE, :SUBTITLE, :DESCRIPTION, :STARTDATE, "
311  ":STARTTIME, :SIZE, :FILENAME, :HASCUTLIST, :DURATION, "
312  ":CUTDURATION, :VIDEOWIDTH, :VIDEOHEIGHT, :FILECODEC, "
313  ":VIDEOCODEC, :ENCODERPROFILE);");
314  for (const auto * a : qAsConst(m_archiveList))
315  {
316  query.bindValue(":TYPE", a->type);
317  query.bindValue(":TITLE", a->title);
318  query.bindValue(":SUBTITLE", a->subtitle);
319  query.bindValue(":DESCRIPTION", a->description);
320  query.bindValue(":STARTDATE", a->startDate);
321  query.bindValue(":STARTTIME", a->startTime);
322  query.bindValue(":SIZE", 0);
323  query.bindValue(":FILENAME", a->filename);
324  query.bindValue(":HASCUTLIST", a->hasCutlist);
325  query.bindValue(":DURATION", 0);
326  query.bindValue(":CUTDURATION", 0);
327  query.bindValue(":VIDEOWIDTH", 0);
328  query.bindValue(":VIDEOHEIGHT", 0);
329  query.bindValue(":FILECODEC", "");
330  query.bindValue(":VIDEOCODEC", "");
331  query.bindValue(":ENCODERPROFILE", "");
332 
333  if (!query.exec())
334  MythDB::DBError("archive item insert", query);
335  }
336 }
337 
339 {
340  MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
341 
342  auto *menuPopup = new MythDialogBox(tr("Menu"), popupStack, "actionmenu");
343 
344  if (menuPopup->Create())
345  popupStack->AddScreen(menuPopup);
346 
347  menuPopup->SetReturnEvent(this, "action");
348 
349  menuPopup->AddButton(tr("Remove Item"), &ExportNative::removeItem);
350 }
351 
353 {
355  auto *curItem = item->GetData().value<ArchiveItem *>();
356 
357  if (!curItem)
358  return;
359 
361  query.prepare("DELETE FROM archiveitems WHERE filename = :FILENAME;");
362  query.bindValue(":FILENAME", curItem->filename);
363  if (query.exec() && query.numRowsAffected())
364  {
365  getArchiveList();
366  }
367 }
368 
370 {
371  QDomDocument doc("NATIVEARCHIVEJOB");
372 
373  QDomElement root = doc.createElement("nativearchivejob");
374  doc.appendChild(root);
375 
376  QDomElement job = doc.createElement("job");
377  root.appendChild(job);
378 
379  QDomElement media = doc.createElement("media");
380  job.appendChild(media);
381 
382  // now loop though selected archive items and add them to the xml file
383  for (const auto * a : qAsConst(m_archiveList))
384  {
385  QDomElement file = doc.createElement("file");
386  file.setAttribute("type", a->type.toLower() );
387  file.setAttribute("title", a->title);
388  file.setAttribute("filename", a->filename);
389  file.setAttribute("delete", "0");
390  media.appendChild(file);
391  }
392 
393  // add the options to the xml file
394  QDomElement options = doc.createElement("options");
395  options.setAttribute("createiso", static_cast<int>(m_bCreateISO));
396  options.setAttribute("doburn", static_cast<int>(m_bDoBurn));
397  options.setAttribute("mediatype", m_archiveDestination.type);
398  options.setAttribute("dvdrsize", (qint64)m_archiveDestination.freeSpace);
399  options.setAttribute("erasedvdrw", static_cast<int>(m_bEraseDvdRw));
400  options.setAttribute("savedirectory", m_saveFilename);
401  job.appendChild(options);
402 
403  // finally save the xml to the file
404  QFile f(filename);
405  if (!f.open(QIODevice::WriteOnly))
406  {
407  LOG(VB_GENERAL, LOG_ERR,
408  QString("ExportNative::createConfigFile: "
409  "Failed to open file for writing - %1") .arg(filename));
410  return;
411  }
412 
413  QTextStream t(&f);
414  t << doc.toString(4);
415  f.close();
416 }
417 
419 {
420  QString tempDir = getTempDirectory();
421  QString logDir = tempDir + "logs";
422  QString configDir = tempDir + "config";
423  QString commandline;
424 
425  // remove any existing logs
426  myth_system("rm -f " + logDir + "/*.log");
427 
428  // remove cancel flag file if present
429  if (QFile::exists(logDir + "/mythburncancel.lck"))
430  QFile::remove(logDir + "/mythburncancel.lck");
431 
432  createConfigFile(configDir + "/mydata.xml");
433  commandline = "mytharchivehelper --logpath " + logDir + " --nativearchive "
434  "--outfile " + configDir + "/mydata.xml"; // job file
435 
438  uint retval = myth_system(commandline, flags);
439  if (retval != GENERIC_EXIT_RUNNING && retval != GENERIC_EXIT_OK)
440  {
441  ShowOkPopup(tr("It was not possible to create the DVD. "
442  "An error occured when running the scripts") );
443  return;
444  }
445 
446  showLogViewer();
447 }
448 
450 {
452 
453  auto *selector = new RecordingSelector(mainStack, &m_archiveList);
454 
455  connect(selector, &RecordingSelector::haveResult,
457 
458  if (selector->Create())
459  mainStack->AddScreen(selector);
460 }
461 
463 {
464  if (ok)
466 }
467 
469 {
471  query.prepare("SELECT title FROM videometadata");
472  if (query.exec() && query.size())
473  {
474  }
475  else
476  {
477  ShowOkPopup(tr("You don't have any videos!"));
478  return;
479  }
480 
482 
483  auto *selector = new VideoSelector(mainStack, &m_archiveList);
484 
485  connect(selector, &VideoSelector::haveResult,
487 
488  if (selector->Create())
489  mainStack->AddScreen(selector);
490 }
MythUIButton::Clicked
void Clicked()
MSqlQuery::next
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
Definition: mythdbcon.cpp:783
MSqlQuery
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:126
RecordingSelector::haveResult
void haveResult(bool ok)
MythMainWindow::GetMainStack
MythScreenStack * GetMainStack()
Definition: mythmainwindow.cpp:324
MSqlQuery::size
int size(void) const
Definition: mythdbcon.h:203
MythUIButtonList::GetItemCurrent
MythUIButtonListItem * GetItemCurrent() const
Definition: mythuibuttonlist.cpp:1590
myth_system
uint myth_system(const QString &command, uint flags, uint timeout)
Definition: mythsystemlegacy.cpp:501
GENERIC_EXIT_OK
#define GENERIC_EXIT_OK
Exited with no error.
Definition: exitcodes.h:10
exportnative.h
ExportNative::handlePrevPage
void handlePrevPage(void)
Definition: exportnative.cpp:207
root
QDomElement root
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:656
mythuitext.h
mythuiprogressbar.h
fileselector.h
MythUIText::Reset
void Reset(void) override
Reset the widget to it's original state, should not reset changes made by the theme.
Definition: mythuitext.cpp:84
kMSDontBlockInputDevs
@ kMSDontBlockInputDevs
avoid blocking LIRC & Joystick Menu
Definition: mythsystem.h:34
ExportNative::m_titleText
MythUIText * m_titleText
Definition: exportnative.h:88
mythdb.h
VideoSelector::haveResult
void haveResult(bool ok)
doc
QDomDocument doc("MYTHARCHIVEITEM")
MythScreenType::Close
virtual void Close()
Definition: mythscreentype.cpp:402
MythMainWindow::TranslateKeyPress
bool TranslateKeyPress(const QString &context, QKeyEvent *e, QStringList &actions, bool allowJumps=true)
Get a list of actions for a keypress in the given context.
Definition: mythmainwindow.cpp:1142
ExportNative::getArchiveList
void getArchiveList(void)
Definition: exportnative.cpp:282
ArchiveDestination::freeSpace
int64_t freeSpace
Definition: archiveutil.h:31
MythUIButtonList::itemSelected
void itemSelected(MythUIButtonListItem *item)
VideoSelector
Definition: videoselector.h:39
MythUIProgressBar::SetUsed
void SetUsed(int value)
Definition: mythuiprogressbar.cpp:59
ExportNative::m_archiveDestination
ArchiveDestination m_archiveDestination
Definition: exportnative.h:71
mythdialogbox.h
MSqlQuery::value
QVariant value(int i) const
Definition: mythdbcon.h:198
MythScreenStack
Definition: mythscreenstack.h:16
arg
arg(title).arg(filename).arg(doDelete))
ExportNative::m_maxsizeText
MythUIText * m_maxsizeText
Definition: exportnative.h:93
MSqlQuery::exec
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition: mythdbcon.cpp:603
logviewer.h
ExportNative::saveConfiguration
void saveConfiguration(void)
Definition: exportnative.cpp:296
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:23
ExportNative::m_nextButton
MythUIButton * m_nextButton
Definition: exportnative.h:82
build_compdb.file
file
Definition: build_compdb.py:55
ExportNative::updateSizeBar
void updateSizeBar(void)
Definition: exportnative.cpp:130
ExportNative::m_bEraseDvdRw
bool m_bEraseDvdRw
Definition: exportnative.h:78
getTempDirectory
QString getTempDirectory(bool showError)
Definition: archiveutil.cpp:68
ExportNative::m_descriptionText
MythUIText * m_descriptionText
Definition: exportnative.h:90
remoteutil.h
MythMainWindow::GetStack
MythScreenStack * GetStack(const QString &stackname)
Definition: mythmainwindow.cpp:329
mythuibuttonlist.h
ExportNative::m_addrecordingButton
MythUIButton * m_addrecordingButton
Definition: exportnative.h:85
ExportNative::m_nofilesText
MythUIText * m_nofilesText
Definition: exportnative.h:92
MythScreenType::GetFocusWidget
MythUIType * GetFocusWidget(void) const
Definition: mythscreentype.cpp:112
ExportNative::m_sizeBar
MythUIProgressBar * m_sizeBar
Definition: exportnative.h:97
mythsystemlegacy.h
ExportNative::titleChanged
void titleChanged(MythUIButtonListItem *item)
Definition: exportnative.cpp:177
ExportNative::m_datetimeText
MythUIText * m_datetimeText
Definition: exportnative.h:89
MythUIButtonListItem
Definition: mythuibuttonlist.h:28
recordingselector.h
ExportNative::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: exportnative.cpp:98
ExportNative::updateArchiveList
void updateArchiveList(void)
Definition: exportnative.cpp:218
MythUIProgressBar::SetTotal
void SetTotal(int value)
Definition: mythuiprogressbar.cpp:71
RecordingSelector
Definition: recordingselector.h:30
programinfo.h
ExportNative::m_usedSpace
uint m_usedSpace
Definition: exportnative.h:72
MythUIType::Show
void Show(void)
Definition: mythuitype.cpp:1125
ExportNative::handleCancel
void handleCancel(void)
Definition: exportnative.cpp:212
ExportNative::~ExportNative
~ExportNative(void) override
Definition: exportnative.cpp:35
ExportNative::handleAddRecording
void handleAddRecording(void)
Definition: exportnative.cpp:449
ExportNative::handleAddVideo
void handleAddVideo(void)
Definition: exportnative.cpp:468
archiveutil.h
ExportNative::createConfigFile
void createConfigFile(const QString &filename)
Definition: exportnative.cpp:369
MythScreenType::SetFocusWidget
bool SetFocusWidget(MythUIType *widget=nullptr)
Definition: mythscreentype.cpp:117
hardwareprofile.i18n.t
t
Definition: i18n.py:36
MythDialogBox
Basic menu dialog, message and a list of options.
Definition: mythdialogbox.h:167
ArchiveDestination::type
ARCHIVEDESTINATION type
Definition: archiveutil.h:28
MSqlQuery::InitCon
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition: mythdbcon.cpp:535
MythDB::DBError
static void DBError(const QString &where, const MSqlQuery &query)
Definition: mythdb.cpp:178
MythScreenType::BuildFocusList
void BuildFocusList(void)
Definition: mythscreentype.cpp:222
videoselector.h
showLogViewer
void showLogViewer(void)
Definition: logviewer.cpp:27
ExportNative::m_cancelButton
MythUIButton * m_cancelButton
Definition: exportnative.h:84
filename
QString filename
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:637
ExportNative::m_saveFilename
QString m_saveFilename
Definition: exportnative.h:79
ExportNative::m_bCreateISO
bool m_bCreateISO
Definition: exportnative.h:76
f
QTextStream t & f
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:603
ExportNative::m_prevButton
MythUIButton * m_prevButton
Definition: exportnative.h:83
ExportNative::m_currsizeText
MythUIText * m_currsizeText
Definition: exportnative.h:95
ExportNative::handleNextPage
void handleNextPage(void)
Definition: exportnative.cpp:193
ExportNative::m_minsizeText
MythUIText * m_minsizeText
Definition: exportnative.h:94
ExportNative::m_bDoBurn
bool m_bDoBurn
Definition: exportnative.h:77
MythUIButtonListItem::GetData
QVariant GetData()
Definition: mythuibuttonlist.cpp:3580
uint
unsigned int uint
Definition: compat.h:141
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:60
ExportNative::Create
bool Create(void) override
Definition: exportnative.cpp:44
ExportNative::ShowMenu
void ShowMenu(void) override
Definition: exportnative.cpp:338
ExportNative::m_filesizeText
MythUIText * m_filesizeText
Definition: exportnative.h:91
ExportNative::m_archiveList
QList< ArchiveItem * > m_archiveList
Definition: exportnative.h:74
UIUtilDisp::Assign
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27
MythUIType::Hide
void Hide(void)
Definition: mythuitype.cpp:1120
ExportNative::m_addvideoButton
MythUIButton * m_addvideoButton
Definition: exportnative.h:86
kMSRunBackground
@ kMSRunBackground
run child in the background
Definition: mythsystem.h:36
ArchiveItem::id
int id
Definition: archiveutil.h:52
ExportNative::m_previousScreen
MythScreenType * m_previousScreen
Definition: exportnative.h:69
MythScreenType::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: mythscreentype.cpp:414
XMLParseBase::LoadWindowFromXML
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
Definition: xmlparsebase.cpp:692
MSqlQuery::bindValue
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
Definition: mythdbcon.cpp:864
ExportNative::runScript
void runScript()
Definition: exportnative.cpp:418
MythUIText::SetText
virtual void SetText(const QString &text)
Definition: mythuitext.cpp:134
mythcontext.h
MythUIButtonList::Reset
void Reset() override
Reset the widget to it's original state, should not reset changes made by the theme.
Definition: mythuibuttonlist.cpp:114
GetMythMainWindow
MythMainWindow * GetMythMainWindow(void)
Definition: mythmainwindow.cpp:108
MythUIButtonList::SetItemCurrent
void SetItemCurrent(MythUIButtonListItem *item)
Definition: mythuibuttonlist.cpp:1557
build_compdb.action
action
Definition: build_compdb.py:9
mythuibutton.h
MSqlQuery::numRowsAffected
int numRowsAffected() const
Definition: mythdbcon.h:206
formatSize
static QString formatSize(int64_t sizeKB, int prec)
Definition: recordingutils.cpp:22
ExportNative::getArchiveListFromDB
void getArchiveListFromDB(void)
Definition: exportnative.cpp:246
ExportNative::m_currsizeErrText
MythUIText * m_currsizeErrText
Definition: exportnative.h:96
ArchiveItem
Definition: archiveutil.h:51
ExportNative::loadConfiguration
void loadConfiguration(void)
Definition: exportnative.cpp:288
GENERIC_EXIT_RUNNING
#define GENERIC_EXIT_RUNNING
Process is running.
Definition: exitcodes.h:25
kMSDontDisableDrawing
@ kMSDontDisableDrawing
avoid disabling UI drawing
Definition: mythsystem.h:35
mythuicheckbox.h
exitcodes.h
MythUIButtonList::GetItemFirst
MythUIButtonListItem * GetItemFirst() const
Definition: mythuibuttonlist.cpp:1636
mythmainwindow.h
MythScreenStack::AddScreen
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Definition: mythscreenstack.cpp:52
query
MSqlQuery query(MSqlQuery::InitCon())
ExportNative::m_archiveButtonList
MythUIButtonList * m_archiveButtonList
Definition: exportnative.h:81
ShowOkPopup
MythConfirmationDialog * ShowOkPopup(const QString &message, bool showCancel)
Non-blocking version of MythPopupBox::showOkPopup()
Definition: mythdialogbox.cpp:557
build_compdb.options
options
Definition: build_compdb.py:11
ExportNative::selectorClosed
void selectorClosed(bool ok)
Definition: exportnative.cpp:462
ExportNative::removeItem
void removeItem(void)
Definition: exportnative.cpp:352
MythCoreContext::GetSetting
QString GetSetting(const QString &key, const QString &defaultval="")
Definition: mythcorecontext.cpp:919
MSqlQuery::prepare
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
Definition: mythdbcon.cpp:808