Merge lp:~elachuni/software-center/disable-new-review into lp:software-center

Proposed by Anthony Lenton
Status: Merged
Merged at revision: 2684
Proposed branch: lp:~elachuni/software-center/disable-new-review
Merge into: lp:software-center
Diff against target: 154 lines (+47/-2)
5 files modified
softwarecenter/backend/reviews/rnr.py (+5/-1)
softwarecenter/ui/gtk3/views/appdetailsview.py (+6/-1)
softwarecenter/ui/gtk3/widgets/buttons.py (+7/-0)
test/gtk3/test_appdetailsview.py (+18/-0)
utils/submit_review_gtk3.py (+11/-0)
To merge this branch: bzr merge lp:~elachuni/software-center/disable-new-review
Reviewer Review Type Date Requested Status
Michael Vogt Approve
Review via email: mp+89326@code.launchpad.net

Description of the change

Overview
========
This branch disables the "Submit a new review" button when you click it, and reenables it when the submit review dialog closes.

Details
=======
To give some visual feedback about the disabled link, I applied the "subtle-label" style to it. I'm not sure this is the most appropriate style, or if we should use something more specific. Calling set_sensitive(False) also means that the pointer is no longer a hand when you hover over the link.

Some tests provided.

To post a comment you must log in.
Revision history for this message
Anthony Lenton (elachuni) wrote :

... Also, while I was there, I made the submit_review_gtk3.py script set softwarecenter.paths.datadir to the one provided via the command line, so that this works in a local environment.

Revision history for this message
Michael Vogt (mvo) wrote :

Thanks, very nice!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'softwarecenter/backend/reviews/rnr.py'
2--- softwarecenter/backend/reviews/rnr.py 2012-01-17 21:25:58 +0000
3+++ softwarecenter/backend/reviews/rnr.py 2012-01-19 19:12:39 +0000
4@@ -181,7 +181,8 @@
5 # writing new reviews spawns external helper
6 # FIXME: instead of the callback we should add proper gobject signals
7 def spawn_write_new_review_ui(self, translated_app, version, iconname,
8- origin, parent_xid, datadir, callback):
9+ origin, parent_xid, datadir, callback,
10+ done_callback=None):
11 """ this spawns the UI for writing a new review and
12 adds it automatically to the reviews DB """
13 app = translated_app.get_untranslated_app(self.db)
14@@ -199,6 +200,9 @@
15 spawn_helper = SpawnHelper(format="json")
16 spawn_helper.connect(
17 "data-available", self._on_submit_review_data, app, callback)
18+ if done_callback:
19+ spawn_helper.connect("exited", done_callback)
20+ spawn_helper.connect("error", done_callback)
21 spawn_helper.run(cmd)
22
23 def _on_submit_review_data(self, spawn_helper, review_json, app, callback):
24
25=== modified file 'softwarecenter/ui/gtk3/views/appdetailsview.py'
26--- softwarecenter/ui/gtk3/views/appdetailsview.py 2012-01-18 16:32:18 +0000
27+++ softwarecenter/ui/gtk3/views/appdetailsview.py 2012-01-19 19:12:39 +0000
28@@ -854,6 +854,9 @@
29 else:
30 self.review_stats_widget.hide()
31
32+ def _submit_reviews_done_callback(self, spawner, error):
33+ self.reviews.new_review.enable()
34+
35 def _reviews_ready_callback(self, app, reviews_data, my_votes=None,
36 action=None, single_review=None):
37 """ callback when new reviews are ready, cleans out the
38@@ -1607,10 +1610,12 @@
39 # call the loader to do call out the right helper and collect the result
40 parent_xid = ''
41 #parent_xid = get_parent_xid(self)
42+ self.reviews.new_review.disable()
43 self.review_loader.spawn_write_new_review_ui(
44 self.app, version, self.appdetails.icon, origin,
45 parent_xid, self.datadir,
46- self._reviews_ready_callback)
47+ self._reviews_ready_callback,
48+ done_callback=self._submit_reviews_done_callback)
49
50 def _review_report_abuse(self, review_id):
51 parent_xid = ''
52
53=== modified file 'softwarecenter/ui/gtk3/widgets/buttons.py'
54--- softwarecenter/ui/gtk3/widgets/buttons.py 2012-01-05 09:53:52 +0000
55+++ softwarecenter/ui/gtk3/widgets/buttons.py 2012-01-19 19:12:39 +0000
56@@ -580,6 +580,13 @@
57 self.emit("clicked")
58 return
59
60+ def disable(self):
61+ self.set_sensitive(False)
62+ self.set_name("subtle-label")
63+
64+ def enable(self):
65+ self.set_sensitive(True)
66+ self.set_name("label")
67
68 class MoreLink(Gtk.Button):
69
70
71=== modified file 'test/gtk3/test_appdetailsview.py'
72--- test/gtk3/test_appdetailsview.py 2012-01-18 20:12:05 +0000
73+++ test/gtk3/test_appdetailsview.py 2012-01-19 19:12:39 +0000
74@@ -230,6 +230,24 @@
75 self.assertEqual(False, kwargs['relaxed'])
76 self.assertEqual(2, kwargs['page'])
77
78+ @patch('softwarecenter.backend.spawn_helper.SpawnHelper.run')
79+ def test_submit_new_review_disables_button(self, mock_run):
80+ button = self.view.reviews.new_review
81+ self.assertTrue(button.is_sensitive())
82+
83+ button.emit('clicked')
84+
85+ self.assertFalse(button.is_sensitive())
86+
87+ def test_new_review_dialog_closes_reenables_submit_button(self):
88+ button = self.view.reviews.new_review
89+ button.disable()
90+
91+ self.view._submit_reviews_done_callback(None, 0)
92+
93+ self.assertTrue(button.is_sensitive())
94+
95+
96
97 if __name__ == "__main__":
98 import logging
99
100=== modified file 'utils/submit_review_gtk3.py'
101--- utils/submit_review_gtk3.py 2012-01-19 09:23:54 +0000
102+++ utils/submit_review_gtk3.py 2012-01-19 19:12:39 +0000
103@@ -31,6 +31,7 @@
104 from gettext import gettext as _
105 from optparse import OptionParser
106
107+import softwarecenter.paths
108 from softwarecenter.paths import SOFTWARE_CENTER_CACHE_DIR
109 from softwarecenter.db.database import Application
110
111@@ -85,6 +86,8 @@
112 action="store_true", default=False)
113 (options, args) = parser.parse_args()
114
115+ softwarecenter.paths.datadir = options.datadir
116+
117 if options.test:
118 options.pkgname = options.pkgname or 'apt'
119 options.appname = options.appname or 'Apt'
120@@ -122,6 +125,8 @@
121 action="store_true", default=False)
122 (options, args) = parser.parse_args()
123
124+ softwarecenter.paths.datadir = options.datadir
125+
126 if not (options.review_id):
127 parser.error(_("Missing review-id arguments"))
128
129@@ -146,6 +151,8 @@
130 action="store_true", default=False)
131 (options, args) = parser.parse_args()
132
133+ softwarecenter.paths.datadir = options.datadir
134+
135 if not (options.review_id):
136 parser.error(_("Missing review-id arguments"))
137
138@@ -170,6 +177,8 @@
139 action="store_true", default=False)
140 (options, args) = parser.parse_args()
141
142+ softwarecenter.paths.datadir = options.datadir
143+
144 if not (options.review_id):
145 parser.error(_("Missing review-id argument"))
146
147@@ -192,6 +201,8 @@
148 action="store_true", default=False)
149 (options, args) = parser.parse_args()
150
151+ softwarecenter.paths.datadir = options.datadir
152+
153 if not (options.review_id):
154 parser.error(_("Missing review-id argument"))
155