12 str = unicode |
12 str = unicode |
13 except (NameError): |
13 except (NameError): |
14 pass |
14 pass |
15 |
15 |
16 from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QXmlStreamReader |
16 from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QXmlStreamReader |
17 from PyQt4.QtGui import QDialog, QIcon, QTreeWidgetItem, QMenu, QCursor, QApplication |
17 from PyQt4.QtGui import QDialog, QIcon, QTreeWidgetItem, QMenu, QCursor, \ |
|
18 QApplication |
18 from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply |
19 from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply |
19 from PyQt4.QtWebKit import QWebSettings |
20 from PyQt4.QtWebKit import QWebSettings |
20 |
21 |
21 from E5Gui import E5MessageBox |
22 from E5Gui import E5MessageBox |
22 |
23 |
90 if feed[0] == urlString: |
91 if feed[0] == urlString: |
91 return False |
92 return False |
92 |
93 |
93 # step 2: add the feed |
94 # step 2: add the feed |
94 if icon.isNull() or \ |
95 if icon.isNull() or \ |
95 icon == QIcon(QWebSettings.webGraphic(QWebSettings.DefaultFrameIconGraphic)): |
96 icon == QIcon(QWebSettings.webGraphic( |
|
97 QWebSettings.DefaultFrameIconGraphic)): |
96 icon = UI.PixmapCache.getIcon("rss16.png") |
98 icon = UI.PixmapCache.getIcon("rss16.png") |
97 feed = (urlString, title, icon) |
99 feed = (urlString, title, icon) |
98 self.__feeds.append(feed) |
100 self.__feeds.append(feed) |
99 self.__addFeedItem(feed) |
101 self.__addFeedItem(feed) |
100 self.__save() |
102 self.__save() |
176 urlString, title = dlg.getData() |
178 urlString, title = dlg.getData() |
177 for feed in self.__feeds: |
179 for feed in self.__feeds: |
178 if feed[0] == urlString: |
180 if feed[0] == urlString: |
179 E5MessageBox.critical(self, |
181 E5MessageBox.critical(self, |
180 self.trUtf8("Duplicate Feed URL"), |
182 self.trUtf8("Duplicate Feed URL"), |
181 self.trUtf8("""A feed with the URL {0} exists already.""" |
183 self.trUtf8( |
182 """ Aborting...""".format(urlString))) |
184 """A feed with the URL {0} exists already.""" |
|
185 """ Aborting...""".format(urlString))) |
183 return |
186 return |
184 |
187 |
185 self.__feeds[feedIndex] = (urlString, title, feedToChange[2]) |
188 self.__feeds[feedIndex] = (urlString, title, feedToChange[2]) |
186 self.__save() |
189 self.__save() |
187 |
190 |
197 itm = self.feedsTree.selectedItems()[0] |
200 itm = self.feedsTree.selectedItems()[0] |
198 title = itm.text(0) |
201 title = itm.text(0) |
199 res = E5MessageBox.yesNo(self, |
202 res = E5MessageBox.yesNo(self, |
200 self.trUtf8("Delete Feed"), |
203 self.trUtf8("Delete Feed"), |
201 self.trUtf8( |
204 self.trUtf8( |
202 """<p>Do you really want to delete the feed <b>{0}</b>?</p>""".format( |
205 """<p>Do you really want to delete the feed""" |
203 title))) |
206 """ <b>{0}</b>?</p>""".format(title))) |
204 if res: |
207 if res: |
205 urlString = itm.data(0, FeedsManager.UrlStringRole) |
208 urlString = itm.data(0, FeedsManager.UrlStringRole) |
206 if urlString: |
209 if urlString: |
207 feedToDelete = None |
210 feedToDelete = None |
208 for feed in self.__feeds: |
211 for feed in self.__feeds: |
253 for child in itm.takeChildren(): |
256 for child in itm.takeChildren(): |
254 del child |
257 del child |
255 |
258 |
256 import Helpviewer.HelpWindow |
259 import Helpviewer.HelpWindow |
257 request = QNetworkRequest(QUrl(urlString)) |
260 request = QNetworkRequest(QUrl(urlString)) |
258 reply = Helpviewer.HelpWindow.HelpWindow.networkAccessManager().get(request) |
261 reply = Helpviewer.HelpWindow.HelpWindow.networkAccessManager()\ |
|
262 .get(request) |
259 reply.finished[()].connect(self.__feedLoaded) |
263 reply.finished[()].connect(self.__feedLoaded) |
260 self.__replies[id(reply)] = (reply, itm) |
264 self.__replies[id(reply)] = (reply, itm) |
261 |
265 |
262 def __feedLoaded(self): |
266 def __feedLoaded(self): |
263 """ |
267 """ |
303 |
307 |
304 if topItem.childCount() == 0: |
308 if topItem.childCount() == 0: |
305 itm = QTreeWidgetItem(topItem) |
309 itm = QTreeWidgetItem(topItem) |
306 itm.setText(0, self.trUtf8("Error fetching feed")) |
310 itm.setText(0, self.trUtf8("Error fetching feed")) |
307 itm.setData(0, FeedsManager.UrlStringRole, "") |
311 itm.setData(0, FeedsManager.UrlStringRole, "") |
308 itm.setData(0, FeedsManager.ErrorDataRole, str(xmlData, encoding="utf-8")) |
312 itm.setData(0, FeedsManager.ErrorDataRole, |
|
313 str(xmlData, encoding="utf-8")) |
309 |
314 |
310 topItem.setExpanded(True) |
315 topItem.setExpanded(True) |
311 else: |
316 else: |
312 linkString = "" |
317 linkString = "" |
313 titleString = reply.errorString() |
318 titleString = reply.errorString() |
330 return |
335 return |
331 |
336 |
332 urlString = itm.data(0, FeedsManager.UrlStringRole) |
337 urlString = itm.data(0, FeedsManager.UrlStringRole) |
333 if urlString: |
338 if urlString: |
334 menu = QMenu() |
339 menu = QMenu() |
335 menu.addAction(self.trUtf8("&Open"), self.__openMessageInCurrentTab) |
340 menu.addAction( |
336 menu.addAction(self.trUtf8("Open in New &Tab"), self.__openMessageInNewTab) |
341 self.trUtf8("&Open"), self.__openMessageInCurrentTab) |
|
342 menu.addAction( |
|
343 self.trUtf8("Open in New &Tab"), self.__openMessageInNewTab) |
337 menu.addSeparator() |
344 menu.addSeparator() |
338 menu.addAction(self.trUtf8("&Copy URL to Clipboard"), |
345 menu.addAction(self.trUtf8("&Copy URL to Clipboard"), |
339 self.__copyUrlToClipboard) |
346 self.__copyUrlToClipboard) |
340 menu.exec_(QCursor.pos()) |
347 menu.exec_(QCursor.pos()) |
341 else: |
348 else: |
342 errorString = itm.data(0, FeedsManager.ErrorDataRole) |
349 errorString = itm.data(0, FeedsManager.ErrorDataRole) |
343 if errorString: |
350 if errorString: |
344 menu = QMenu() |
351 menu = QMenu() |
345 menu.addAction(self.trUtf8("&Show error data"), self.__showError) |
352 menu.addAction( |
|
353 self.trUtf8("&Show error data"), self.__showError) |
346 menu.exec_(QCursor.pos()) |
354 menu.exec_(QCursor.pos()) |
347 |
355 |
348 def __itemActivated(self, itm, column): |
356 def __itemActivated(self, itm, column): |
349 """ |
357 """ |
350 Private slot to handle the activation of an item. |
358 Private slot to handle the activation of an item. |
354 """ |
362 """ |
355 if self.feedsTree.indexOfTopLevelItem(itm) != -1: |
363 if self.feedsTree.indexOfTopLevelItem(itm) != -1: |
356 return |
364 return |
357 |
365 |
358 self.__openMessage( |
366 self.__openMessage( |
359 QApplication.keyboardModifiers() & Qt.ControlModifier == Qt.ControlModifier) |
367 QApplication.keyboardModifiers() & |
|
368 Qt.ControlModifier == Qt.ControlModifier) |
360 |
369 |
361 def __openMessageInCurrentTab(self): |
370 def __openMessageInCurrentTab(self): |
362 """ |
371 """ |
363 Private slot to open a feed message in the current browser tab. |
372 Private slot to open a feed message in the current browser tab. |
364 """ |
373 """ |