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
=== modified file 'softwarecenter/backend/reviews/rnr.py'
--- softwarecenter/backend/reviews/rnr.py 2012-01-17 21:25:58 +0000
+++ softwarecenter/backend/reviews/rnr.py 2012-01-19 19:12:39 +0000
@@ -181,7 +181,8 @@
181 # writing new reviews spawns external helper181 # writing new reviews spawns external helper
182 # FIXME: instead of the callback we should add proper gobject signals182 # FIXME: instead of the callback we should add proper gobject signals
183 def spawn_write_new_review_ui(self, translated_app, version, iconname, 183 def spawn_write_new_review_ui(self, translated_app, version, iconname,
184 origin, parent_xid, datadir, callback):184 origin, parent_xid, datadir, callback,
185 done_callback=None):
185 """ this spawns the UI for writing a new review and186 """ this spawns the UI for writing a new review and
186 adds it automatically to the reviews DB """187 adds it automatically to the reviews DB """
187 app = translated_app.get_untranslated_app(self.db)188 app = translated_app.get_untranslated_app(self.db)
@@ -199,6 +200,9 @@
199 spawn_helper = SpawnHelper(format="json")200 spawn_helper = SpawnHelper(format="json")
200 spawn_helper.connect(201 spawn_helper.connect(
201 "data-available", self._on_submit_review_data, app, callback)202 "data-available", self._on_submit_review_data, app, callback)
203 if done_callback:
204 spawn_helper.connect("exited", done_callback)
205 spawn_helper.connect("error", done_callback)
202 spawn_helper.run(cmd)206 spawn_helper.run(cmd)
203207
204 def _on_submit_review_data(self, spawn_helper, review_json, app, callback):208 def _on_submit_review_data(self, spawn_helper, review_json, app, callback):
205209
=== modified file 'softwarecenter/ui/gtk3/views/appdetailsview.py'
--- softwarecenter/ui/gtk3/views/appdetailsview.py 2012-01-18 16:32:18 +0000
+++ softwarecenter/ui/gtk3/views/appdetailsview.py 2012-01-19 19:12:39 +0000
@@ -854,6 +854,9 @@
854 else:854 else:
855 self.review_stats_widget.hide()855 self.review_stats_widget.hide()
856856
857 def _submit_reviews_done_callback(self, spawner, error):
858 self.reviews.new_review.enable()
859
857 def _reviews_ready_callback(self, app, reviews_data, my_votes=None,860 def _reviews_ready_callback(self, app, reviews_data, my_votes=None,
858 action=None, single_review=None):861 action=None, single_review=None):
859 """ callback when new reviews are ready, cleans out the862 """ callback when new reviews are ready, cleans out the
@@ -1607,10 +1610,12 @@
1607 # call the loader to do call out the right helper and collect the result1610 # call the loader to do call out the right helper and collect the result
1608 parent_xid = ''1611 parent_xid = ''
1609 #parent_xid = get_parent_xid(self)1612 #parent_xid = get_parent_xid(self)
1613 self.reviews.new_review.disable()
1610 self.review_loader.spawn_write_new_review_ui(1614 self.review_loader.spawn_write_new_review_ui(
1611 self.app, version, self.appdetails.icon, origin,1615 self.app, version, self.appdetails.icon, origin,
1612 parent_xid, self.datadir,1616 parent_xid, self.datadir,
1613 self._reviews_ready_callback)1617 self._reviews_ready_callback,
1618 done_callback=self._submit_reviews_done_callback)
1614 1619
1615 def _review_report_abuse(self, review_id):1620 def _review_report_abuse(self, review_id):
1616 parent_xid = ''1621 parent_xid = ''
16171622
=== modified file 'softwarecenter/ui/gtk3/widgets/buttons.py'
--- softwarecenter/ui/gtk3/widgets/buttons.py 2012-01-05 09:53:52 +0000
+++ softwarecenter/ui/gtk3/widgets/buttons.py 2012-01-19 19:12:39 +0000
@@ -580,6 +580,13 @@
580 self.emit("clicked")580 self.emit("clicked")
581 return581 return
582582
583 def disable(self):
584 self.set_sensitive(False)
585 self.set_name("subtle-label")
586
587 def enable(self):
588 self.set_sensitive(True)
589 self.set_name("label")
583590
584class MoreLink(Gtk.Button):591class MoreLink(Gtk.Button):
585592
586593
=== modified file 'test/gtk3/test_appdetailsview.py'
--- test/gtk3/test_appdetailsview.py 2012-01-18 20:12:05 +0000
+++ test/gtk3/test_appdetailsview.py 2012-01-19 19:12:39 +0000
@@ -230,6 +230,24 @@
230 self.assertEqual(False, kwargs['relaxed'])230 self.assertEqual(False, kwargs['relaxed'])
231 self.assertEqual(2, kwargs['page'])231 self.assertEqual(2, kwargs['page'])
232232
233 @patch('softwarecenter.backend.spawn_helper.SpawnHelper.run')
234 def test_submit_new_review_disables_button(self, mock_run):
235 button = self.view.reviews.new_review
236 self.assertTrue(button.is_sensitive())
237
238 button.emit('clicked')
239
240 self.assertFalse(button.is_sensitive())
241
242 def test_new_review_dialog_closes_reenables_submit_button(self):
243 button = self.view.reviews.new_review
244 button.disable()
245
246 self.view._submit_reviews_done_callback(None, 0)
247
248 self.assertTrue(button.is_sensitive())
249
250
233251
234if __name__ == "__main__":252if __name__ == "__main__":
235 import logging253 import logging
236254
=== modified file 'utils/submit_review_gtk3.py'
--- utils/submit_review_gtk3.py 2012-01-19 09:23:54 +0000
+++ utils/submit_review_gtk3.py 2012-01-19 19:12:39 +0000
@@ -31,6 +31,7 @@
31from gettext import gettext as _31from gettext import gettext as _
32from optparse import OptionParser32from optparse import OptionParser
3333
34import softwarecenter.paths
34from softwarecenter.paths import SOFTWARE_CENTER_CACHE_DIR35from softwarecenter.paths import SOFTWARE_CENTER_CACHE_DIR
35from softwarecenter.db.database import Application36from softwarecenter.db.database import Application
3637
@@ -85,6 +86,8 @@
85 action="store_true", default=False)86 action="store_true", default=False)
86 (options, args) = parser.parse_args()87 (options, args) = parser.parse_args()
8788
89 softwarecenter.paths.datadir = options.datadir
90
88 if options.test:91 if options.test:
89 options.pkgname = options.pkgname or 'apt'92 options.pkgname = options.pkgname or 'apt'
90 options.appname = options.appname or 'Apt'93 options.appname = options.appname or 'Apt'
@@ -122,6 +125,8 @@
122 action="store_true", default=False)125 action="store_true", default=False)
123 (options, args) = parser.parse_args()126 (options, args) = parser.parse_args()
124127
128 softwarecenter.paths.datadir = options.datadir
129
125 if not (options.review_id):130 if not (options.review_id):
126 parser.error(_("Missing review-id arguments"))131 parser.error(_("Missing review-id arguments"))
127 132
@@ -146,6 +151,8 @@
146 action="store_true", default=False)151 action="store_true", default=False)
147 (options, args) = parser.parse_args()152 (options, args) = parser.parse_args()
148153
154 softwarecenter.paths.datadir = options.datadir
155
149 if not (options.review_id):156 if not (options.review_id):
150 parser.error(_("Missing review-id arguments"))157 parser.error(_("Missing review-id arguments"))
151 158
@@ -170,6 +177,8 @@
170 action="store_true", default=False)177 action="store_true", default=False)
171 (options, args) = parser.parse_args()178 (options, args) = parser.parse_args()
172 179
180 softwarecenter.paths.datadir = options.datadir
181
173 if not (options.review_id):182 if not (options.review_id):
174 parser.error(_("Missing review-id argument"))183 parser.error(_("Missing review-id argument"))
175 184
@@ -192,6 +201,8 @@
192 action="store_true", default=False)201 action="store_true", default=False)
193 (options, args) = parser.parse_args()202 (options, args) = parser.parse_args()
194203
204 softwarecenter.paths.datadir = options.datadir
205
195 if not (options.review_id):206 if not (options.review_id):
196 parser.error(_("Missing review-id argument"))207 parser.error(_("Missing review-id argument"))
197 208