MythTV  master
rsseditor.cpp
Go to the documentation of this file.
1 #include <QDomDocument>
2 #include <QDateTime>
3 #include <QImageReader>
4 
5 // MythTV headers
6 #include <mythuibutton.h>
7 #include <mythuibuttonlist.h>
8 #include <mythuitextedit.h>
9 #include <mythuicheckbox.h>
10 #include <mythuifilebrowser.h>
11 #include <mythmainwindow.h>
12 #include <mythdialogbox.h>
13 #include <mythuiimage.h>
14 #include <mythuitext.h>
15 #include <mythdate.h>
16 #include <mythcontext.h>
17 #include <mythdbcon.h>
18 #include <mythdirs.h>
19 #include <netutils.h>
20 #include <rssparse.h>
21 #include <mythdownloadmanager.h>
22 #include <mythsorthelper.h>
23 
24 // RSS headers
25 #include "rsseditor.h"
26 
27 #define LOC QString("RSSEditor: ")
28 #define LOC_WARN QString("RSSEditor, Warning: ")
29 #define LOC_ERR QString("RSSEditor, Error: ")
30 
31 namespace
32 {
33  const QString CEID_NEWIMAGE = "image";
34 
35  QStringList GetSupportedImageExtensionFilter()
36  {
37  QStringList ret;
38 
39  QList<QByteArray> exts = QImageReader::supportedImageFormats();
40  for (const auto & ext : qAsConst(exts))
41  ret.append(QString("*.").append(ext));
42 
43  return ret;
44  }
45 }
46 
48 {
49  if (m_manager)
50  {
51  m_manager->disconnect();
52  m_manager->deleteLater();
53  m_manager = nullptr;
54  }
55 }
56 
58 {
59  // Load the theme for this screen
60  bool foundtheme =
61  LoadWindowFromXML("netvision-ui.xml", "rsseditpopup", this);
62 
63  if (!foundtheme)
64  return false;
65 
66  bool err = false;
67  UIUtilE::Assign(this, m_urlEdit, "url", &err);
68  UIUtilE::Assign(this, m_titleEdit, "title", &err);
69  UIUtilE::Assign(this, m_descEdit, "description", &err);
70  UIUtilE::Assign(this, m_authorEdit, "author", &err);
71  UIUtilE::Assign(this, m_download, "download", &err);
72  UIUtilE::Assign(this, m_okButton, "ok", &err);
73  UIUtilE::Assign(this, m_cancelButton, "cancel", &err);
74  UIUtilE::Assign(this, m_thumbButton, "preview_browse", &err);
75  UIUtilE::Assign(this, m_thumbImage, "preview", &err);
76 
77  if (err)
78  {
79  LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'rsseditpopup'");
80  return false;
81  }
82 
86 
91 
92  if (m_editing)
93  {
95 
100 
101  QString thumb = m_site->GetImage();
102  if (!thumb.isEmpty())
103  {
104  m_thumbImage->SetFilename(thumb);
105  m_thumbImage->Load();
106  }
107 
108  if (m_site->GetDownload())
110  }
111 
112  BuildFocusList();
113 
114  return true;
115 }
116 
117 bool RSSEditPopup::keyPressEvent(QKeyEvent *event)
118 {
119  if (GetFocusWidget()->keyPressEvent(event))
120  return true;
121 
122  QStringList actions;
123  bool handled = GetMythMainWindow()->TranslateKeyPress("Internet Video",
124  event, actions);
125 
126  if (!handled && MythScreenType::keyPressEvent(event))
127  handled = true;
128 
129  return handled;
130 }
131 
133 {
134  if (m_editing)
135  {
136  QString title = m_titleEdit->GetText();
137  QString desc = m_descEdit->GetText();
138  QString author = m_authorEdit->GetText();
139  QString link = m_urlEdit->GetText();
140  QString filename = m_thumbImage->GetFilename();
141  bool download = m_download->GetCheckState() == MythUIStateType::Full;
142 
144 
145  std::shared_ptr<MythSortHelper>sh = getMythSortHelper();
146  RSSSite site(title, sh->doTitle(title), filename, VIDEO_PODCAST,
147  desc, link, author, download, MythDate::current());
148  if (insertInDB(&site))
149  emit Saving();
150  Close();
151  }
152  else
153  {
154  m_manager = new QNetworkAccessManager();
155  QUrl qurl(m_urlEdit->GetText());
156 
157  m_reply = m_manager->get(QNetworkRequest(qurl));
158 
159  connect(m_manager, &QNetworkAccessManager::finished, this,
161  }
162 }
163 
164 QUrl RSSEditPopup::redirectUrl(const QUrl& possibleRedirectUrl,
165  const QUrl& oldRedirectUrl)
166 {
167  QUrl redirectUrl;
168  if(!possibleRedirectUrl.isEmpty() && possibleRedirectUrl != oldRedirectUrl)
169  redirectUrl = possibleRedirectUrl;
170  return redirectUrl;
171 }
172 
173 void RSSEditPopup::SlotCheckRedirect(QNetworkReply* reply)
174 {
175  QVariant possibleRedirectUrl =
176  reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
177 
178  QUrl urlRedirectedTo;
179  urlRedirectedTo = redirectUrl(
180  possibleRedirectUrl.toUrl(), urlRedirectedTo);
181 
182  if (!urlRedirectedTo.isEmpty())
183  {
184  m_urlEdit->SetText(urlRedirectedTo.toString());
185  m_manager->get(QNetworkRequest(urlRedirectedTo));
186  }
187  else
188  {
189 // urlRedirectedTo.clear();
190  SlotSave(reply);
191  }
192  reply->deleteLater();
193 }
194 
195 void RSSEditPopup::SlotSave(QNetworkReply* reply)
196 {
197  QDomDocument document;
198  document.setContent(reply->read(reply->bytesAvailable()), true);
199 
200  QString text = document.toString();
201 
202  QString title = m_titleEdit->GetText();
203  QString description = m_descEdit->GetText();
204  QString author = m_authorEdit->GetText();
205  QString file = m_thumbImage->GetFilename();
206 
207  LOG(VB_GENERAL, LOG_DEBUG, QString("Text to Parse: %1").arg(text));
208 
209  QDomElement root = document.documentElement();
210  QDomElement channel = root.firstChildElement ("channel");
211  if (!channel.isNull())
212  {
213  Parse parser;
214  if (title.isEmpty())
215  title = channel.firstChildElement("title").text().trimmed();
216  if (description.isEmpty())
217  description = channel.firstChildElement("description").text();
218  if (author.isEmpty())
219  author = Parse::GetAuthor(channel);
220  if (author.isEmpty())
221  author = channel.firstChildElement("managingEditor").text();
222  if (author.isEmpty())
223  author = channel.firstChildElement("webMaster").text();
224 
225  QString thumbnailURL =
226  channel.firstChildElement("image").attribute("url");
227  if (thumbnailURL.isEmpty())
228  {
229  QDomElement thumbElem = channel.firstChildElement("image");
230  if (!thumbElem.isNull())
231  thumbnailURL = thumbElem.firstChildElement("url").text();
232  }
233  if (thumbnailURL.isEmpty())
234  {
235  QDomNodeList nodes = channel.elementsByTagNameNS(
236  "http://www.itunes.com/dtds/podcast-1.0.dtd",
237  "image");
238  if (nodes.size())
239  {
240  thumbnailURL =
241  nodes.at(0).toElement().attributeNode("href").value();
242  if (thumbnailURL.isEmpty())
243  thumbnailURL = nodes.at(0).toElement().text();
244  }
245  }
246 
247  bool download = m_download->GetCheckState() == MythUIStateType::Full;
248  QString filename("");
249 
250  if (!file.isEmpty())
251  filename = file;
252  else if (!thumbnailURL.isEmpty())
253  filename = thumbnailURL;
254 
255  QString link = m_urlEdit->GetText();
256 
257  std::shared_ptr<MythSortHelper>sh = getMythSortHelper();
258  RSSSite site(title, sh->doTitle(title), filename, VIDEO_PODCAST, description, link,
259  author, download, MythDate::current());
260  if (insertInDB(&site))
261  emit Saving();
262  }
263 
264  Close();
265 }
266 
268 {
269  SelectImagePopup(GetConfDir() + "/MythNetvision" + "/sitecovers", *this,
270  CEID_NEWIMAGE);
271 }
272 
274  QObject &inst, const QString &returnEvent)
275 {
276  MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
277 
278  auto *fb = new MythUIFileBrowser(popupStack, prefix);
279  fb->SetNameFilter(GetSupportedImageExtensionFilter());
280  if (fb->Create())
281  {
282  fb->SetReturnEvent(&inst, returnEvent);
283  popupStack->AddScreen(fb);
284  }
285  else
286  delete fb;
287 }
288 
289 void RSSEditPopup::customEvent(QEvent *levent)
290 {
291  if (levent->type() == DialogCompletionEvent::kEventType)
292  {
293  auto *dce = dynamic_cast<DialogCompletionEvent*>(levent);
294  if ((dce != nullptr) && (dce->GetId() == CEID_NEWIMAGE))
295  {
296  m_thumbImage->SetFilename(dce->GetResultText());
297  m_thumbImage->Load();
298  m_thumbImage->Show();
299  }
300  }
301 }
302 
304 {
305  QMutexLocker locker(&m_lock);
306 
307  if (m_changed)
308  emit ItemsChanged();
309 }
310 
312 {
313  QMutexLocker locker(&m_lock);
314 
315  // Load the theme for this screen
316  bool foundtheme = LoadWindowFromXML("netvision-ui.xml", "rsseditor", this);
317 
318  if (!foundtheme)
319  return false;
320 
321  bool err = false;
322  UIUtilE::Assign(this, m_sites, "sites", &err);
323  UIUtilE::Assign(this, m_new, "new", &err);
324  UIUtilE::Assign(this, m_delete, "delete", &err);
325  UIUtilE::Assign(this, m_edit, "edit", &err);
326 
327  UIUtilW::Assign(this, m_image, "preview");
328  UIUtilW::Assign(this, m_title, "title");
329  UIUtilW::Assign(this, m_desc, "description");
330  UIUtilW::Assign(this, m_url, "url");
331  UIUtilW::Assign(this, m_author, "author");
332 
333  if (err)
334  {
335  LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'rsseditor'");
336  return false;
337  }
338 
340  this, &RSSEditor::SlotEditSite);
341 
344  connect(m_edit, &MythUIButton::Clicked,
345  this, &RSSEditor::SlotEditSite);
346  connect(m_new, &MythUIButton::Clicked,
347  this, &RSSEditor::SlotNewSite);
348 
351 
352  BuildFocusList();
353 
354  LoadData();
355 
356  if (m_sites->GetCount() == 0)
358  else
359  SlotItemChanged();
360 
361  return true;
362 }
363 
365 {
366  qDeleteAll(m_siteList);
369  if (m_sites->GetCount() == 0)
370  {
371  m_edit->SetVisible(false);
372  m_delete->SetVisible(false);
373  m_sites->SetVisible(false);
374  }
375  else
376  {
377  m_edit->SetVisible(true);
378  m_delete->SetVisible(true);
379  m_sites->SetVisible(true);
380  }
381 }
382 
383 bool RSSEditor::keyPressEvent(QKeyEvent *event)
384 {
385  if (GetFocusWidget()->keyPressEvent(event))
386  return true;
387 
388  QStringList actions;
389  bool handled = GetMythMainWindow()->TranslateKeyPress("Internet Video",
390  event, actions);
391 
392  for (int i = 0; i < actions.size() && !handled; i++)
393  {
394  QString action = actions[i];
395  handled = true;
396 
397  if (action == "DELETE" && GetFocusWidget() == m_sites)
398  {
399  SlotDeleteSite();
400  }
401  else if (action == "EDIT" && GetFocusWidget() == m_sites)
402  {
403  SlotEditSite();
404  }
405  else
406  handled = false;
407  }
408 
409 
410  if (!handled && MythScreenType::keyPressEvent(event))
411  handled = true;
412 
413  return handled;
414 }
415 
417 {
418  QMutexLocker locker(&m_lock);
419 
420  m_sites->Reset();
421 
422  for (const auto & site : qAsConst(m_siteList))
423  {
424  auto *item = new MythUIButtonListItem(m_sites, site->GetTitle());
425  item->SetText(site->GetTitle(), "title");
426  item->SetText(site->GetDescription(), "description");
427  item->SetText(site->GetURL(), "url");
428  item->SetText(site->GetAuthor(), "author");
429  item->SetData(QVariant::fromValue(site));
430  item->SetImage(site->GetImage());
431  }
432 }
433 
435 {
436  auto *site = m_sites->GetItemCurrent()->GetData().value<RSSSite*>();
437  if (site)
438  {
439  if (m_image)
440  {
441  const QString& thumb = site->GetImage();
442 
443  m_image->Reset();
444 
445  if (!thumb.isEmpty())
446  {
447  m_image->SetFilename(thumb);
448  m_image->Load();
449  }
450  }
451  if (m_title)
452  m_title->SetText(site->GetTitle());
453  if (m_desc)
454  m_desc->SetText(site->GetDescription());
455  if (m_url)
456  m_url->SetText(site->GetURL());
457  if (m_author)
458  m_author->SetText(site->GetAuthor());
459  }
460 }
461 
463 {
464  QMutexLocker locker(&m_lock);
465 
466  QString message =
467  tr("Are you sure you want to unsubscribe from this feed?");
468 
469  MythScreenStack *m_popupStack =
470  GetMythMainWindow()->GetStack("popup stack");
471 
472  auto *confirmdialog = new MythConfirmationDialog(m_popupStack,message);
473 
474  if (confirmdialog->Create())
475  {
476  m_popupStack->AddScreen(confirmdialog);
477 
478  connect(confirmdialog, &MythConfirmationDialog::haveResult,
479  this, &RSSEditor::DoDeleteSite);
480  }
481  else
482  delete confirmdialog;
483 }
484 
486 {
487  QMutexLocker locker(&m_lock);
488 
490 
491  auto *site = m_sites->GetItemCurrent()->GetData().value<RSSSite*>();
492  if (site)
493  {
494  auto *rsseditpopup =
495  new RSSEditPopup(site->GetURL(), true, mainStack, "rsseditpopup");
496 
497  if (rsseditpopup->Create())
498  {
499  connect(rsseditpopup, &RSSEditPopup::Saving, this, &RSSEditor::ListChanged);
500 
501  mainStack->AddScreen(rsseditpopup);
502  }
503  else
504  delete rsseditpopup;
505  }
506 }
507 
509 {
510  QMutexLocker locker(&m_lock);
511 
513 
514  auto *rsseditpopup = new RSSEditPopup("", false, mainStack, "rsseditpopup");
515 
516  if (rsseditpopup->Create())
517  {
518  connect(rsseditpopup, &RSSEditPopup::Saving, this, &RSSEditor::ListChanged);
519 
520  mainStack->AddScreen(rsseditpopup);
521  }
522  else
523  delete rsseditpopup;
524 }
525 
526 void RSSEditor::DoDeleteSite(bool remove)
527 {
528  QMutexLocker locker(&m_lock);
529 
530  if (!remove)
531  return;
532 
533  auto *site = m_sites->GetItemCurrent()->GetData().value<RSSSite*>();
534 
535  if (removeFromDB(site))
536  ListChanged();
537 }
538 
540 {
541  m_changed = true;
542  LoadData();
543 }
MythUIButton::Clicked
void Clicked()
RSSEditor::ItemsChanged
void ItemsChanged(void)
MythMainWindow::GetMainStack
MythScreenStack * GetMainStack()
Definition: mythmainwindow.cpp:321
MythUITextEdit::SetMaxLength
void SetMaxLength(int length)
Definition: mythuitextedit.cpp:211
channel
QDomElement channel
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:501
MythUIButtonList::GetItemCurrent
MythUIButtonListItem * GetItemCurrent() const
Definition: mythuibuttonlist.cpp:1590
RSSEditPopup::customEvent
void customEvent(QEvent *levent) override
Definition: rsseditor.cpp:289
root
QDomElement root
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:656
mythuitext.h
RSSEditPopup::DoFileBrowser
void DoFileBrowser(void)
Definition: rsseditor.cpp:267
insertInDB
bool insertInDB(RSSSite *site)
Definition: netutils.cpp:644
RSSSite::GetDownload
const bool & GetDownload() const
Definition: mythrssmanager.h:60
getMythSortHelper
std::shared_ptr< MythSortHelper > getMythSortHelper(void)
Get a pointer to the MythSortHelper singleton.
Definition: mythsorthelper.cpp:132
RSSEditPopup::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: rsseditor.cpp:117
RSSEditPopup::Saving
void Saving(void)
RSSEditPopup::Create
bool Create(void) override
Definition: rsseditor.cpp:57
RSSEditPopup::SelectImagePopup
static void SelectImagePopup(const QString &prefix, QObject &inst, const QString &returnEvent)
Definition: rsseditor.cpp:273
MythScreenType::Close
virtual void Close()
Definition: mythscreentype.cpp:402
RSSEditPopup::m_thumbButton
MythUIButton * m_thumbButton
Definition: rsseditor.h:57
title
QString title
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:636
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:1139
MythUIImage::Load
bool Load(bool allowLoadInBackground=true, bool forceStat=false)
Load the image(s), wraps ImageLoader::LoadImage()
Definition: mythuiimage.cpp:968
DialogCompletionEvent::kEventType
static Type kEventType
Definition: mythdialogbox.h:57
MythUIButtonList::itemSelected
void itemSelected(MythUIButtonListItem *item)
rssparse.h
RSSEditor::SlotItemChanged
void SlotItemChanged()
Definition: rsseditor.cpp:434
RSSEditPopup::SlotCheckRedirect
void SlotCheckRedirect(QNetworkReply *reply)
Definition: rsseditor.cpp:173
RSSEditor::m_image
MythUIImage * m_image
Definition: rsseditor.h:108
MythConfirmationDialog::haveResult
void haveResult(bool)
mythdialogbox.h
MythScreenStack
Definition: mythscreenstack.h:16
arg
arg(title).arg(filename).arg(doDelete))
mythdbcon.h
RSSSite::GetDescription
const QString & GetDescription() const
Definition: mythrssmanager.h:57
RSSEditor::SlotDeleteSite
void SlotDeleteSite(void)
Definition: rsseditor.cpp:462
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:23
RSSEditor::m_new
MythUIButton * m_new
Definition: rsseditor.h:104
build_compdb.parser
parser
Definition: build_compdb.py:7
MythUITextEdit::GetText
QString GetText(void) const
Definition: mythuitextedit.h:47
build_compdb.file
file
Definition: build_compdb.py:55
RSSEditPopup::m_descEdit
MythUITextEdit * m_descEdit
Definition: rsseditor.h:60
mythdirs.h
mythsorthelper.h
MythUIImage::Reset
void Reset(void) override
Reset the image back to the default defined in the theme.
Definition: mythuiimage.cpp:645
MythMainWindow::GetStack
MythScreenStack * GetStack(const QString &stackname)
Definition: mythmainwindow.cpp:326
rsseditor.h
RSSEditPopup::m_download
MythUICheckBox * m_download
Definition: rsseditor.h:66
mythuibuttonlist.h
hardwareprofile.distros.mythtv_data.data_mythtv.prefix
string prefix
Definition: data_mythtv.py:40
mythuiimage.h
MythUIButtonList::GetCount
int GetCount() const
Definition: mythuibuttonlist.cpp:1655
MythDate::current
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:10
MythScreenType::GetFocusWidget
MythUIType * GetFocusWidget(void) const
Definition: mythscreentype.cpp:112
RSSEditPopup::m_cancelButton
MythUIButton * m_cancelButton
Definition: rsseditor.h:64
Parse
Definition: rssparse.h:189
RSSEditor::m_edit
MythUIButton * m_edit
Definition: rsseditor.h:106
RSSEditor::m_delete
MythUIButton * m_delete
Definition: rsseditor.h:105
MythUIButtonListItem
Definition: mythuibuttonlist.h:28
MythUITextEdit::SetText
void SetText(const QString &text, bool moveCursor=true)
Definition: mythuitextedit.cpp:216
mythdate.h
MythUIType::Show
void Show(void)
Definition: mythuitype.cpp:1125
GetConfDir
QString GetConfDir(void)
Definition: mythdirs.cpp:224
RSSEditPopup::m_manager
QNetworkAccessManager * m_manager
Definition: rsseditor.h:68
RSSEditPopup::~RSSEditPopup
~RSSEditPopup() override
Definition: rsseditor.cpp:47
MythUIButtonList::itemClicked
void itemClicked(MythUIButtonListItem *item)
MythScreenType::SetFocusWidget
bool SetFocusWidget(MythUIType *widget=nullptr)
Definition: mythscreentype.cpp:117
removeFromDB
bool removeFromDB(RSSSite *site)
Definition: netutils.cpp:686
RSSEditPopup::SlotSave
void SlotSave(QNetworkReply *reply)
Definition: rsseditor.cpp:195
RSSEditPopup::m_editing
bool m_editing
Definition: rsseditor.h:54
MythScreenType::BuildFocusList
void BuildFocusList(void)
Definition: mythscreentype.cpp:222
RSSEditPopup
Site name, URL and icon edit screen.
Definition: rsseditor.h:28
netutils.h
RSSEditor::SlotNewSite
void SlotNewSite(void)
Definition: rsseditor.cpp:508
filename
QString filename
Definition: mythplugins/mytharchive/mytharchivehelper/main.cpp:637
mythuifilebrowser.h
RSSEditPopup::m_titleEdit
MythUITextEdit * m_titleEdit
Definition: rsseditor.h:59
MythUIStateType::Full
@ Full
Definition: mythuistatetype.h:25
RSSEditor::Create
bool Create(void) override
Definition: rsseditor.cpp:311
MythUIButtonListItem::GetData
QVariant GetData()
Definition: mythuibuttonlist.cpp:3580
RSSEditor::m_desc
MythUIText * m_desc
Definition: rsseditor.h:111
RSSSite::GetAuthor
const QString & GetAuthor() const
Definition: mythrssmanager.h:59
MythUIFileBrowser
Definition: mythuifilebrowser.h:81
UIUtilDisp::Assign
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27
RSSEditPopup::m_thumbImage
MythUIImage * m_thumbImage
Definition: rsseditor.h:56
RSSEditor::m_changed
bool m_changed
Definition: rsseditor.h:100
RSSEditPopup::m_urlEdit
MythUITextEdit * m_urlEdit
Definition: rsseditor.h:58
RSSEditPopup::redirectUrl
static QUrl redirectUrl(const QUrl &possibleRedirectUrl, const QUrl &oldRedirectUrl)
Definition: rsseditor.cpp:164
RSSEditPopup::ParseAndSave
void ParseAndSave(void)
Definition: rsseditor.cpp:132
RSSEditor::m_url
MythUIText * m_url
Definition: rsseditor.h:110
RSSEditor::ListChanged
void ListChanged(void)
Definition: rsseditor.cpp:539
findAllDBRSS
RSSSite::rssList findAllDBRSS()
Definition: netutils.cpp:611
RSSEditor::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: rsseditor.cpp:383
MythScreenType::keyPressEvent
bool keyPressEvent(QKeyEvent *event) override
Key event handler.
Definition: mythscreentype.cpp:414
RSSSite::GetImage
const QString & GetImage() const
Definition: mythrssmanager.h:55
MythConfirmationDialog
Dialog asking for user confirmation.
Definition: mythdialogbox.h:222
Parse::GetAuthor
static QString GetAuthor(const QDomElement &parent)
Definition: rssparse.cpp:972
mythuitextedit.h
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:692
RSSEditor::fillRSSButtonList
void fillRSSButtonList()
Definition: rsseditor.cpp:416
RSSEditPopup::m_site
RSSSite * m_site
Definition: rsseditor.h:52
RSSEditPopup::m_okButton
MythUIButton * m_okButton
Definition: rsseditor.h:63
RSSEditor::m_title
MythUIText * m_title
Definition: rsseditor.h:109
RSSSite::GetTitle
const QString & GetTitle() const
Definition: mythrssmanager.h:53
RSSEditor::LoadData
void LoadData(void)
Definition: rsseditor.cpp:364
findByURL
RSSSite * findByURL(const QString &url, ArticleType type)
Definition: netutils.cpp:543
DialogCompletionEvent
Event dispatched from MythUI modal dialogs to a listening class containing a result of some form.
Definition: mythdialogbox.h:42
RSSEditor::m_sites
MythUIButtonList * m_sites
Definition: rsseditor.h:103
MythUIText::SetText
virtual void SetText(const QString &text)
Definition: mythuitext.cpp:134
MythUIType::SetVisible
virtual void SetVisible(bool visible)
Definition: mythuitype.cpp:1086
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
VIDEO_PODCAST
@ VIDEO_PODCAST
Definition: rssparse.h:22
RSSEditor::SlotEditSite
void SlotEditSite(void)
Definition: rsseditor.cpp:485
GetMythMainWindow
MythMainWindow * GetMythMainWindow(void)
Definition: mythmainwindow.cpp:105
build_compdb.action
action
Definition: build_compdb.py:9
RSSEditor::m_author
MythUIText * m_author
Definition: rsseditor.h:112
mythuibutton.h
RSSEditPopup::m_urlText
QString m_urlText
Definition: rsseditor.h:53
RSSEditor::m_lock
QMutex m_lock
Definition: rsseditor.h:99
MythUIImage::GetFilename
QString GetFilename(void)
Definition: mythuiimage.h:108
RSSEditor::~RSSEditor
~RSSEditor() override
Definition: rsseditor.cpp:303
RSSEditPopup::m_reply
QNetworkReply * m_reply
Definition: rsseditor.h:69
mythuicheckbox.h
RSSEditPopup::m_authorEdit
MythUITextEdit * m_authorEdit
Definition: rsseditor.h:61
MythUIImage::SetFilename
void SetFilename(const QString &filename)
Must be followed by a call to Load() to load the image.
Definition: mythuiimage.cpp:676
MythUICheckBox::GetCheckState
MythUIStateType::StateType GetCheckState() const
Definition: mythuicheckbox.cpp:98
mythdownloadmanager.h
RSSEditor::m_siteList
RSSSite::rssList m_siteList
Definition: rsseditor.h:102
mythmainwindow.h
MythScreenStack::AddScreen
virtual void AddScreen(MythScreenType *screen, bool allowFade=true)
Definition: mythscreenstack.cpp:49
RSSSite
Definition: mythrssmanager.h:20
RSSEditor::DoDeleteSite
void DoDeleteSite(bool remove)
Definition: rsseditor.cpp:526