Please, ignore this patch set. I forgot to run make rpm :)
On Tue, 2013-07-09 at 12:49 +0200, Jakub Filak wrote:
Closes rhbz#956912
Signed-off-by: Jakub Filak jfilak@redhat.com
src/gnome_abrt/views.py | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/src/gnome_abrt/views.py b/src/gnome_abrt/views.py index 34e1fab..73a8fa7 100644 --- a/src/gnome_abrt/views.py +++ b/src/gnome_abrt/views.py @@ -88,13 +88,18 @@ def problem_to_storage_values(problem): problem]
#pylint: disable=W0613 -def time_sort_func(model, first, second, view): +def time_sort_func(model, first, second, trash):
- # skip invalid problems which were marked invalid while sorting
- if (model[first][2].problem_id in trash or
model[second][2].problem_id in trash):
return 0
- try: lhs = model[first][2]['date_last'].timetuple() rhs = model[second][2]['date_last'].timetuple() return time.mktime(lhs) - time.mktime(rhs) except errors.InvalidProblem as ex:
view._remove_problem_from_storage(ex.problem_id)
trash.add(ex.problem_id) logging.debug(ex) return 0
@@ -279,7 +284,10 @@ class OopsWindow(Gtk.ApplicationWindow): self._set_button_toggled(self._source.button, True)
self._builder.ls_problems.set_sort_column_id(0, Gtk.SortType.DESCENDING)
self._builder.ls_problems.set_sort_func(0, time_sort_func, self)
# a set where invalid problems found while sorting of the problem list
# are stored
self._trash = set()
self._builder.ls_problems.set_sort_func(0, time_sort_func, self._trash) self._filter = ProblemsFilter(self, self._builder.tv_problems) self._builder.tv_problems.grab_focus()
@@ -405,13 +413,27 @@ class OopsWindow(Gtk.ApplicationWindow): Returns True if the problem was successfully added to the storage; otherwise returns False """
problem_values = None try:
self._builder.ls_problems.append(problem_to_storage_values(problem))
return True
problem_values = problem_to_storage_values(problem) except errors.InvalidProblem as ex: logging.debug("Exception: {0}".format(traceback.format_exc()))
self._remove_problem_from_storage(ex.problem_id)
return False
return
self._append_problem_values_to_storage(problem_values)
def _append_problem_values_to_storage(self, problem_values):
self._builder.ls_problems.append(problem_values)
self._clear_invalid_problems_trash()
def _clear_invalid_problems_trash(self):
# GtkListStore.append()/set_value() methods trigger
# time_sort_func() where InvalidProblem exception can occur. In that
# case time_sort_func() pushes an invalid problem to the trash set
# because the invalid problem cannot be removed while executing the
# operation
while self._trash:
self._remove_problem_from_storage(self._trash.pop())
def _remove_problem_from_storage(self, problem): if problem is None:
@@ -433,6 +455,7 @@ class OopsWindow(Gtk.ApplicationWindow):
for i in xrange(0, len(values)-1): self._builder.ls_problems.set_value(pit, i, values[i])
self._clear_invalid_problems_trash() if problem in self._get_selected(self._builder.tvs_problems): self._set_problem(problem)
@@ -461,7 +484,7 @@ class OopsWindow(Gtk.ApplicationWindow):
if storage_problems: for p in storage_problems:
self._builder.ls_problems.append(p)
self._append_problem_values_to_storage(p) finally: self._reloading = False