Merge lp:~aaronp/software-center/fix-794060-for-4.0 into lp:software-center/4.0

Proposed by Aaron Peachey
Status: Merged
Merged at revision: 1774
Proposed branch: lp:~aaronp/software-center/fix-794060-for-4.0
Merge into: lp:software-center/4.0
Diff against target: 94 lines (+34/-6)
3 files modified
softwarecenter/db/reviews.py (+3/-3)
softwarecenter/view/appdetailsview_gtk.py (+15/-3)
softwarecenter/view/widgets/reviews.py (+16/-0)
To merge this branch: bzr merge lp:~aaronp/software-center/fix-794060-for-4.0
Reviewer Review Type Date Requested Status
software-store-developers Pending
Review via email: mp+64183@code.launchpad.net

Description of the change

Fixes lp:#794060 which was resulting in review duplication after a review activity (e.g. submit usefulness) as pagination code introduced in 4.0.3 no longer clears the reviews in the app details view before reloading them.

Once (and if) this branch is approved, I'll re-write the fix separately for trunk too (since the refactoring has changed alot of the structure in trunk since 4.0).

To post a comment you must log in.
Revision history for this message
Michael Vogt (mvo) wrote :

On Fri, Jun 10, 2011 at 01:38:36PM -0000, Aaron Peachey wrote:
> Aaron Peachey has proposed merging lp:~aaronp/software-center/fix-794060-for-4.0 into lp:software-center/4.0.
>
> Requested reviews:
> software-store-developers (software-store-developers)
> Related bugs:
> Bug #794060 in software-center (Ubuntu): "Software Centre duplicate reviews"
> https://bugs.launchpad.net/ubuntu/+source/software-center/+bug/794060
>
> For more details, see:
> https://code.launchpad.net/~aaronp/software-center/fix-794060-for-4.0/+merge/64183
>
> Fixes lp:#794060 which was resulting in review duplication after a review activity (e.g. submit usefulness) as pagination code introduced in 4.0.3 no longer clears the reviews in the app details view before reloading them.
>
> Once (and if) this branch is approved, I'll re-write the fix separately for trunk too (since the refactoring has changed alot of the structure in trunk since 4.0).
[..]

Indeed, thanks a lot for this! This is a good catch. I merged it now
and will push it to proposed next.

Thanks,
 Michael

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'softwarecenter/db/reviews.py'
2--- softwarecenter/db/reviews.py 2011-05-10 13:35:36 +0000
3+++ softwarecenter/db/reviews.py 2011-06-10 13:38:30 +0000
4@@ -299,7 +299,7 @@
5 if str(review.id) == str(review_id):
6 # remove the one we don't want to see anymore
7 self._reviews[app].remove(review)
8- callback(app, self._reviews[app])
9+ callback(app, self._reviews[app], None, 'remove', review)
10 break
11
12 def _on_submit_usefulness_finished(self, pid, status, (review_id, is_useful, stdout_fd, callback)):
13@@ -322,7 +322,7 @@
14 review.usefulness_total = getattr(review, "usefulness_total", 0) + 1
15 if is_useful:
16 review.usefulness_favorable = getattr(review, "usefulness_favorable", 0) + 1
17- callback(app, self._reviews[app], useful_votes)
18+ callback(app, self._reviews[app], useful_votes, 'replace', review)
19 break
20 else:
21 LOG.debug("submit usefulness id=%s failed with exitcode %s" % (
22@@ -331,7 +331,7 @@
23 for review in reviews:
24 if str(review.id) == str(review_id):
25 review.usefulness_submit_error = exitcode
26- callback(app, self._reviews[app])
27+ callback(app, self._reviews[app], None, 'replace', review)
28 break
29
30
31
32=== modified file 'softwarecenter/view/appdetailsview_gtk.py'
33--- softwarecenter/view/appdetailsview_gtk.py 2011-05-10 14:40:05 +0000
34+++ softwarecenter/view/appdetailsview_gtk.py 2011-06-10 13:38:30 +0000
35@@ -785,8 +785,17 @@
36 self.review_loader.get_reviews(
37 self.app, self._reviews_ready_callback,
38 page=self._reviews_server_page)
39+
40+ def _review_update_single(self, action, review):
41+ if action == 'replace':
42+ self.reviews.replace_review(review)
43+ elif action == 'remove':
44+ self.reviews.remove_review(review)
45+ return
46+
47
48- def _reviews_ready_callback(self, app, reviews_data, my_votes=None):
49+ def _reviews_ready_callback(self, app, reviews_data, my_votes=None,
50+ action=None, single_review=None):
51 """ callback when new reviews are ready, cleans out the
52 old ones
53 """
54@@ -819,8 +828,11 @@
55 if my_votes:
56 self.reviews.update_useful_votes(my_votes)
57
58- for review in reviews_data:
59- self.reviews.add_review(review)
60+ if action:
61+ self._review_update_single(action, single_review)
62+ else:
63+ for review in reviews_data:
64+ self.reviews.add_review(review)
65 self.reviews.configure_reviews_ui()
66
67 def on_test_drive_clicked(self, button):
68
69=== modified file 'softwarecenter/view/widgets/reviews.py'
70--- softwarecenter/view/widgets/reviews.py 2011-05-31 06:23:01 +0000
71+++ softwarecenter/view/widgets/reviews.py 2011-06-10 13:38:30 +0000
72@@ -881,6 +881,22 @@
73 def add_review(self, review):
74 self.reviews.append(review)
75 return
76+
77+ def replace_review(self, review):
78+ for r in self.reviews:
79+ if r.id == review.id:
80+ pos = self.reviews.index(r)
81+ self.reviews.remove(r)
82+ self.reviews.insert(pos, review)
83+ break
84+ return
85+
86+ def remove_review(self, review):
87+ for r in self.reviews:
88+ if r.id == review.id:
89+ self.reviews.remove(r)
90+ break
91+ return
92
93 def clear(self):
94 self.reviews = []

Subscribers

People subscribed via source and target branches