|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2011 - 2016 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing a dialog to add RSS feeds. |
|
8 """ |
|
9 |
|
10 from __future__ import unicode_literals |
|
11 |
|
12 from PyQt5.QtCore import QUrl |
|
13 from PyQt5.QtWidgets import QDialog, QPushButton, QLabel |
|
14 |
|
15 from E5Gui import E5MessageBox |
|
16 |
|
17 from .Ui_FeedsDialog import Ui_FeedsDialog |
|
18 |
|
19 import UI.PixmapCache |
|
20 |
|
21 |
|
22 class FeedsDialog(QDialog, Ui_FeedsDialog): |
|
23 """ |
|
24 Class implementing a dialog to add RSS feeds. |
|
25 """ |
|
26 def __init__(self, availableFeeds, browser, parent=None): |
|
27 """ |
|
28 Constructor |
|
29 |
|
30 @param availableFeeds list of available RSS feeds (list of tuple of |
|
31 two strings) |
|
32 @param browser reference to the browser widget (WebBrowserView) |
|
33 @param parent reference to the parent widget (QWidget) |
|
34 """ |
|
35 super(FeedsDialog, self).__init__(parent) |
|
36 self.setupUi(self) |
|
37 |
|
38 self.iconLabel.setPixmap(UI.PixmapCache.getPixmap("rss48.png")) |
|
39 |
|
40 self.__browser = browser |
|
41 |
|
42 self.__availableFeeds = availableFeeds[:] |
|
43 for row in range(len(self.__availableFeeds)): |
|
44 feed = self.__availableFeeds[row] |
|
45 button = QPushButton(self) |
|
46 button.setText(self.tr("Add")) |
|
47 button.feed = feed |
|
48 label = QLabel(self) |
|
49 label.setText(feed[0]) |
|
50 self.feedsLayout.addWidget(label, row, 0) |
|
51 self.feedsLayout.addWidget(button, row, 1) |
|
52 button.clicked.connect(self.__addFeed) |
|
53 |
|
54 msh = self.minimumSizeHint() |
|
55 self.resize(max(self.width(), msh.width()), msh.height()) |
|
56 |
|
57 def __addFeed(self): |
|
58 """ |
|
59 Private slot to add a RSS feed. |
|
60 """ |
|
61 button = self.sender() |
|
62 urlString = button.feed[1] |
|
63 url = QUrl(urlString) |
|
64 if not url.host(): |
|
65 if not urlString.startswith("/"): |
|
66 urlString = "/" + urlString |
|
67 urlString = self.__browser.url().host() + urlString |
|
68 tmpUrl = QUrl(urlString) |
|
69 if not tmpUrl.scheme(): |
|
70 urlString = "http://" + urlString |
|
71 tmpUrl = QUrl(urlString) |
|
72 if not tmpUrl.scheme() or not tmpUrl.host(): |
|
73 return |
|
74 if not url.isValid(): |
|
75 return |
|
76 |
|
77 if button.feed[0]: |
|
78 title = button.feed[0] |
|
79 else: |
|
80 title = self.__browser.url().host() |
|
81 |
|
82 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
|
83 feedsManager = WebBrowserWindow.feedsManager() |
|
84 if feedsManager.addFeed(urlString, title, self.__browser.icon()): |
|
85 if WebBrowserWindow.notificationsEnabled(): |
|
86 WebBrowserWindow.showNotification( |
|
87 UI.PixmapCache.getPixmap("rss48.png"), |
|
88 self.tr("Add RSS Feed"), |
|
89 self.tr("""The feed was added successfully.""")) |
|
90 else: |
|
91 E5MessageBox.information( |
|
92 self, |
|
93 self.tr("Add RSS Feed"), |
|
94 self.tr("""The feed was added successfully.""")) |
|
95 else: |
|
96 E5MessageBox.warning( |
|
97 self, |
|
98 self.tr("Add RSS Feed"), |
|
99 self.tr("""The feed was already added before.""")) |
|
100 |
|
101 self.close() |