Merge lp:~aaronp/software-center/fix-807010 into lp:software-center

Proposed by Aaron Peachey
Status: Merged
Merged at revision: 1936
Proposed branch: lp:~aaronp/software-center/fix-807010
Merge into: lp:software-center
Diff against target: 167 lines (+66/-51)
3 files modified
debian/changelog (+7/-1)
softwarecenter/backend/reviews.py (+50/-42)
softwarecenter/backend/spawn_helper.py (+9/-8)
To merge this branch: bzr merge lp:~aaronp/software-center/fix-807010
Reviewer Review Type Date Requested Status
Gary Lasker (community) Approve
Michael Vogt Pending
Review via email: mp+67328@code.launchpad.net

Commit message

* softwarecenter/backend/reviews.py,
   softwarecenter/backend/spawn_helper.py:
    - correct modify/delete UI callback behaviour with
      new spawn helper and pagination code (LP: #807010)

Description of the change

Fixes bug lp: #807010 - issue where modified and deleted reviews not replacing in the UI after a successful update by making compatible with recent changes to pagination and spawn_helper.

I believe usefulness votes and report abuse will also not update the UI correctly, which I will work on next but proposing this for merging now since it fixes 807010 without further delay.

To post a comment you must log in.
Revision history for this message
Gary Lasker (gary-lasker) wrote :

Excellent work as always, Aaron, thank you very much!!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2011-07-07 16:04:38 +0000
3+++ debian/changelog 2011-07-08 19:13:52 +0000
4@@ -9,7 +9,13 @@
5 item network state bugs, many thanks to Robert Roth
6 (LP: #802919, LP: #802920)
7
8- -- Gary Lasker <gary.lasker@canonical.com> Thu, 07 Jul 2011 12:02:13 -0400
9+ [ Aaron Peachey ]
10+ * softwarecenter/backend/reviews.py,
11+ softwarecenter/backend/spawn_helper.py:
12+ - correct modify/delete UI callback behaviour with
13+ new spawn helper and pagination code (LP: #807010)
14+
15+ -- Aaron Peachey <alpeachey@gmail.com> Fri, 08 Jul 2011 23:00:47 +1000
16
17 software-center (4.1.8) oneiric; urgency=low
18
19
20=== modified file 'softwarecenter/backend/reviews.py'
21--- softwarecenter/backend/reviews.py 2011-07-05 07:09:20 +0000
22+++ softwarecenter/backend/reviews.py 2011-07-08 19:13:52 +0000
23@@ -469,28 +469,32 @@
24 spawn_helper.connect("exited",
25 self._on_delete_review_finished,
26 review_id, callback)
27+ spawn_helper.connect("error", self._on_delete_review_error,
28+ review_id, callback)
29 spawn_helper.run(cmd)
30
31- def _on_delete_review_finished(self, spawn_helper, exitcode, review_id, callback):
32+ def _on_delete_review_finished(self, spawn_helper, res, review_id, callback):
33 """ called when delete_review finished"""
34- if exitcode == 0:
35- LOG.debug("delete id %s " % review_id)
36- for (app, reviews) in self._reviews.iteritems():
37- for review in reviews:
38- if str(review.id) == str(review_id):
39- # remove the one we don't want to see anymore
40- self._reviews[app].remove(review)
41- callback(app, self._reviews[app])
42- break
43- else:
44- LOG.debug("delete review id=%s failed with exitcode %s" % (
45- review_id, exitcode))
46- for (app, reviews) in self._reviews.iteritems():
47- for review in reviews:
48- if str(review.id) == str(review_id):
49- review.delete_error = exitcode
50- callback(app, self._reviews[app])
51- break
52+ LOG.debug("delete id %s " % review_id)
53+ for (app, reviews) in self._reviews.iteritems():
54+ for review in reviews:
55+ if str(review.id) == str(review_id):
56+ # remove the one we don't want to see anymore
57+ self._reviews[app].remove(review)
58+ callback(app, self._reviews[app], None, 'remove', review)
59+ break
60+
61+ def _on_delete_review_error(self, spawn_helper, error_str, review_id, callback):
62+ """called if delete review errors"""
63+ LOG.warn("delete review id=%s failed with error: %s" % (review_id, error_str))
64+ for (app, reviews) in self._reviews.iteritems():
65+ for review in reviews:
66+ if str(review.id) == str(review_id):
67+ review.delete_error = True
68+ callback(app, self._reviews[app], action='replace',
69+ single_review=review)
70+ break
71+
72
73 def spawn_modify_review_ui(self, parent_xid, iconname, datadir, review_id, callback):
74 """ this spawns the UI for writing a new review and
75@@ -502,35 +506,39 @@
76 "--review-id", "%s" % review_id,
77 ]
78 spawn_helper = SpawnHelper(format="json")
79- spawn_helper.connect("exited",
80+ spawn_helper.connect("data-available",
81 self._on_modify_review_finished,
82 review_id, callback)
83+ spawn_helper.connect("error", self._on_modify_review_error,
84+ review_id, callback)
85 spawn_helper.run(cmd)
86
87-
88- def _on_modify_review_finished(self, spawn_helper, exitcode, review_id, review_json, callback):
89+ def _on_modify_review_finished(self, spawn_helper, review_json, review_id, callback):
90 """called when modify_review finished"""
91 LOG.debug("_on_modify_review_finished")
92- if exitcode == 0:
93- review_json = spawn_helper._stdout
94- mod_review = ReviewDetails.from_dict(review_json)
95- for (app, reviews) in self._reviews.iteritems():
96- for review in reviews:
97- if str(review.id) == str(review_id):
98- # remove the one we don't want to see anymore
99- self._reviews[app].remove(review)
100- self._reviews[app].insert(0, Review.from_piston_mini_client(mod_review))
101- callback(app, self._reviews[app])
102- break
103- else:
104- LOG.debug("modify review id=%s failed with exitcode %s" % (
105- review_id, exitcode))
106- for (app, reviews) in self._reviews.iteritems():
107- for review in reviews:
108- if str(review.id) == str(review_id):
109- review.modify_error = exitcode
110- callback(app, self._reviews[app])
111- break
112+ #review_json = spawn_helper._stdout
113+ mod_review = ReviewDetails.from_dict(review_json)
114+ for (app, reviews) in self._reviews.iteritems():
115+ for review in reviews:
116+ if str(review.id) == str(review_id):
117+ # remove the one we don't want to see anymore
118+ self._reviews[app].remove(review)
119+ new_review = Review.from_piston_mini_client(mod_review)
120+ self._reviews[app].insert(0, new_review)
121+ callback(app, self._reviews[app], action='replace',
122+ single_review=new_review)
123+ break
124+
125+ def _on_modify_review_error(self, spawn_helper, error_str, review_id, callback):
126+ """called if modify review errors"""
127+ LOG.debug("modify review id=%s failed with error: %s" % (review_id, error_str))
128+ for (app, reviews) in self._reviews.iteritems():
129+ for review in reviews:
130+ if str(review.id) == str(review_id):
131+ review.modify_error = True
132+ callback(app, self._reviews[app], action='replace',
133+ single_review=review)
134+ break
135
136
137 # this code had several incernations:
138
139=== modified file 'softwarecenter/backend/spawn_helper.py'
140--- softwarecenter/backend/spawn_helper.py 2011-06-21 12:09:26 +0000
141+++ softwarecenter/backend/spawn_helper.py 2011-07-08 19:13:52 +0000
142@@ -64,16 +64,17 @@
143 def _helper_finished(self, pid, status, (stdout, stderr)):
144 # get status code
145 res = os.WEXITSTATUS(status)
146- if res != 0:
147+ if res == 0:
148+ self.emit("exited", res)
149+ else:
150 LOG.warn("exit code %s from helper" % res)
151- # check stderr
152- err = os.read(stderr, 4*1024)
153- self._stderr = err
154- if err:
155- LOG.warn("got error from helper: '%s'" % err)
156+ # check stderr
157+ err = os.read(stderr, 4*1024)
158+ self._stderr = err
159+ if err:
160+ LOG.warn("got error from helper: '%s'" % err)
161 self.emit("error", err)
162- os.close(stderr)
163- self.emit("exited", res)
164+ os.close(stderr)
165
166 def _helper_io_ready(self, source, condition, (stdout,)):
167 # read the raw data

Subscribers

People subscribed via source and target branches