160
160
cmd, flags=glib.SPAWN_DO_NOT_REAP_CHILD, standard_output=True)
161
161
glib.child_watch_add(pid, self._on_report_abuse_finished, (review_id, callback))
163
def spawn_submit_usefulness_ui(self, review_id, is_useful, parent_xid, datadir, callback):
164
cmd = [os.path.join(datadir, SUBMIT_USEFULNESS_APP),
165
"--review-id", "%s" % review_id,
166
"--is-useful", "%s" % int(is_useful),
167
"--parent-xid", "%s" % parent_xid,
168
"--datadir", datadir,
170
(pid, stdin, stdout, stderr) = glib.spawn_async(
171
cmd, flags=glib.SPAWN_DO_NOT_REAP_CHILD, standard_output=True)
172
glib.child_watch_add(pid, self._on_submit_usefulness_finished, (review_id, is_useful, callback))
163
174
# internal callbacks/helpers
164
175
def _on_submit_review_finished(self, pid, status, (app, stdout_fd, callback)):
165
176
""" called when submit_review finished, when the review was send
205
216
# remove the one we don't want to see anymore
206
217
self._reviews[app].remove(review)
207
218
callback(app, self._reviews[app])
221
def _on_submit_usefulness_finished(self, pid, status, (review_id, is_useful, callback)):
222
""" called when report_usefulness finished """
223
if os.WEXITSTATUS(status) == 0:
224
LOG.debug("usefulness id %s " % review_id)
225
for (app, reviews) in self._reviews.iteritems():
226
for review in reviews:
227
if str(review.id) == str(review_id):
228
# update usefulness, older servers do not send
229
# usefulness_{total,favorable} so we use getattr
230
review.usefulness_total = getattr(review, "usefulness_total", 0) + 1
232
review.usefulness_favorable = getattr(review, "usefulness_favorable", 0) + 1
233
callback(app, self._reviews[app])
210
237
# using multiprocessing here because threading interface was terrible