Fix utterly broken tag core new/cur/old detection
authorJack Miller <jack@codezen.org>
Mon, 8 Aug 2016 18:34:23 +0000 (13:34 -0500)
committerJack Miller <jack@codezen.org>
Mon, 8 Aug 2016 18:34:23 +0000 (13:34 -0500)
Turns out when you double sort one list instead of sorting both lists,
assuming that both lists are sorted is a bad idea.

Fortunately, we only used this logic to notify other objects, so the
worst effect is that we woke up the gui thread for nothing, and the
pending item count got out of wack, but in theory it could also remove
items improperly, although I haven't seen that in the wild.

Closes #40

canto_curses/tagcore.py

index a0341f3..cfe611f 100644 (file)
@@ -172,7 +172,7 @@ class TagUpdater(SubThread):
         sorted_updated_ids.sort(key=lambda x : x[1])
 
         sorted_current_ids = list(enumerate(have_tag))
-        sorted_updated_ids.sort(key=lambda x : x[1])
+        sorted_current_ids.sort(key=lambda x : x[1])
 
         new_ids = []
         cur_ids = []
@@ -185,8 +185,7 @@ class TagUpdater(SubThread):
             if not sorted_updated_ids or c_id < sorted_updated_ids[0][1]:
                 old_ids.append(c_id)
             else:
-                place = sorted_updated_ids.pop(0)[0]
-                cur_ids.append((place, c_id))
+                cur_ids.append(sorted_updated_ids.pop(0))
 
         new_ids += sorted_updated_ids