Mercurial > hg > Feedworm
annotate MainWindow.py @ 167:a3c945ce434c
adjust the sqlalchemy backend to the changes in AbstractFeedUpdater
author | dirk |
---|---|
date | Mon, 05 Sep 2011 19:39:08 +0200 |
parents | a05719a6175e |
children | c345a26febc2 |
rev | line source |
---|---|
14 | 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 | 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 | 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 | 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 | 22 self.ui = Ui_MainWindow() |
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 | 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 | 54 self.setupFeedEntriesTableHeaderWidths() |
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 | 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 | 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 | 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 | 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 | 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 | 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) |