annotate MainWindow.py @ 177:98eaf0075a44

make setup.sh work with non-local coucdhb URLs
author Dirk Olmes <dirk@xanthippe.ping.de>
date Sat, 10 Sep 2011 03:09:17 +0200
parents a05719a6175e
children c345a26febc2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
42a225be7e56 first version of the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
1
121
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
2 from AddFeed import AddFeed
21
c8bb3cee7935 pull out DisplayModel into its own file, add the scaffolding for the add feed menu entry
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 19
diff changeset
3 from DisplayModel import DisplayModel
55
0f9b3e57cff0 pull out FeedEntryItemDelegate into its own file
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 53
diff changeset
4 from FeedEntryItemDelegate import FeedEntryItemDelegate
91
e5d5fc34ff2e convert feed list to a table view. TODO: proper resizing for columns
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 90
diff changeset
5 from FeedEntryTableModel import FeedEntryTableModel
48
6e5219e05625 GUI for feed settings
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 47
diff changeset
6 from FeedSettings import FeedSettings
120
e830fa1cc7a2 re-enabled PreferencesDialog
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 119
diff changeset
7 from PreferencesDialog import PreferencesDialog
21
c8bb3cee7935 pull out DisplayModel into its own file, add the scaffolding for the add feed menu entry
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 19
diff changeset
8 from PyQt4.QtCore import QUrl
113
04f8cf1558c1 Add a menu item to copy the selected article's link to the clipboard
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 107
diff changeset
9 from PyQt4.QtGui import QApplication
90
a1066e5a8f88 save pending changes when quitting the app
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 89
diff changeset
10 from PyQt4.QtGui import QMainWindow
a1066e5a8f88 save pending changes when quitting the app
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 89
diff changeset
11 from PyQt4.QtGui import QWidget
14
42a225be7e56 first version of the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
12 from Ui_MainWindow import Ui_MainWindow
37
22214d79ed41 database URL must be given as commandline argument now, no need for creating complicated config files. Add a menu entry for opening the selected article in browser.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 33
diff changeset
13 import subprocess
14
42a225be7e56 first version of the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
14
50
4b0d686493fb better error handling while adding feeds: data is only saved if a feed could be created and entries could be retrieved. MainWindow displays feedback in the status bar if an exception occurred while adding a feed.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 49
diff changeset
15 STATUS_MESSAGE_DISPLAY_MILLIS = 20000
4b0d686493fb better error handling while adding feeds: data is only saved if a feed could be created and entries could be retrieved. MainWindow displays feedback in the status bar if an exception occurred while adding a feed.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 49
diff changeset
16
90
a1066e5a8f88 save pending changes when quitting the app
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 89
diff changeset
17 class MainWindow(QMainWindow):
119
04a730f9d07d move all sqlalchemy related classes to the respective sub-package. use a backend to abstract from access to the data
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 115
diff changeset
18 def __init__(self, backend=None):
90
a1066e5a8f88 save pending changes when quitting the app
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 89
diff changeset
19 QWidget.__init__(self, None)
119
04a730f9d07d move all sqlalchemy related classes to the respective sub-package. use a backend to abstract from access to the data
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 115
diff changeset
20 self.backend = backend
04a730f9d07d move all sqlalchemy related classes to the respective sub-package. use a backend to abstract from access to the data
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 115
diff changeset
21 self.preferences = backend.preferences()
14
42a225be7e56 first version of the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
22 self.ui = Ui_MainWindow()
42a225be7e56 first version of the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents:
diff changeset
23 self.ui.setupUi(self)
27
bdd1296a4b8c implemented adding a feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 24
diff changeset
24 self.updateFeedList()
31
5bb57caa8f66 display a feed's entries sorted by their update date
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 27
diff changeset
25 self.initFeedEntryList()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
26
71
228da10cc98b MainWindow relies on FeedList to get the feeds to display now. FeedList has two inner/private classes: one for returning all known feeds and one to return only feeds with unread entries.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 61
diff changeset
27 def updateFeedList(self):
151
bca9341dc67f move the selected feed into the backend - sqlalchemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 150
diff changeset
28 allFeeds = self.backend.getFeeds()
bca9341dc67f move the selected feed into the backend - sqlalchemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 150
diff changeset
29 feedModel = DisplayModel(self, allFeeds, "title")
15
b1aeb98824c1 Add a list view displaying all feeds
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 14
diff changeset
30 self.ui.feedList.setModel(feedModel)
27
bdd1296a4b8c implemented adding a feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 24
diff changeset
31 self.ui.feedList.update()
bdd1296a4b8c implemented adding a feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 24
diff changeset
32
31
5bb57caa8f66 display a feed's entries sorted by their update date
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 27
diff changeset
33 def initFeedEntryList(self):
97
11036eabbc46 use a smaller default row height
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 93
diff changeset
34 # setup the default row height. This must be called before a table model is set
11036eabbc46 use a smaller default row height
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 93
diff changeset
35 self.ui.feedEntryList.verticalHeader().setDefaultSectionSize(20)
11036eabbc46 use a smaller default row height
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 93
diff changeset
36
33
f371d02fa09d mark unread feed entries bold. Add a menu item to toggle between read/unread
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
37 self.ui.feedEntryList.setItemDelegate(FeedEntryItemDelegate())
91
e5d5fc34ff2e convert feed list to a table view. TODO: proper resizing for columns
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 90
diff changeset
38 self.ui.feedEntryList.setModel(FeedEntryTableModel([]))
e5d5fc34ff2e convert feed list to a table view. TODO: proper resizing for columns
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 90
diff changeset
39 self.ui.feedEntryList.horizontalHeader().setStretchLastSection(True)
31
5bb57caa8f66 display a feed's entries sorted by their update date
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 27
diff changeset
40
17
5fda8bd94fa8 make the model used to display feeds generic (so it can be used to display FeedEntries, too)
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 16
diff changeset
41 def feedSelected(self, index):
151
bca9341dc67f move the selected feed into the backend - sqlalchemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 150
diff changeset
42 self.backend.selectFeed(index.row())
61
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 60
diff changeset
43 self.enableFeedRelatedWidgets()
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 60
diff changeset
44 self.setupFeedEntries()
53
8cca4585eb33 the feed settings menu item starts out disabled and gets enabled once a feed is selected
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 50
diff changeset
45
61
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 60
diff changeset
46 def enableFeedRelatedWidgets(self):
53
8cca4585eb33 the feed settings menu item starts out disabled and gets enabled once a feed is selected
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 50
diff changeset
47 self.ui.actionFeedSettings.setEnabled(True)
56
c82f5538733c add a menu item to mark all entries in a feed as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 55
diff changeset
48 self.ui.actionMarkFeedRead.setEnabled(True)
103
063581d8594e implement deleting a feed from the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 97
diff changeset
49 self.ui.actionDeleteFeed.setEnabled(True)
61
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 60
diff changeset
50
db35ab7753f0 add a preference to hide read feed entries
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 60
diff changeset
51 def setupFeedEntries(self):
152
a1c0459e1eeb rename some methods
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 151
diff changeset
52 self.setupFeedEntriesTableModel()
93
e030c6bd2d81 when selecting a feed, set the title column width to 80% of the total width
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 91
diff changeset
53 self.ui.feedEntryList.update()
152
a1c0459e1eeb rename some methods
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 151
diff changeset
54 self.setupFeedEntriesTableHeaderWidths()
a1c0459e1eeb rename some methods
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 151
diff changeset
55 self.scrollFirstRowInFeedEntriesTableToVisible()
93
e030c6bd2d81 when selecting a feed, set the title column width to 80% of the total width
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 91
diff changeset
56
152
a1c0459e1eeb rename some methods
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 151
diff changeset
57 def setupFeedEntriesTableModel(self):
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
58 feedEntries = self.backend.entriesForSelectedFeed()
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
59 model = FeedEntryTableModel(feedEntries)
18
35225588b895 add a list view for displaying feed entries from the selected feed
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 17
diff changeset
60 self.ui.feedEntryList.setModel(model)
91
e5d5fc34ff2e convert feed list to a table view. TODO: proper resizing for columns
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 90
diff changeset
61
152
a1c0459e1eeb rename some methods
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 151
diff changeset
62 def setupFeedEntriesTableHeaderWidths(self):
93
e030c6bd2d81 when selecting a feed, set the title column width to 80% of the total width
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 91
diff changeset
63 width = self.ui.feedEntryList.width()
e030c6bd2d81 when selecting a feed, set the title column width to 80% of the total width
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 91
diff changeset
64 firstColumnWidth = int(width * 0.8)
e030c6bd2d81 when selecting a feed, set the title column width to 80% of the total width
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 91
diff changeset
65 self.ui.feedEntryList.setColumnWidth(0, firstColumnWidth)
e030c6bd2d81 when selecting a feed, set the title column width to 80% of the total width
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 91
diff changeset
66
152
a1c0459e1eeb rename some methods
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 151
diff changeset
67 def scrollFirstRowInFeedEntriesTableToVisible(self):
93
e030c6bd2d81 when selecting a feed, set the title column width to 80% of the total width
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 91
diff changeset
68 model = self.ui.feedEntryList.model()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
69 visibleIndex = model.createIndex(0, 0)
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
70 self.ui.feedEntryList.scrollTo(visibleIndex)
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
71
19
6f7003fc6e6d display the summary of the selected feed entry
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 18
diff changeset
72 def feedEntrySelected(self, index):
39
0c2578196643 Disable the article menu by default, enable it when the first article is selected
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 37
diff changeset
73 self.ui.menuArticle.setEnabled(True)
115
e9145e8dd698 add a toolbar with actions
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 113
diff changeset
74 self.ui.actionOpenLink.setEnabled(True)
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
75
19
6f7003fc6e6d display the summary of the selected feed entry
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 18
diff changeset
76 row = index.row()
155
a05719a6175e move common functionality into an abstract backend class, have both backends inherit from it. Implement enough of the couchdb backend that reading feeds (and marking feed entries as read) is possible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 153
diff changeset
77 self.backend.selectFeedEntry(row)
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
78
155
a05719a6175e move common functionality into an abstract backend class, have both backends inherit from it. Implement enough of the couchdb backend that reading feeds (and marking feed entries as read) is possible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 153
diff changeset
79 if self.backend.selectedFeed.auto_load_entry_link:
47
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
80 self.openLinkFromSelectedEntry()
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
81 else:
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
82 self.openSummaryFromSelectedEntry()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
83
104
4f87be5399ff double clicking a feed entry opens it in the external browser
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 103
diff changeset
84 def feedEntryDoubleClicked(self, index):
4f87be5399ff double clicking a feed entry opens it in the external browser
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 103
diff changeset
85 self.ui.menuArticle.setEnabled(True)
4f87be5399ff double clicking a feed entry opens it in the external browser
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 103
diff changeset
86 self.openSelectedEntryInBrowser()
4f87be5399ff double clicking a feed entry opens it in the external browser
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 103
diff changeset
87
47
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
88 def openSummaryFromSelectedEntry(self):
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
89 # TODO this is the wrong base url, figure out the correct one
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
90 feedEntry = self.backend.selectedFeedEntry
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
91 baseUrl = QUrl(feedEntry.link)
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
92 self.ui.webView.setHtml(feedEntry.summary, baseUrl)
47
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
93
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
94 def openLinkFromSelectedEntry(self):
155
a05719a6175e move common functionality into an abstract backend class, have both backends inherit from it. Implement enough of the couchdb backend that reading feeds (and marking feed entries as read) is possible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 153
diff changeset
95 if self.backend.selectedFeed.always_open_in_browser:
77
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
96 self.openSelectedEntryInBrowser()
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
97 else:
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
98 self.openSelectedEntryInWebView()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
99
77
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
100 def openSelectedEntryInWebView(self):
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
101 feedEntry = self.backend.selectedFeedEntry
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
102 message = "Open %s ..." % (feedEntry.title)
82
2dd6e6894772 update the status bar when opening a feed's rss url via WebView or external browser
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
103 self._updateStatusBar(message)
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
104 url = QUrl(feedEntry.link)
47
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
105 self.ui.webView.load(url)
a8442c3487b5 add an option to Feed that allows loading an entry's link right away instead of displaying a feed's summary
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 42
diff changeset
106 self.ui.webView.show()
77
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
107
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
108 def openSelectedEntryInBrowser(self):
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
109 feedEntry = self.backend.selectedFeedEntry
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
110 message = "Open %s in external browser" % (feedEntry.title)
82
2dd6e6894772 update the status bar when opening a feed's rss url via WebView or external browser
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
111 self._updateStatusBar(message)
77
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
112 # TODO make browser configurable
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
113 browser = "/usr/local/bin/opera"
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
114 subprocess.Popen([browser, feedEntry.link])
77
d292ab61ed6f Add another setting to feed: when opening a feed entry in browser, you can force opening it in an external browser now. This is because some sites just crash the QWebView.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 75
diff changeset
115
33
f371d02fa09d mark unread feed entries bold. Add a menu item to toggle between read/unread
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 31
diff changeset
116 def toggleReadOnSelectedEntry(self):
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
117 self.backend.toggleSelectedFeedEntryRead()
75
a8a4cf131a02 Properly update the feed entry list when marking an entry as read/unread
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 74
diff changeset
118 self.ui.feedEntryList.doItemsLayout()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
119
59
daa2731967fe Marking all articles in a feed as read doesn't toggle any more ... it marks all articles as read.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 56
diff changeset
120 def markSelectedFeedRead(self):
151
bca9341dc67f move the selected feed into the backend - sqlalchemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 150
diff changeset
121 self.backend.markSelectedFeedAsRead()
74
1e6f6ed38dd0 do a proper update when marking all feed entries as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 71
diff changeset
122 self.ui.feedEntryList.doItemsLayout()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
123
105
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
124 def markSelectedEntriesRead(self):
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
125 indexes = []
105
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
126 selectedIndexes = self.ui.feedEntryList.selectedIndexes()
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
127 for index in selectedIndexes:
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
128 # selectedIndexes returns one QModelIndex instance per row/column combo.
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
129 # We are only interested in the rows here so just operate on the first
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
130 # column
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
131 if index.column() == 0:
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
132 row = index.row()
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
133 indexes.append(row)
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
134 self.backend.markFeedEntriesAsRead(indexes)
105
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
135 self.ui.feedEntryList.doItemsLayout()
d372b3ee7bd8 add marking the entire current selection as read
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 104
diff changeset
136
21
c8bb3cee7935 pull out DisplayModel into its own file, add the scaffolding for the add feed menu entry
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 19
diff changeset
137 def addFeed(self):
121
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
138 addFeed = AddFeed(self.backend)
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
139 success = addFeed.exec_()
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
140 if not success:
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
141 return
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
142
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
143 if addFeed.exception is not None:
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
144 message = "Error while adding feed: " + str(addFeed.exception)
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
145 self._updateStatusBar(message)
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
146 else:
510a5d00e98a re-enabled AddFeed - does not work yet
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 120
diff changeset
147 self.updateFeedList()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
148
103
063581d8594e implement deleting a feed from the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 97
diff changeset
149 def deleteFeed(self):
063581d8594e implement deleting a feed from the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 97
diff changeset
150 try:
151
bca9341dc67f move the selected feed into the backend - sqlalchemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 150
diff changeset
151 self.backend.deleteSelectedFeed()
103
063581d8594e implement deleting a feed from the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 97
diff changeset
152 self.updateFeedList()
063581d8594e implement deleting a feed from the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 97
diff changeset
153 except Exception as exception:
063581d8594e implement deleting a feed from the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 97
diff changeset
154 message = "Error while deleting feed: " + str(exception)
063581d8594e implement deleting a feed from the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 97
diff changeset
155 self._updateStatusBar(message)
063581d8594e implement deleting a feed from the GUI
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 97
diff changeset
156
40
c858aab71e5b add preferences dialog
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 39
diff changeset
157 def showPreferences(self):
120
e830fa1cc7a2 re-enabled PreferencesDialog
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 119
diff changeset
158 preferences = PreferencesDialog(self.backend)
e830fa1cc7a2 re-enabled PreferencesDialog
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 119
diff changeset
159 preferences.exec_()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
160
48
6e5219e05625 GUI for feed settings
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 47
diff changeset
161 def showFeedSettings(self):
151
bca9341dc67f move the selected feed into the backend - sqlalchemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 150
diff changeset
162 feedSettings = FeedSettings(self.backend)
48
6e5219e05625 GUI for feed settings
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 47
diff changeset
163 feedSettings.exec_()
89
2eddb44920d1 When selecting a new feed, scroll its first entry to visible
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 84
diff changeset
164
82
2dd6e6894772 update the status bar when opening a feed's rss url via WebView or external browser
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
165 def _updateStatusBar(self, message):
2dd6e6894772 update the status bar when opening a feed's rss url via WebView or external browser
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 77
diff changeset
166 self.ui.statusbar.showMessage(message, STATUS_MESSAGE_DISPLAY_MILLIS)
37
22214d79ed41 database URL must be given as commandline argument now, no need for creating complicated config files. Add a menu entry for opening the selected article in browser.
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 33
diff changeset
167
90
a1066e5a8f88 save pending changes when quitting the app
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 89
diff changeset
168 def close(self):
119
04a730f9d07d move all sqlalchemy related classes to the respective sub-package. use a backend to abstract from access to the data
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 115
diff changeset
169 self.backend.dispose()
90
a1066e5a8f88 save pending changes when quitting the app
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 89
diff changeset
170 QMainWindow.close(self)
113
04f8cf1558c1 Add a menu item to copy the selected article's link to the clipboard
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 107
diff changeset
171
04f8cf1558c1 Add a menu item to copy the selected article's link to the clipboard
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 107
diff changeset
172 def copyArticleURLToClipboard(self):
04f8cf1558c1 Add a menu item to copy the selected article's link to the clipboard
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 107
diff changeset
173 clipboard = QApplication.clipboard()
153
65c4bb6d5add move management of the selected feed entry into the backend - sqlachemy backend works, couchdb backend currently broken
Dirk Olmes <dirk@xanthippe.ping.de>
parents: 152
diff changeset
174 clipboard.setText(self.backend.selectedFeedEntry.link)